Emacs Lisp Macros

断断续续地在看Emacs Lisp Reference Manual,卡在Macros一节下不去了,把Macros、Byte Compilation和Evaluation三节反反复复看了好几遍,终于弄明白了,原来此Macro非彼Macro,和C里面的宏完全是两码事。

Emacs Lisp里的Macro实际上是Code Generator,和C里面的文本替换完全不同,即Emacs Lisp Macro是一段可以执行的Lisp程序,其执行结果并非是一般的值,而是另一段可以执行的Lisp程序。所以,一个宏调用实际上包含两段Emacs Lisp程序的执行过程,首先调用宏,生成一段新的Lisp程序,再来执行这段新生成的代码。第一个阶段就是所谓的宏替换,Byte Compilation则只做第一阶段,而不去执行新生成的代码。

说穿了不过是一层窗户纸,可不明白的时候才叫郁闷呢。所以说,如果质量可以保证的话,有人教要比自己看书效率高的多,因为可以交互,不懂就问,而写书的人只能猜测读者的问题,比如我在这里就把我觉得容易忽略的词用了粗体,这些词正是我在读Emacs Lisp Reference Manual时忽略的。

说到这再跑两句题。最近在看苏福忠著的《译事余墨》,其中谈到英译汉的主要问题在于是否弄懂原文的意思,很可能一字一句都有玄机,稍有疏忽就会“差之毫厘、谬以千里”。联系到自己学Emacs Lisp Macro这么费劲,问题也全出在阅读理解上,这才意识到自己这点英语水平还远远不够,与其每次都浪费时间反复阅读,不如索性下点苦功夫提高英文水平。自从过了六级就没再认真学过英语,这回又有动力了。

Always Produce

今天读了Paul Graham的美文”How to Do What You Love“,深以为然,打算在这个周末把它翻译出来,与更多的人分享。下面这段话是让我感触最深的段落之一。

“Always produce” is also a heuristic for finding the work you love. If you subject yourself to that constraint, it will automatically push you away from things you think you’re supposed to work on, toward things you actually like. “Always produce” will discover your life’s work the way water, with the aid of gravity, finds the hole in your roof.

这也是我今年对自己的要求,多做实事。特别地,作为一个程序员,要多写代码,多写心得。德鲁克在他的著作《卓有成效的管理者》中说做事情要“重视机会,不能只看到困难”,还说“目标要高,要有新意,不能只求安全和方便”。所以今年一定要志存高远,敢想敢干。其实我刚刚就碰到一个自以为很难解决的问题,拖了两天才动手,哪知很快就解决了,顿时信心大增。看来很多人终其一生没有什么成就,不一定是因为他们没有能力,而是因为他们不敢想。

这段话对我触动很深,使得我顿时中断阅读,转而去看代码,一直看到心安之后才返回来把文章读完。:-)