2010-09-28 2 views
3

Я узнал схему и быстро освоил ее, а затем сделал проект в нем просто отлично. Буквально потребовалось несколько дней, чтобы закончить. Теперь я пытаюсь выучить общий lisp, чтобы почувствовать это, и теперь я просто действительно борется с попыткой узнать asdf. Похоже, это общеизвестно, как использовать его в библиотеках, но я сбив с толку. Я думаю, это потому, что большинство программ lisp создаются и выполняются внутри реплики, потому что все работает нормально. Это когда я пытаюсь скомпилировать его в исполняемый файл, где я теряю свое место.

Есть ли кто-нибудь, кто может дать мне какие-либо советы по этому вопросу или указать мне учебник? Я действительно хочу, чтобы сделать исполняемый файл, чтобы дать людям, не объясняя, как установить sbcl и (требуется), затем запустить его. Я просто хочу научиться делать что-то существенное в lisp, которое мне не удалось сделать с помощью схемы.

Я предполагаю, что могу использовать схему и использовать ffi, чтобы получить библиотеки c, но у меня нет опыта работы с c. Я просто веб-разработчик, изучающий lisp по моим личным причинам. Конечно, изучение некоторых c и ffi может не занять столько времени, сколько это ха-ха.
ThanksБорьба с общими библиотеками lisp

+0

Я хотел бы, чтобы помочь вам и писать ответы на вопросы о comp.lang.lisp. Неужели я не отвечаю достаточно быстро? – Xach

+0

Нет, lol. Мне казалось, что я держал тебя как линию жизни, я боялся, что ты сможешь заняться, и я занял бы слишком много твоего времени. Итак, я разместил здесь, чтобы узнать, может ли кто-нибудь еще участвовать в этом, возможно, не на comp.lang.lisp. – Isaiah

ответ

7

Я действительно хочу, чтобы иметь возможность сделать исполняемый файл, чтобы дать людям без того, чтобы объяснить, как установить SBCL и (требуется) она затем запустить его.

Для создания автономного исполняемого файла вам не нужен 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) 
[[email protected] ~/build/ccl]% ./hello 
hello world 

Эти исполняемые образы может быть довольно большого размера, если только ваша реализация не обеспечивает что-то вроде дерева-шейкера, но я не думаю, что это должно быть проблемой в наши дни.

Подробный пример для clisp можно найти в another SO question about this topic.

ASDF Documentation

+0

Это ответ на ваш вопрос? Я не совсем уверен, правильно ли понял, потому что вы сказали, что все работает от REPL. Если вы можете загрузить свои библиотеки в REPL, то, что я описал выше, это способ получить автономный исполняемый файл, который затем вы можете распространять среди своих пользователей. Если вы хотите, чтобы у них был нормальный REPL, но с вашими уже существующими библиотеками, просто опустите аргументы ключевого слова: toplevel (-function). – danlei

0

Это не совсем то, что вы просили, но это может помочь.

Я никогда не мог получить ASDF, чтобы работать очень хорошо. Вместо этого кто-то указал мне на clbuild, что немного отличается от аналогичной проблемы. До сих пор это работало очень хорошо.

+2

clbuild использует ASDF для загрузки всего. Вы имели в виду asdf-install? – Xach

+0

А, возможно, я и сделал. – Ken

Смежные вопросы