评论者:hiredman
恢复 clj-701
在 JVM 字节码中表达循环表达式语义很棘手,因此编译器多少有点逃避问题,将表达式循环提升到立即调用的匿名函数中,封闭循环所需要作用域内的任何内容,这有一些问题,就像 CLJ-701 中看到的那样,丢失简历程序员不跟踪跨函数的类型数据,函数对象额外的分配(jit 可能处理得很好,我不确定)等。
clj-701 和这个条目世界相交的地方是这个条目上的补丁将函数体提升为循环表达式,如果没有 clj-701 的补丁,将会有上述问题,但我们已经在任何难以作为表达式在字节码中表达的东西(尝试循环)作为表达式使用时遇到过这些问题,也许这无关紧要,也许 clj-701 将以某种方式修复来解决这些问题。
一般思考
人们似乎喜欢从断言中获取的一个特性是能够在生产环境中禁用它们(我从未见过有人用Clojure来做这个),断言和:pre:/:后部分具有一定的实现这样的功能(这可能在宏展开时才能生效,我不记得了),由于循环的提升可能会影响性能,所以有一个机制禁用它可能会很不错(也许可以使用断言相同的标志?)。