【发布时间】:2010-08-18 22:02:52
【问题描述】:
这可能是一个愚蠢的问题,但是:
假设一个表达式只依赖于字面量,或者其他也只依赖于字面量的表达式;编译器会在编译时评估这个吗?
假设我有,
(def a (some-time-consuming-function some-literal))
(def b (some-other-time-consuming-function a))
是否会在编译时对 b 和 a 进行完全评估,从而不影响用户?
编辑:非常感谢,所有的答案都非常有帮助。
EDIT 6.6.2011: 结果表明,如果您尝试使用这种技术来预先计算一个非常大的数据结构,那么很容易使类文件太大而无法加载。在这些情况下,您希望创建一个将被读入的文件,而不是一个将被加载的类文件。这些答案中描述的宏技巧只能在返回值不是一个过大的结构的情况下应用。
抛出的错误是:“java.lang.ClassFormatError: Invalid this class index” 有关相关情况的讨论,请参阅this thread。
【问题讨论】:
标签: compiler-construction clojure