我学过scheme,很快掌握了很多,然后在里面做了一个项目就好了。从字面上看,我花了几天时间才完成。我现在正在尝试学习普通的 lisp 来感受一下,现在我真的很努力学习 asdf。如何将它与图书馆一起使用似乎是常识,但我很困惑。我想这是因为大多数 lisp 程序都是在 repl 中制作和运行的,因为一切正常。当我尝试将其编译为可执行文件时,我正在失去我的位置。
有没有人可以给我任何建议或指向我的教程?我真的希望能够制作一个可执行文件以提供给人们,而无需解释如何安装 sbcl 和(需要)它然后运行它。我只是想学习在 lisp 中做一些我无法用scheme做的实质性的事情。
我想我可以使用 scheme 并使用 ffi 来让 c 库工作,但我对 c 没有经验。由于个人原因,我只是一名学习 lisp 的网络开发人员。当然学习一些c和ffi可能不会花这么长时间哈哈。
谢谢
最佳答案
您不需要 ASDF 来生成“独立”可执行文件。大多数实现提供了保存可执行镜像的方法,但是标准中没有提到如何做到这一点(以及是否要提供)。
通常,您会将代码加载到正在运行的镜像中,然后“转储”该镜像。
例如,在 SBCL 中,您将使用 sb-ext:save-lisp-and-die ; CCL 有 ccl:save-application 。您将必须查看您的实现文档以了解如何执行此操作。
我现在这里没有 SBCL,但是这个最小的例子应该可以工作(未经测试):
(defun do-it () (format t "hello world~%"))
(sb-ext:save-lisp-and-die "hello" :toplevel #'do-it :executable t)
这是一个使用 CCL 的工作示例:
Welcome to Clozure Common Lisp Version 1.6-dev-r14287M-trunk (LinuxX8632)!
? (defun do-it () (format t "hello world~%"))
DO-IT
? (ccl:save-application "hello" :toplevel-function #'do-it :prepend-kernel t)
[danlei@susi ~/build/ccl]% ./hello
hello world
这些可执行镜像可能相当大,除非您的实现提供了类似摇树器的东西,但我认为现在这不应该是一个问题。
您可以在 another SO question about this topic 中找到 clisp 的详细示例。
ASDF Documentation
关于lisp - 与常见的 lisp 库斗争,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3817063/