2010-09-28 73 views
3

我学会了方案,很快就掌握了很多,然后在其中完成了一个项目。从字面上看,我花了好几天才完成。我现在正在尝试学习通用的lisp来获得这种感觉,现在我真的非常努力学习asdf。这似乎是常用的知识如何使用它与图书馆,但我很困惑。我想这是因为大多数lisp程序都是在repl内部生成和运行的,因为这一切都很好。当我尝试将它编译为一个可执行文件时,我放弃了我的位置。

有没有人可以给我任何建议或指向我的教程呢?我真的希望能够制作一个可执行文件给人,而不必解释如何安装sbcl和(需要)然后运行它。我只是想学会在lisp方面做一些实质性的工作,我无法做到这一点。

我想我可以使用方案并使用ffi来获得c库的工作,但我没有c的经验。我只是一个Web开发人员,因为我自己的个人原因在学习Lisp。当然,学习一些c和ffi可能不会像这个哈哈一样长。
谢谢与普通的lisp库努力奋斗

+0

我想帮助你,并写答复你的问题上comp.lang.lisp。我的反应不够快吗? – Xach 2010-09-28 22:48:03

+0

不,大声笑。这感觉就像我像一条生命线一样抱着你,我担心你可能会变得忙碌,我会占用你太多的时间。 所以我在这里发布,看看是否有其他人可以在这可能不会在comp。lang.lisp。 – Isaiah 2010-09-29 00:53:59

回答

7

我真的希望能够作出 执行,以给人们无需解释如何安装SBCL 和(需要),它然后运行它 。

您不需要ASDF来生成“独立”可执行文件。大多数实现都提供了保存可执行映像的手段,但是如何做到这一点(以及是否提供所有内容)并未在标准中提及。

一般而言,您会将代码加载到运行映像中,然后“转储”该映像。

在SBCL中,例如,您可以使用sb-ext:save-lisp-and-die;覆铜板有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) 
[[email protected] ~/build/ccl]% ./hello 
hello world 

这些可执行映像可能会有相当大的规模,除非你的实现提供了像树形摇杆一样的东西,但我认为这不应该成为现在的问题。

您可以在another SO question about this topic找到clisp的详细示例。

ASDF Documentation

+0

这是否回答你的问题?我不太确定,如果我理解正确,因为你说,所有东西都可以从REPL中运行。如果您可以在REPL中加载您的库,我上面描述的是获取独立可执行文件的方式,然后您可以将其分发给用户。如果您希望它们具有普通的REPL,但是您的图库已经​​存在于图像中,则只需省略:toplevel(-function)关键字参数。 – danlei 2010-09-29 01:44:54

0

这不完全是你要求的,但它可能会有所帮助。

我从来没有能够让ASDF工作得很好。有人指出我在clbuild而不是,这是一个稍微不同的方法来解决类似的问题。到目前为止,它对我来说工作得很好。

+2

clbuild使用ASDF加载所有内容。你的意思是asdf-install? – Xach 2010-09-29 01:26:16

+0

啊,也许我做到了。 – Ken 2010-09-29 02:12:50