2024年Clojure调查!中分享你的看法。

欢迎!请访问关于页面以获取此平台的工作方式更多信息。

+3 票数
ClojureScript

大家好,
我有一个使用cljs编写的,经过高级优化的Firefox插件,提交后,审核结果显示我提交的zip文件与他们从源代码构建的内容不同。

我使用diff-so-fancy来比较生成的js文件,发现主要差异是变量名。

那么,有没有什么方法可以确保生成的js文件可重现呢?

PS:我的项目源代码在这里
https://github.com/jiacai2050/gooreplacer/blob/firefox/cljs-src/project.clj#L76

1 个答案

+1 票数

几年前,我有过类似的问题(在我的情况下是为了更好的缓存),当时的答案是“不”。但是你可以尝试以simple优化来构建。它也会进行一些重命名,但我这是稳定的。如果那样不成,那么whitespace应该会。

无论是`:simple`还是`:whitespace`,都不能保证确定性。大部分的随机性来自CLJS的`gensym`使用一个不断增长的全球整数。
但是 `gensym` 并不是随机的。那么是否有随机排序?它是从哪里来的?
在多线程构建中,编译顺序/时间是非确定的(shadow-cljs中的默认情况),因为东西是并行编译的。如果涉及缓存,也可能受到影响,因为它改变了最初编译的内容。
这是否意味着使用串行构建(如果有的话),并清除缓存可以解决原创者的问题吗?
我只看了构建中所有随机性中最明显的部分,所以这是可能的,但可能没有。
...