как создавать приложения с помощью Clozure Common Lisp (в Microsoft Windows)

#configuration #build #common-lisp #ccl

#настройка #сборка #common-lisp #ccl

Вопрос:

Я новичок в Common Lisp (использую Clozure Common Lisp в Microsoft Windows), который раньше был знаком с c и python. Так что, возможно, вопросы здесь глупые, но наберитесь терпения и помогите мне.

1) Каков обычный способ запуска скрипта common lisp?

Теперь я написал bat-файл под Windows для вызова ccl exe (wx86cl.exe) и оценивать (progn (load "my_script_full_path") (ccl:quit)) каждый раз, когда я хочу «запустить» свой скрипт. Является ли это стандартным способом «запуска» скрипта для common lisp?
Есть другие предложения по этому поводу?

2) В чем разница между (require 'cxml) и (asdf:operate 'asdf:load-op :cxml) ?

Похоже, что они одинаковы для моего скрипта, какой из них мне следует использовать?

3) игнорируйте это, не совсем ясный вопрос

4) Когда я хочу загрузить какую-либо библиотеку (например, require ‘cxml), для загрузки cxml всегда требуется время (3 секунды или даже 5 секунд) каждый раз, когда я «запускаю» свой скрипт, также есть много журналов стандартного вывода, которые я показываю ниже, похоже, что это проверка чего-то внутреннего. Означает ли это, что я должен тратить 3-5 секунд на загрузку cxml каждый раз, когда я хочу запустить простой тест? Это кажется немного неэффективным, и на выходе получается шум. Есть предложения?

Мой скрипт (require 'cxml) (some-code-using-cxml)

И вывод
; Loading system definition from D:/_play_/lispbox-0.7/quicklisp/dists/quicklisp/software/cxml-20101107-git/cxml.asd into #<Package "ASDF0">
;;; Checking for wide character support... yes, using code points.
; Registering #<SYSTEM "cxml-xml">
......
some my script output

—ОТРЕДАКТИРУЙТЕ, чтобы добавить БОЛЬШЕ—-

5) Я должен сказать, что я почти забыл способ сброса изображения для ускорения скорости загрузки библиотеки lisp. Итак, каков для нас обычный процесс разработки (возможно, очень простого) скрипта lisp?

Основываясь на ответе, который я получил сейчас, я думаю, может быть,
а) отредактировать ваш скрипт
б) протестировать его через среду REPL, SLIME — действительно хороший выбор, и должно быть много циклов между a <==> b
c) сбросить изображение, чтобы распространить его?(Я не уверен в этом)

6) Кроме того, каков общий способ / форма выпуска / распространения окончательной программы для нас?

Для библиотеки lisp мы просто публикуем наш исходный код и позволяем кому-то другому «загружать / требовать» их.
Для программы на лиспе мы создаем дамп образа для его распространения, когда подтверждаем, что все функции работают нормально.
Я прав?

Какую форму мы используем в реальном продукте? Всегда ли мы помещаем все это в изображение в final, чтобы ускорить загрузку?

Ответ №1:

1) Да, обычный способ запуска всей программы — использовать скрипт запуска. Однако в наши дни Windows имеет гораздо, гораздо лучшую поддержку сценариев, чем просто интерпретатор bat. Windows Scripting Host и PowerShell поставляются в стандартной комплектации.

1a) Во время разработки обычно просто вводятся данные в REPL (цикл чтения-оценки-печати, то есть командная строка lisp) или используется что-то вроде SLIME (для emacs или xemacs) в качестве среды разработки. Если вы не знаете, что это такое, посмотрите их. Возможно, вы захотите использовать Cygwin для установки xemacs, который предоставит вам доступ к ряду инструментов для Linux.

2) Требование IIRC является частью стандарта. ПОСКОЛЬКУ технически это не так, это библиотека, которая работает для того, чтобы сделать работу библиотек более удобной. ASDF обладает множеством функций, которые вам в конечном итоге понадобятся, если вы действительно начнете писать большие программы на Lisp.

3) Вопрос неясен, передайте.

4) См. 1a) — выполняйте тесты и модификации в запущенном экземпляре, таким образом избегая необходимости загружать библиотеку более одного раза (точно так же, как вы бы делали в Python — вы нашли python repl, верно?). Кроме того, когда ваша программа будет завершена, вы, вероятно, сможете создать дамп образа, в который предварительно загружены все ваши библиотеки.

Редактировать: дополнительные ответы:

5) Да

6) После того, как вы сбросили образ, вам все равно нужно будет распространить двоичный файл lisp для загрузки образа в память. Чтобы сделать это прозрачным для пользователя, вам также потребуется скрипт загрузчика (или двоичный файл) для запуска двоичного файла lisp с изображением.

Комментарии:

1. Я думаю, что для нас может быть два процесса разработки простого скрипта lisp (не библиотеки, просто скрипта для выполнения простой функции). (А) напишите скрипт отдельно, без какого-либо REPL, и каждый раз запускайте / загружайте его через командную строку для тестирования, что я пытаюсь использовать сейчас, и каждый раз загрузка библиотеки занимает время, но этот способ подходит для разработки на python, потому что загрузка библиотеки в python происходит достаточно быстро (Б) Я использую среду REPL, такую как SLIME, что может быть более распространенным способом для lisp. Правильно? Кстати, я также добавляю еще один вопрос

2. Вы действительно пытались создать исполняемый файл с помощью Clozure CL? Clozure CL может создавать исполняемые файлы. Для загрузки образа не требуется скрипт. Смотрите документацию CCL:SAVE-APPLICATION`.

3. ASDF также включен в Clozure CL. (require 'asdf) загружает его.

Ответ №2:

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

Ответ №3:

Для распространения я использую инструмент Захари Бина «Buildapp«. Очень проста в установке и использовании.

Ответ №4:

Что касается распространения —

Я написал программу (она находится дома и в данный момент недоступна), которая запишет текущий образ в качестве стандартного исполняемого файла и завершит работу. Это работает как для CLISP, так и для SBCL.

Я могу покопаться в этом, если хотите.

Комментарии:

1. Я думаю, что это должна быть та же функция, что и ccl:save-application, я знал это, спасибо. Мне просто любопытно, какова форма распространения в реальной разработке на lisp.