2010-09-28 72 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