不知多久能學會 Elisp

在一個春天的夜晚,好久也沒怎麼出門的我,偶然發現 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,以略微減輕手指關節的勞損。


  1. https://www.emacswiki.org/emacs/SchemeAndLisp

  2. Emacs 自版本 25 開始支持加載 C 語言寫的動態庫。

  3. https://www.emacswiki.org/emacs/EmacsLispLimitations

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章