哪种编程语言有最好的自省和反思的能力? [关闭](Which programming langu

2019-09-29 18:50发布

许多语言有自省和反思的能力。 然而,一些明显比别人更好。 任何建议,哪些语言在这方面,为什么“更好”。

Answer 1:

反射基本上是提取源程序的性质的能力。 为了能够检测任意属性 (例如,任何和所有)有关的源代码,您需要有可用的源代码进行检查,或者至少一些源代码等同。

语言,其允许运行时反射具有预定的其中许多属性都可以被检查; 数量和产生的细节已经由语言设计者决定。 因为它的成本运行时空间和时间,以提供反射,几乎所有此类语言具有什么可以被反射/检查(语言特定的)的限制,因为它们都不是愿意保留的源代码其全文。 因此,他们反映了语言的设计者认为可能是有用的,哪些可以相对容易地计算和紧凑地收纳。 这些限制是编译语言,其目标是要在执行和资源(而不是翻译)高效尤为强劲。

因此,你通常不能反映并得到有关特定变量可以容纳值范围大约评论信息或信息。

其中,提供了相当多的反射能力的语言是LISP。 这是因为LISP程序的源文本是由设计同构Lisp的名单,这是如何存储LISP程序代码,至少当解释。 LISP提供所有这些列表的直接访问,从而LISP程序可以直接检查自己的代码。 [许多的Lisp允许汇编; 这些有什么可以检查]限制条款每隔编译语言的同样的限制。

所以,语言的内省/反映能力将始终在实践中加以限制。

如果你想拥有完全访问源文本的任意属性,你需要一步的语言之外 ,这样就可以有效直接检查完整的源代码。

程序转换系统(PTS)是最接近这个工具。 一般的PTS解析源代码转换成抽象语法树这是源代码的直接反映,因此可以充当等价的立场。在更好的实际保留对空白的意见和信息。 然后可以编写自定义,随心所欲,算法与一些 PTS爬过的AST,并从中提取那些AST的任意信息。

一个使用PTS的非常漂亮的副作用是,在已经检查的代码中,PTS也可以将代码或产生额外的代码,以帮助解决问题驱动需要反思。 也就是说,分析问题和机会,增强了程序的结果。

也许梦的语言将是一个具有内置到它一个完整的PTS。 (我公司的DMS产品中,PTS,是一个小组协作具有这个属性的DSL,我们经常使用DMS检查/变换和永久提升自身。通常我们在DMS检查/变换其他语言)。



文章来源: Which programming language has the best introspection and reflection capabilities? [closed]