【问题标题】:What's so inferior about inferior-lisp?劣质lisp有什么劣势?
【发布时间】:2014-08-10 03:02:41
【问题描述】:

当我开始学习 lisp、emacs 和 ess(Emacs Speaks Statistics)时,我遇到了这个或那个不如这个的概念。例如,inferior-ess-mode、inferior-lisp 和 Inferior Emacs Lisp Mode。

在所有这些情况下,似乎某些解释性语言在 emacs 中运行,您可以在缓冲区中与它进行交互。 但是为什么他们不如他们,他们不如什么?

【问题讨论】:

  • 低人一等的意思是你不如你的上级。这不是一个定性术语。它指的是下级流程由上级流程管理,向上级流程“报告”,并从上级流程“接受任务”。

标签: emacs lisp elisp ess


【解决方案1】:

低级模式是指作为 emacs 的子进程运行的模式。

例如,这是我启动 emacs 时的进程树:

$ pstree 62238
--= 62238 smt /usr/local/Cellar/emacs/HEAD/Emacs.app/Contents/MacOS/Emacs

在我运行一个劣质的 tcl shell 之后,我的进程树是这样的:

$ pstree 62238
-+= 62238 smt /usr/local/Cellar/emacs/HEAD/Emacs.app/Contents/MacOS/Emacs
 \-+= 62359 smt /bin/sh /usr/bin/wish
   \--- 62361 smt /usr/bin/../../System/Library/Frameworks/Tk.framework/Version

另一种说法可能是,在这种情况下,“inferior”与前缀“sub-”是同义词。

【讨论】:

    【解决方案2】:

    我认为 Inferior Emacs Lisp Mode (ielm) 是一个错误的名称。那应该命名为Interactive Emacs Lisp Mode。使用 ielm,Emacs Lisp 不会像劣质的 Lisp 一样运行。它是内置 Emacs Lisp 的 read eval print 循环。 GNU Emacs 确实将其命名为 Inferior Emacs Lisp Mode,但如果您查看源代码,它会直接使用内置的 Emacs Lisp eval 来评估表达式。它只是重用了一些基础设施 (comint) 来处理劣质解释器(如 Lisps、shell 等)。

    通常劣质 Lisp 意味着它是一个(通常是外部的)Lisp 系统,由 Emacs 控制。它也不需要是 Emacs Lisp。通常是其他一些 Lisp 方言,如 Common Lisp。 Common Lisp 对 Emacs 和 Common Lisp 有/有几个扩展,因此它作为具有 Lisp 开发环境的许多功能(调试器、检查器、源定位器...)的劣质 Lisp 运行:

    • ILISP(劣质 Lisp),已过时
    • ELI(Emacs-Lisp 接口),来自 Franz, Inc.,用于 Allegro CL
    • SLIME(Emacs 的高级 Lisp 交互模式)

    Emacs 还有一个简单的内置工具,用于运行劣质 Lisp:External Lisp。

    • inferior-ess-mode:控制 R 子进程
    • inferior-lisp:一个 Lisp 子进程
    • inferior-emacs-lisp-mode:内置的 Emacs Lisp 作为 read eval 打印循环

    【讨论】:

    • 已经有lisp-interaction-mode,在*Scratch*中使用。对于 IELM,“Inferior”是指通过 Comint Mode 运行,这是所有“Inferior”模式(即 Inferior Haskell Mode)所做的,所以这确实是 IELM 的显着特征。 Lisp 交互模式提供了一种完全不同的 Emacs Lisp 解释方式。
    • lunaryorn: lisp-interaction-mode 也使用内置的 Emacs Lisp。它和 ielm 都没有使用 劣质 Lisp。
    • 建立在 Comint 之上,IELM 看起来像是一个“劣等”解释器,无论出于何种目的和意图。与 Lisp 交互模式相比,“交互”不足以描述 IELM 的显着特征。最后,M-: 也是“交互式的”。所有的 Emacs 本质上都是一个交互式 Emacs Lisp 环境。l
    • lunaryorn:它可能看起来像 Inferior Lisp,但它的行为并非如此。例如,如果执行 Emacs Lisp 代码,Emacs 完全没有响应。更改是本地 Emacs 等 - 这意味着重新定义 Emacs Lisp 函数可能会使编辑器崩溃,设置变量可能会对编辑器产生影响,...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多