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

欢迎!请访问关于页面以了解更多工作原理的详细信息。

+1
Clojure

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

我和Rich曾就一个将集成到核心中的类编译缓存讨价还价,该研究是Clojure 1.10的范围内的,但对任何事都没有做出保证。如果不起变化,反复编译同一库源文件实际上是愚蠢的,这可能会结合发布只包含源代码但具有静态预编译性能的益处。

这个想法是否还在进行中?如果可行,这似乎可以带来相当大的速度提升。

1 个答案

+1

我在编译器CLI中都尝试过这个想法,总的来说,这很棘手。尽管这个想法仍在讨论中,但我们上次考虑这个想法时,我们得出结论说,已经存在使得每个应用程序可以根据其需求创建这样的缓存的工具(这避免了大部分复杂性),并且为此编写了这篇关于如何进行的指南

https://clojure.org/guides/dev_startup_time

现在,考虑到tools.build,这也许需要重写,但基本思想是相同的。

by
我的经验是,按照指南中描述的手动AOT编译,即使经验丰富的开发者也会遇到一些问题。当你意识到这是AOT问题后,解决方案很简单:重新编译。我曾希望有一种方法可以自动化这些棘手的情况,但我明白这是很难做到的。
by
指南中描述的编译与运行时发生的编译相同,我认为人们对使用它的恐惧是没有根据的。人们有时看到的AOT问题可以分为几类——其一是当你有堆叠的编译和未编译的代码,协议需要重新编译时。采用指南中的方法,这种情况不会发生,因为一切在加载顺序中都是编译的,就像运行时那样。另一是在repl中更改对运行时有影响的编译项——我们有希望在1.12中对其进行工作的几件事情。许多人已经使用了指南中的方法,发现它显著提高了启动时间,并且不像你想象的那么容易出问题(特别是因为它遵循了你的应用加载顺序)。试试看,如果在这里报告问题!
...