可能 Lisp 会这样是有原因的?Lisp 被设计用于编程其他语言并使用代码和数据的符号表示进行计算。代码和数据之间的界限不再存在。这会影响编程语言的设计和实现。
Lisp 具有生成新代码、翻译该代码并执行它的语法特性。因此,预解析代码也使用与其他程序相同的数据结构(符号、列表、数字、字符……)。
Lisp 在运行时知道它的数据——你可以查询它的类型或类的所有东西。类本身就是对象,函数也是。所以编程语言和程序的这些元素也是一流的对象,它们可以这样操作。动态语言与“动态类型”无关。
“动态语言”是指编程语言的元素(例如通过元类和元对象协议)和程序(它的类、函数、方法、槽、继承......)可以在运行时查看,并且可以在运行时修改。
可能你为一种语言添加的这些特性越多,它就越像 Lisp。因为 Lisp 几乎是一种简单、动态、可编程的编程语言的局部最大值。如果您想要其中的一些功能,那么您可能想考虑您必须放弃或愿意放弃的其他程序语言的哪些功能。例如,对于简单的代码即数据语言,整个 C 语法模型可能不实用。
因此,类 C 和“动态语言”可能并不适合——语法是整个画面的一部分。但即使是 C 语法模型也限制了我们使用动态语言的难易程度。