O'reilly language implementation patterns