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

欢迎!请参阅关于页面了解如何工作的更多信息。

+1 神投票
Clojure

在2018年,Alex Miller在ClojureVerse上提到,为Clojure实现一个类编译缓存来加速库加载可能是可行的。

我和Rich一直在讨论一些关于类编译缓存的有趣想法,这将与Clojure核心集成,该研究是Clojure 1.10的范围,但没有保证任何东西。可能它会结合仅发布源代码和AOT的性能。如果库的源文件没有变化,反复重新编译同一库的源文件显然是不合理的。

这个想法还在雷达上吗?如果可行,它应该会提供很好的速度提升。

1 个回答

+1 神投票

我在这方面的尝试有几个,无论是在编译器还是在命令行界面,总的来说,这个想法是复杂的。虽然这个想法仍在讨论中,但上次我们查看它时,我们得出结论,已经存在创建基于每个应用程序的缓存(避免了很多复杂性)的工具,并编写了这个指南来如何做到这一点

https://clojure.org/guides/dev_startup_time

在这个点上,这 probably needs a redo来考虑 tools.build,但想法是相同的。

by
根据指南中描述的手动AOT编译经验,人们遇到的难题甚至让很有经验的开发者都感到困惑。一旦你意识到这是一个AOT问题,解决方案很简单:只需重新编译即可。我原本希望有一种方法可以自动处理这些复杂情况,但我明白这是很困难的。
by
指南中描述的编译与运行时发生的编译是相同的,我认为人们对使用它的恐惧是没有根据的。人们有时看到的AOT问题可以分为几类——一类是当你有编译和未编译代码的层级,且协议被重新编译。采用指南中的方法就不会发生这种情况,因为一切都在加载顺序中编译,就像在运行时一样。另一类是在REPL中修改对运行时产生影响的编译内容——有一些事情我们希望在未来1.12中处理。许多人已经使用指南中的方法并发现启动时间显著提高,并且不像你想象的那么容易出现问题(特别是因为它遵循了你的应用程序的加载顺序)。试试看,并在此处报告问题!
...