我如何 link 将多个 lisp-fasl 文件合并到一个文件中?

How do I link multiple lisp-fasl files into a single file?

我开始学习 lisp 并正在寻找一种有效的方式来管理我的个人图书馆。

所以我认为将我的库编译成单个 fasl 文件(包含包信息和实际实现)会很有用,之后我可以加载 (load "lib.fasl") 以包含该库。问题是,该库由多个 *.lisp 文件组成,可以说 foo.lispbar.lisp

我分别使用 (compile-file "foo.lisp")(compile-file "bar.lisp") 分别编译它们。

显然,必须 LOAD 库的每个文件(即 foo.faslbar.fasl) 手动当我想使用它们时,所以我正在寻找类似

的东西
(link "foo.fasl" "bar.fasl" :output "lib.fasl")

(compile-file "foo.lisp" "bar.lisp" :output "lib.fasl")  

生成单个 lib.fasl,然后我可以 LOAD

我不想使用核心文件,因为我希望能够灵活地组合我的库(这需要为每个可能的库组合创建一个单独的核心文件)。

我在 SBCL 用户手册中搜索了执行此操作的 lisp 函数,并在 SBCL 联机帮助页中搜索了使用 CLI 的功能,但我什么也没找到。

我更喜欢使用 SBCL 的解决方案,但我也会选择其他任何解决方案。

提前致谢!

对于 SBCL 的 IIRC,您只需将 FASL 文件连接成一个文件。

ASDF 3 有一种方法可以从系统或具有所有依赖项的系统构建单个 FASL 文件(参见 compile-bundle-opmonolithic-compile-bundle-op)。

在它的可移植库uiop中还有一个函数combine-fasls,它支持多种CL实现。

使用cat:

$ cat f1.fasl f2.fasl .... > mypackage.fasl

请注意,更常见的方法是创建 images

您可能还想探索 asdf