【问题标题】:The concept of Self-Hosting自托管的概念
【发布时间】:2016-05-19 07:13:17
【问题描述】:

所以我正在开发一种小型编程语言,并试图掌握“自托管”的概念。

维基百科指出:

第一个自托管编译器(不包括汇编器)是 1962 年由麻省理工学院的 Hart 和 Levin 为 Lisp 编写的。他们用 Lisp 编写了一个 Lisp 编译器,并在现有的 Lisp 解释器中对其进行了测试。一旦他们将编译器改进到可以编译自己的源代码的程度,它就是自托管的。

据我所知,有人有一个 Lisp 解释器,(让我们用 Python 说)。
然后 Python 程序读取一个 Lisp 程序,该程序反过来也可以读取 Lisp 程序。

“自托管”这个词肯定不能意味着 Python 程序可以停止使用,因为删除它会删除运行读取其他 Lisp 程序的 Lisp 程序的能力!

因此,程序如何能够直接在操作系统上托管自己?也许我只是没有正确理解它。

【问题讨论】:

    标签: lisp


    【解决方案1】:

    在这种情况下,术语自托管适用于他们编写的 Lisp 编译器,而不是解释器。

    Python Lisp 解释器(如您的示例)将 Lisp 源代码作为输入,并直接执行。

    Lisp 编译器(用 lisp 编写)可以将任何 Lisp 源代码作为输入并生成本机机器二进制文件 [1] 作为输出(然后可以在没有解释器的情况下运行)。

    有了这两个部分,消除 Python 变得可行。流程如下:

    python.exe lispinterpret.py lispcompiler.lisp -i lispcompiler.lisp -o lispcompiler.exe
    

    我们要求 Python 从源代码 (lispcompiler.lisp) 解释 lisp 程序,并将 lispcompiler.lisp 本身作为输入传递。 lispcompiler.lisp 然后输出 lispcompiler.exe 作为输出,它是本机机器二进制文件(不依赖于 Python)。

    下次要编译编译器,命令是:

    lispcompiler.exe -i lispcompiler.lisp -o lispcompiler2.exe
    

    您将拥有一个不使用 Python 的新编译器。

    [1] 或者您可以生成汇编代码,将其传递给汇编器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      相关资源
      最近更新 更多