<分区>
比如说,如果我有一个 Lisp 程序,它使用 (eval 'sym)
并在它的符号表中查找它,它实际上比 aClass.getField( "sym", anInstance)
在“静态”语言中?
标签 c# java reflection lisp eval
<分区>
比如说,如果我有一个 Lisp 程序,它使用 (eval 'sym)
并在它的符号表中查找它,它实际上比 aClass.getField( "sym", anInstance)
在“静态”语言中?
最佳答案
一般来说(模数实现问题,如字节码与 native 代码或代码生成质量),具有元语言抽象的语言提供了更多的能力来创建比使用缺乏此类抽象的语言在可比时间框架内创建的程序性能更好的程序。情况是,当您为自己的语言编写实现时,您有更多的信息来进行比基础语言的编译器更强大的优化。这在实践中有很多例子。
此外,您似乎将反射(作为“开放式实现”的特例)和元语言抽象混合在一起。元语言抽象是关于在基础语言之上构建新语言,而反射(或“开放式实现”)是关于将程序的内部结构暴露给程序本身。
在您的特定示例中(当然,模块实现问题,例如字节码与 native 代码或代码生成质量), (eval 'sym)
可能更快。原因是 'sum
是符号对象而不是字符串。评估符号意味着获取其值单元格。所以 eval 只需要做几件事:
但是 Java 示例还有更多事情要做:
特别昂贵的部分是计算哈希和遍历哈希表。
关于c# - 具有元语言抽象的语言是否比仅使用反射 API 的语言表现更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1560174/