维基百科对反射的定义如下:
在计算机科学中,反射是计算机程序可以观察(进行类型内省)并修改自己结构和运行时的行为。[1]
有没有任何主要的编程语言(在学术界或工业界广泛使用)不支持任何形式的反射?我目前想到的所有例子都至少得到了有限的支持。但对于C,我不确定。
C,C++没有任何形式的反射。可以做的是使用编译器将调试符号嵌入到可执行文件中,然后在可执行文件内处理符号表。然而,这个过程必须由代码来实现(即用c编写代码来分解和处理可执行文件中的符号表)。因此,它不是语言固有的。
COBOL是一种主要的非语言。也没有任何HDL(VHDL、Verilog…)。
我认为一个更有趣的问题是,哪些语言的通过"反射"完全访问其结构?(例如,"这个表达式中有什么?"那个表达式的类型是什么?"。其他语言最多提供一些反射,但不能完全操纵这些语言。
这就留下了一个问题,为什么人们只会在一种语言中添加部分反射。我们使我们的语言能够使用图灵,所以如果我们想编码一些东西,我们非常确信我们可以用我们的语言编码。为什么我们的语言没有相应的"全反射"能力?
解决这一问题的一种方法是使用程序转换系统(PTS),这是一种旨在操作代码的工具。一个真正通用的PTS(如Stratego、DMS或TXL)可以以任意的方式操纵任意程序,提供相当于"全反射"的功能。这允许在任意语言上进行元编程;您不必依赖您的语言委员会或编译器供应商来添加一些反射功能。