LISP 1.5 lisp如何像机器语言一样?

tar*_*lah 3 lisp machine-language s-expression computer-science-theory racket

我希望John McCarthy还活着,但......

来自LISP 1.5程序员手册:

LISP可以解释和执行以S表达式形式编写的程序.因此,与机器语言一样,并且与大多数其他更高级语言不同,它可以用于生成用于进一步执行的程序.

我需要更多关于机器语言如何用于生成程序以及Lisp如何实现它的澄清?

Mar*_*eed 5

所有这一切都说机器代码可以直接将机器指令写入内存并跳转到那些指令来执行它们; 事实上,这是打入软件的许多攻击媒介的基础.

关键是,当您编写机器代码时,很容易生成机器代码.但是当你使用像C这样的编译语言编写时,你不能只在运行时生成C代码然后执行它 - 除非你的程序包含C编译器.

Lisp - 现在,许多其他语言,特别是像Perl,Python,Ruby,Tcl,Javascript和命令shell这样的"脚本语言" - 能够执行在运行时生成的代码.在Lisp中,由于代码和数据具有相同的结构,这通常比在其他语言中的工作少,其中要评估的代码通常是必须被解析的字符串.(尽管Perl具有eval块而不是字符串的能力,这使得编译器可以提前对文本代码进行解析.)


Syl*_*ter 5

机器语言可以在运行时改变自身.我做的最后一个程序集编程是用于MS DOS和常驻程序,我曾经在测试其他程序之前运行.行为不端时,按键切换到驻留程序,可以查看正在运行的程序,并在恢复之前直接更改.因为我没有调试器,所以非常方便.

LISP从一开始就有这个,因为它最初被解释了.您可以在运行时更改函数的定义,并且整个langugage始终在运行时可用,甚至evaldefine.当它开始编译时,它不像Algol那样编译,但部分允许解释和编译的代码同时混合.事实上它的代码结构是列表结构,而符号是一种数据类型.

我在麦卡锡看到的最后一次采访时,他被问及他对现代编程语言的看法(不是LISP家族,而是据说受LISP影响的Algol家族语言Ruby),在回答之前,他问他们是否可以将代码表示为数据(如列表结构).因为在他看来,Ruby并没有落后于60年代的LISP.

许多新的编程语言正在Algol家族中出现,一些最有前途的语言,如Perl6Nemerle,正在接近LISP在60年代的功能.