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

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

+1投票
Clojure

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

我和Rich曾就这个类编译缓存讨论过一些有趣的想法,这个缓存将与核心集成并作为Clojure 1.10的研究目标,但没有任何保证。如果它不改变,重复编译相同的库源文件是固有的愚蠢行为。这样做可以结合发布仅源代码的好处和AOT的性能。

这个想法是否仍然备受关注?如果可行,这似乎可以提供不错的加速效果。

1 答案

+1投票

我在这方面的尝试包括在编译器和命令行界面中,简而言之,这是一个复杂的问题。虽然这个想法还在讨论中,但在上次我们检查它的时候,我们得出的结论是,已经存在一些工具可以按应用程序创建此类缓存(这避免了大部分复杂性),并编写了这篇文章,说明如何操作

https://clojure.org/guides/dev_startup_time

现在这个可能是基于tools.build的工具,但基本原理相同。

by
我的经验是,按照指南中描述的手动AOT编译,即使是经验丰富的开发者也会遇到棘手的问题。一旦你意识到这是一个AOT问题,解决方案就很简单:重新编译。我曾希望有一种方法可以自动化解决这些复杂情况,但我明白这很难。
by
指南中描述的编译与运行时发生的编译相同,我认为人们对使用它的许多担忧是没有根据的。人们在AOT中遇到的问题可以分为几个类别——一是有编译和未编译代码的层,协议正在重新编译。按照指南的方法,这种情况不会发生,因为一切都是在加载顺序中编译的,就像在运行时一样。另一个是更改具有运行时影响编译物的问题——有些我们希望在1.12中改进的东西。许多人使用了指南中的方法,发现它显著提高了启动时间,并且不像你想象的那样容易出问题(特别是因为它遵循了你的应用程序的加载顺序)。试一试,并在此处报告问题!
...