除了编辑emacs之外,Emacs LISP有多可行?

15

我正在攻读计算机科学专业的第二年,只学习了C(第一门课程和一门多态数据结构课程)、C++(面向对象编程重点)、MIPS汇编语言和编译器课程。我在暑假期间使用WinForms和C#工作。我通过《小推车手册》进行了学习,并且非常有兴趣学习某种LISP。

Emacs是我的首选编辑器,Emacs LISP应该是一个很好的起点。

除了自定义emacs之外,在哪些地方可以使用emacs LISP?根据链接文本所述,将elisp代码制作成可执行文件几乎是不可能的。还有哪些限制?

我应该学习Scheme还是Common Lisp?


2
可能会感兴趣的是这个相关问题 - 它有一些回答讨论了Emacs Lisp和Common Lisp的优缺点。https://dev59.com/hW865IYBdhLWcg3wZNnT - Trey Jackson
作为计算机科学专业的学生,你应该学会学习。学习一些Lisp语言是很好的选择,无论你选择哪种版本都不重要。因为你可以轻松地将所学的知识从一种语言转移到另一种语言。 - Stefan
6个回答

11

Emacs是一款文本编辑器。Emacs Lisp则是一门以文本编辑为核心的编程语言。

我认为elisp在今天的巅峰表现是ERC(Emacs IRC客户端)和org-mode,一个非常好用的组织系统。还有一个针对Emacs的电子邮件客户端。

因此,如果要构建文本编辑插件,我认为你不能打败elisp/emacs。

对于实际的独立应用程序开发来说, Common Lisp可能是最好的选择。我偏向CLISP实现,但SBCL也非常受欢迎。有很多Lisp实现。最近有人开玩笑说,比使用Lisp的公司还要多的是Lisp编译器。:-o


SBCL 似乎是目前最受欢迎的 Lisp 实现,例如 Xach 最近的调查(包括免费和商业编译器)中有超过80%的用户使用 SBCL。 - Ken

5

正如其他人所说,Emacs Lisp 包含了许多构建文本编辑器的基础。

尽管如此,它仍然是 Lisp,而且在使用 Lisp(Emacs、Common 或 Scheme)时需要适应。

如果你想要使用 Common Lisp 宏,可以使用 common lisp package

如果你有兴趣,可以使用 Emacs Lisp 编写 shell 脚本(参见这个问题),如果你想连接到其他正在运行的进程,则可以使用 inferior process handling(参见comint)。

找到一个你想要处理的项目,然后根据项目需求做出决定。如果 Emacs Lisp 很好用,就使用它;如果 Common Lisp 很好用,就使用它。


4

当然,这是主观的看法,但我认为学习Common Lisp或(标准)Scheme通常更有用,因为这样你就不会局限于一种编译器。很难预见你可能想要用代码做什么,所以为什么要将自己限制在一个实现上呢?


4

看起来你想要学习Lisp。为此,通常推荐Scheme语言,而你说正在读《The Little Schemer》。

PLT Racket原名为PLT Scheme,是一个非常好的Scheme开发和学习环境。最初PLT Scheme的主要重点是教学,从Scheme更名为Racket是一个糟糕的双关语,但旨在表明该系统也足够成熟且足以用于生产性的“真实世界”应用。


3

Emacs Lisp是一种更偏向于Emacs环境的脚本语言,如果你想要与Stallman匹敌或者想要编写扩展程序,学习它很有用。

Common Lisp是Lisp的事实标准。Scheme由于其与著名的MIT课程和书籍(SICP)的关联而更具有教学意义,尽管它本身也很强大。

但它们是不同的。在某些方面,Scheme是最小的计算机语言之一(就标准库而言)。该语言定义只有六页。Common Lisp是最大的计算机语言之一。

还有其他更有趣的例子。几年前,我试玩了一种Lisp方言,它支持内嵌C和Python代码,并且能够导入和使用C和Python对象以及直接从中调用函数。然而,因为我在谷歌上找不到参考资料,这种方言似乎已经逐渐被淡忘。


3
我建议如果你想学习一些Lisp的话,可以使用鸡Scheme(http://www.call-cc.org)。它有非常好的文档,正在积极开发中,适用于各种平台,并且有一个名为“eggs”的伟大扩展系统,其中包含很多库,用于实际编码,这是scheme没有直接指定的。另一方面,Emacs是学习Emacs Lisp的绝佳开发环境,这对于脚本编写和(显然)自定义Emacs非常有用。只需按下C-h f、C-h v和C-h A即可获得函数和变量的文档,这使得开发变得更加容易;当然,前提是你学会了elisp多年来创造的一些更为晦涩的命名约定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接