自托管的概念

时间:2016-05-19 07:13:18

标签: self-hosting

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

维基百科声明:

  

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

据此,我知道有人有一个Lisp解释器,(比方说Python) 然后Python程序读取一个Lisp程序,该程序又可以读取Lisp程序。

通过术语“自托管”,这肯定不能说Python程序可以停止使用,因为删除它会删除运行读取其他Lisp程序的Lisp程序的能力!

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

下次要编译编译器时,命令为:

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

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

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