编译动态语言

Mar*_*enz 7 lisp reflection programming-languages compiled self-modifying

我搜索编译器存在的编程语言,并支持自修改代码.我听说Lisp支持这些功能,但我想知道是否有更多具有这些功能的C/C++/D-Like语言.

澄清我的意思:

我希望能够以某种方式在运行时访问程序代码并对其应用任何类型的更改,即删除命令,添加命令,更改它们.好像我有我的程序的AstTree.当然,我不能用编译语言拥有那棵树,所以它必须做得与众不同.编译需要将自修改命令转换为它们的二进制等效修改,以便它们在运行时与编译的代码一起工作.

我不想依赖于VM,这就是我的意思与编译:)

Rai*_*wig 10

可能有一个原因Lisp是这样的吗?Lisp旨在编写其他语言并使用代码和数据的符号表示进行计算.代码和数据之间的界限不再存在.这会影响编程语言的设计和实现.

Lisp的语法功能是生成新代码,翻译代码并执行它.因此,预解析的代码也使用与其他程序相同的数据结构(符号,列表,数字,字符......).

Lisp在运行时知道它的数据 - 你可以查询它的类型或类的所有内容.类是对象本身,函数也是.因此编程语言和程序的这些元素也是一流的对象,它们可以这样操作.动态语言与"动态类型"无关.

"动态语言"意味着编程语言的元素(例如通过元类和元对象协议)和程序(它的类,函数,方法,槽,继承......)可以在运行时查看可以在运行时修改.

可能你添加到语言中的这些功能越多,它看起来就越像Lisp.因为Lisp几乎是一种简单,动态,可编程编程语言的局部最大值.如果您想要其中一些功能,那么您可能想要考虑您必须放弃或愿意放弃的其他程序语言的哪些功能.例如,对于简单的代码作为数据语言,整个C语法模型可能不实用.

因此,C语言和"动态语言"可能不太合适 - 语法是整个画面的一部分.但即使是C语法模型也限制了我们使用动态语言的难易程度.