Могу ли я расширить LISP с помощью C++?

Могу ли я вызвать функцию из lisp из библиотеки, написанной на c или C++? Как я могу продлить шепот? Это полезно, когда вы хотите сделать некоторые системные вызовы или что-то в этом роде.

3 ответа

Решение

Необычно вызывать неисписанный код из lisp, и это редко требуется. CLX (реализация клиента X11 для CL) не связана с реализацией Xlib, но напрямую "говорит" на X11. В любой системе ваша реализация CL, вероятно, уже имеет отличные хуки операционной системы, что делает это ненужным.

Тем не менее, ответ зависит от реализации lisp:

В ECL вы можете разместить среду CL под C и просто вызвать cl_eval() с кодом для выполнения. Это может позволить вам написать ваше приложение (или хост приложения) на C (или C++) и "вызвать" код lisp.

В CCL есть C-совместимый интерфейс вызова, который позволяет вам сделать что-то вроде этого:

(with-cstrs ((x "Hello World"))
  (#_puts x))

В большинстве других реализаций CL (например, SBCL; да, это также работает в ECL и CCL), вы можете использовать UFFI (или CFFI), который просто позволяет вам вызывать функции C, о чем говорят другие люди. Если это все, что вы хотите сделать, то CFFI - это хорошее, безопасное место для начала.

Смотрите UFFI и CFFI и пижон Clozure FFI

CFFI!

Другие вопросы по тегам