Common lisp 为什么不能并行执行编译文件?

Common lisp 为什么不能并行执行编译文件?,common-lisp,sbcl,Common Lisp,Sbcl,我有一个项目,其中有很多文件不是由ASDF管理的,而是手工编译的。这些文件是完全独立的,能够并行编译它们似乎是减少编译时间的一种方法。我的计划是并行编译这些文件,然后按顺序加载生成的FASL文件。但在我并行编译之后,我发现性能几乎没有提高。然后我访问了SBCL源代码,发现它基本上是将编译顺序化的 我的问题是,编译文件使用此锁的原因是什么?虽然并行加载FASL确实可能导致一些竞争条件,但在我看来,Lisp文件的编译应该是独立的和可并行的。编译器可以从该语言访问。您可以进行编译时编程,拥有编译器宏等

我有一个项目,其中有很多文件不是由ASDF管理的,而是手工编译的。这些文件是完全独立的,能够并行编译它们似乎是减少编译时间的一种方法。我的计划是并行编译这些文件,然后按顺序加载生成的FASL文件。但在我并行编译之后,我发现性能几乎没有提高。然后我访问了SBCL源代码,发现它基本上是将编译顺序化的


我的问题是,编译文件使用此锁的原因是什么?虽然并行加载FASL确实可能导致一些竞争条件,但在我看来,Lisp文件的编译应该是独立的和可并行的。

编译器可以从该语言访问。您可以进行编译时编程,拥有编译器宏等。如图所示,有eval when:compile…。一般来说,不能排除编译时的影响,这必须在任何地方都是线程安全的。我想,要使这项计划变得稳健,所付出的努力要比人们愿意投资的努力大得多

不过,您可能可以启动多个Lisp图像进行并行编译。您只需要在编排时处理依赖关系图

更新:我刚刚偶然发现一段对话,似乎暗示SBCL比我想象的更接近于摆脱那个锁: