2024 Clojure状态调查中分享您的看法!

欢迎!请参阅关于页面以获取有关如何使用此功能的一些更多信息。

0
ClojureScript

此补丁将 }布尔值转换为goog.define并也在运行时检查 }(而不是仅在编译时)。

闭包定义选项允许闭包编译器在:advanced编译时删除断言,而: none构建可以保留断言。这是阻止:advanced构建重用: none编译(缓存的)文件的少数几个问题之一。

:elide-asserts不影响尽可能简单,但可以在goog.define之上构建而不是实际影响编译输出。

3 答案

0

评论者:mfikes

补丁不再适用,可能是因为CLJS-970。

0

评论者:thheller

我在我的方法中发现了另一个问题。我的目标是使Closure Compiler能够在:advanced编译时删除断言。使用{{goog.define}}对* }进行操作时效果很好,但如果你试图稍后调整define,编译器会抱怨,因为{{goog.define}}变量不允许在运行时进行调整。

(binding [*assert* false] (something-that-asserts))

这在CLJ中有效,但在CLJS中无效,因为* }只在编译时进行检查。如果你使用{{:elide-asserts true}}编译,也无法将断言绑定到true,因为代码已不再存在。

无论如何,都必须做出一些妥协。据我所知,最好的解决方案是使用一个goog.define,让编译器决定是否消除断言,与* }无关,然后将断言检查本身移动到js而不是编译器中。

如有兴趣,我很乐意编写补丁。

0
参考:[链接](https://clojure.atlassian.net/browse/CLJS-1494)(由thheller报告)
...