Подтвердить что ты не робот

Компиляция двоичных файлов с помощью Clozure Common Lisp

Учитывая простую программу, такую ​​как следующее, как бы вы:

  • скомпилировать его как отдельный файл изображения, который будет загружен реализацией, и какие аргументы командной строки вы использовали бы для его загрузки?

  • Скомпилируйте его как автономный двоичный файл, который можно загрузить и запустить как есть.

    Примечание. Я попытался добавить ": preend-kernel t" при сохранении приложения только для того, чтобы получить следующую ошибку.

    Error: value NIL is not of the
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0).
    
  • Как бы вы подали приветственное сообщение?

    Программа

    (defun main ()
      (format t "This is the program.")0)
    

Edit

Ненавижу отвечать на часть моего собственного вопроса, но я нашел его тем не менее.

После того, как функция была загружена, введите следующую команду для ее компиляции:

(ccl:save-application "app")

Это создает файл изображения. Чтобы загрузить его, передав его типу реализации (обратите внимание: двоичный файл "ccl" находится в моем системном пути);

ccl -I app

Чтобы запустить функцию верхнего уровня, передайте ее как параметр

ccl -I app --eval (main)
4b9b3361

Ответ 1

См. документацию Clozure Common Lisp в разделе Сохранение приложений

Компилирование и загрузка Lisp файлов

Вы можете скомпилировать файл с именем /foo/bar.lisp, вызвав

 (compile-file "/foo/bar.lisp")

Это создаст файл fasl (FASt Load), который содержит собственный код.

Вы можете загрузить скомпилированный файл, файл fasl, с помощью функции LOAD. LOAD и COMPILE-FILE являются стандартными функциями Common Lip.

Создание приложений

Несколько определений:

  • Ядро CCL: часть CCL, которая обеспечивает низкоуровневые службы времени выполнения, такие как управление памятью.
  • Изображение: сохраненный дамп Lisp кучи
  • Приложение: ядро ​​CCL + изображение. Это может быть в одном файле.

Вы можете сохранить приложение, вызвав специальную функцию CCL:

(save-application "/foo/bar-image" :toplevel-function #'main)

Это сохранит изображение, которое вы можете запустить с помощью ядра CCL из командной оболочки:

ccl -I /foo/bar-image

Чтобы сохранить исполняемый файл, включающий ядро, используйте его из Lisp:

(save-application "/foo/bar-app" :toplevel-function #'main :prepend-kernel t)

Вы можете вызвать этот исполняемый файл, как обычно, с помощью /foo/bar-app из командной оболочки.

В Clozure Common Lisp вы можете проверить

*command-line-argument-list*

для списка предоставленных аргументов командной строки.