是否有任何解释性语言可以动态修改解释器?

Luc*_*cas 4 language-agnostic interpreter dynamic

我一直在思考马克吐温的写作(显然),他开始用英语写作,但整篇文章都改变了拼写规则,最后他最终得到了一些可能被描述为伪德语的东西. .

这让我想知道是否有一些已有语言的解释器,其中一个人可以访问解释器本身,这样你就可以随时改变语言的语法和结构.例如,通常一个if子句是关键字; 有没有一种语言可以让你在飞行中改变或重新定义?想象一下,用一种语言开始一个控制台会话,到最后,在另一种语言中工作.

显然,人们可以编写一个解释器并运行它,也许在执行此操作和修改解释器之间没有具体的区别.我不确定这个.也许你可以动态地对任何给定的解释器进行修改是有限制的吗?

除了这些更开放的问题之外,我只想知道是否有任何已知的口译员允许这样做?或者,或许,这种能力只是一个程度问题,我的问题也很糟糕.

dod*_*ler 6

当然有一些语言可以在语言语法本身的层面上进行这种自我修改行为. Lisp程序可以包含宏,这允许动态创建新的控件构造,在某种程度上,依赖于广泛的宏编程的两个Lisp程序看起来几乎就像用两种不同的语言编写.Forth有点类似,因为Forth解释器提供了十几个原始操作的核心集必须用问题域的语言构建程序(通常是必须精确和程序化地进行的某种现实世界的交互,例如工业机器人).一个Forth程序员创建一个解释器,该解释器理解他或她试图解决的问题所特定的语言,然后用该语言编写更高级别的程序.

一般来说,这里的常见想法是将代码和数据视为等效的语言或系统,并为用户提供与另一个相同的修改权限.例如,每个Lisp程序都是Lisp数据结构.这与诸如Java之类的语言形成对比,在Java语言中,程序代码与其操作的数据之间存在明显的区别.

一个相关的主题是自修改低级代码,这是在具有复杂指令集小型计算机时代的汇编语言程序员中相当普遍的技术,并且在早期的8位和16位中溢出微电脑世界.在这种编程习惯用语中,为了节省速度或节省内存,程序将被编写,其"编译"或解释指令将存储在存储器中的位置的"感知",并且可以在适当的位置改变实际的机器级指令字节按字节来影响其动态行为.