Как можно скомпилировать lisp (схему) в двоичный файл? - PullRequest
0 голосов
/ 30 декабря 2010

Я использую программное обеспечение со встроенным интерпретатором схем. Пользователи могут общаться / манипулировать программным обеспечением, вводя команду в интерпретаторе. И пользователи также могут загрузить некоторые двоичные файлы в окружающую среду. Я написал код такой схемы:

(define test (lambda() (display "This is a test!"))) ---- d:/test.scm

А затем скомпилируйте его в двоичный файл, который будет загружен и выполнен намного быстрее. Но в документе нет информации о компиляции кода схемы. После компиляции пользователь может загрузить двоичный файл, набрав:

(fast-load "d:/test.bin" (the-environment))

Я думаю, что "быстрая загрузка" просто читает и оценивает вещи. Так что же, компиляция - это просто процесс шифрования? Кто-нибудь знает об этих вещах? Любая информация будет оценена! Заранее спасибо.

И еще один пример: система AutoCAD. Пользователи могут написать код lisp для управления AutoCAD. И пользователь может скомпилировать код lisp в файл * .fas, который будет загружен в AutoCAD. Так что, если это действительно только процесс шифрования, как я могу написать компилятор? Есть ли документы по этому поводу?

                                                                       Joe

1 Ответ

1 голос
/ 30 декабря 2010

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

Если вы спросите об отдельных приложениях или библиотеках Scheme, многие реализации (например, Chicken ) предоставляют компиляторы Scheme того или иного рода (ранее упомянутая Chicken Scheme сначала компилируется в C) .

Если вы спрашивали о Common Lisp (игнорируя тот факт, что вы упомянули Scheme конкретно в заголовке и вопросе). Вы можете использовать стандартную функцию compile-file , которая создает формат .fasl, на который вы ссылались в конце вашего вопроса.

...