Борьба с общими библиотеками lisp - PullRequest
3 голосов
/ 29 сентября 2010

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

Ответы [ 2 ]

7 голосов
/ 29 сентября 2010

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

Вам не нужноASDF для создания «автономного» исполняемого файла.Большинство реализаций предоставляют средства для сохранения исполняемого образа, но как это сделать (и нужно ли вообще его предоставлять) не упоминается в стандарте.

Как правило, вы загружаете свой код в работающийimage и затем «сбросьте» это изображение.

Например, в 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

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

Подробный пример clisp можно найти в другом SO вопросе по этой теме .

Документация ASDF

0 голосов
/ 29 сентября 2010

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

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

...