是否有任何主要的编程语言不支持任何形式的反射?

时间:2012-01-20 21:30:05

标签: c reflection programming-languages

维基百科将反思定义如下:

  

在计算机科学中,反思是计算机的过程   程序可以观察(做类型内省)并修改自己的内省   运行时的结构和行为。[1]

是否有任何主要的编程语言(在学术界或工业界广泛使用)不支持任何形式的反思?我目前想到的所有例子都至少得到了有限的支持。但对于C,我不确定。

2 个答案:

答案 0 :(得分:7)

C,C ++没有任何形式的反思。可以做的是使用编译器在可执行文件中嵌入调试符号,然后从可执行文件中处理符号表。但是,此过程必须由代码实现(即,在c中编写代码以分解和处理可执行文件中的符号表)。因此,它不是语言中固有的。

答案 1 :(得分:2)

COBOL是一种主要语言。也不是任何HDL(VHDL,Verilog,......)。

我认为一个更有趣的问题是,哪些语言通过“反射”完成对其结构的访问? (例如,“这个表达中的内容是什么?”“那个表达的类型是什么?”“建立一个新的类。”等等)AFAIK,只有LISP符合这个要求。其他语言充其量只能提供一些反思,但不能完全操纵这些语言。

这就留下了为什么人们只会为语言添加部分反射的问题。我们使我们的语言具有图灵功能,因此如果我们想要编写代码,我们非常确定我们可以用我们的语言编写代码。为什么我们的语言不能相应地“全面反思”?

其中一种方法是使用program transformation systems (PTS),它们是用于操作代码的工具。真正通用的PTS(例如Stratego,DMS或TXL)可以以任意方式操纵任意程序,提供相当于“全反射”的程度。这允许人们对任意语言进行元编程;您不必依赖语言委员会或编译器供应商来添加反射功能。

相关问题