Могу ли я расширить LISP с C ++? - PullRequest
5 голосов
/ 18 декабря 2008

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

Ответы [ 3 ]

8 голосов
/ 19 декабря 2008

Необычно вызывать неисписанный код из 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 - это хорошее и безопасное место для старта.

5 голосов
/ 18 декабря 2008
4 голосов
/ 19 декабря 2008
...