gpt4 book ai didi

reflection - 编译型动态语言

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:27 27 4
gpt4 key购买 nike

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

澄清我的意思:

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

我不想依赖虚拟机,这就是我编译的意思:)

最佳答案

Lisp 之所以如此,可能是有原因的? Lisp 旨在为其他语言编程并使用代码和数据的符号表示进行计算。代码和数据之间的界限不再存在。这会影响编程语言的设计和实现。

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

Lisp 在运行时知道它的数据——你可以查询任何东西的类型或类。类本身就是对象,函数也是。因此,编程语言和程序的这些元素也是一流的对象,它们可以像这样被操纵。 动态语言与“动态类型”无关。

“动态语言”是指编程语言的元素(例如通过元类和元对象协议(protocol))和程序(它的类、函数、方法、槽、继承……)可以在运行时查看,也可以在运行时修改。

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

因此类 C 语言和“动态语言”可能不太适合——语法是整个画面的一部分。但即使是 C 语法模型也限制了我们使用动态语言的容易程度。

关于reflection - 编译型动态语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1670127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com