在一个春天的夜晚,好久也没怎么出门的我,偶然发现 Emacs Lisp 程序能够像脚本程序那般运行,而不仅仅是用于为文本编辑器 Emacs 编写配置文件或插件。这个发现,让我觉得无意中发现了一宗瑰奇的宝藏。
关于 Lisp 语言的源远流长及其与 Emacs 的莫逆之交,有很多书籍和文章早已给出了严肃的介绍,在此我就不必再行考证和阐述了……没人发稿费,就没必要凑字数。下面,大致总结一下为什么我会觉得能像脚本程序那般运行的 Emacs Lisp 程序蕴含着一宗宝藏:
- Emacs Lisp 具备着通用的编程语言应该具备的元素,可用于编写在计算机上解释运行的程序。
- Emacs Lisp 是一种 Lisp 方言,继承了 Lisp 语言的一些重要特性,例如支持泛函编程(Functional Progarmming),可基于宏实现语法扩展。与那些更好的 Lisp 方言相比,Emacs Lisp 存在一些差距 1,却也无伤大雅,因为在通晓 Emacs Lisp 的基础上,再学习其他更好的 Lisp 方言,仅需要再理解寥寥几个新的概念,诸如续延(Continuation)、卫生宏(Hygienic macro)等。
- 使用 Emacs Lisp 语言编写的程序具备跨平台性。Emacs 可在 GNU/Linux,Windows,Mac OS 以及 FreeBSD 等系统上运行,因而使用 Emacs Lisp 语言编写的程序通常可毫无障碍地这些系统中运行。
- Emacs Lisp 程序可调用 C 程序库里的函数 2,因而其性能瓶颈可基于 C 程序予以弥补。
- Emacs Lisp 具备其他编程语言可能没有的一些特性,这个特性并不来自语言,而是来自 Emacs 自身。迄今为止,Emacs 依然称得上世上最好的文本编辑器,它在文本处理方面长期以来凝聚了众多智慧,而这些智慧早已积淀形成了一个庞大的 Emacs Lisp 代码库。这是否意味着,在我使用 Emacs Lisp 编写一个程序用于处理某种特定格式的文本时,有近乎取之不尽的代码可用呢?
诚然,Emacs Lisp 有一些先天不足 3。不过,对于文本处理方面的任务而言,Emacs 自身的存在足以证明这些先天不足是次要矛盾。我所说的能像脚本程序那般运行的 Emacs Lisp 程序蕴含着一宗宝藏,主要针对编写文本处理程序而言。
基于上述构想,我为了消费这宗宝藏而作出了以下这些微小的尝试:
我不是 Emacs 专家,也不是 Lisp 专家,只是一个希望 Emacs Lisp 能在生活中发挥一些作用的人。在上述的尝试里,我像许多人那样,将 Emacs Lisp 简称为 Elisp,以略微减轻手指关节的劳损。
- https://www.emacswiki.org/ema...
- Emacs 自版本 25 开始支持加载 C 语言写的动态库。 ↩
- https://www.emacswiki.org/ema...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。