2008-12-18 15 views
5

¿Puedo invocar una función de lisp desde una biblioteca escrita en c o C++? ¿Cómo puedo extender el ceceo? Esto es útil cuando quieres hacer algunas llamadas al sistema o cosas así.¿Puedo extender lisp con C++?

+5

¿Puedo ampliar mi Porsche con un motor de karts? :-) –

Respuesta

8

Es inusual llamar al código no-lisp de lisp, y rara vez es necesario. CLX (la implementación del cliente X11 para CL) no se vincula con la implementación de Xlib, pero "habla" X11 directamente. En cualquier sistema, es probable que su implementación de CL ya tenga excelentes enlaces del sistema operativo, lo que hace que esto no sea necesario.

Dicho esto, la respuesta depende del entorno Lisp:

En ECL en realidad se puede alojar un entorno CL en C y simplemente llamar cl_eval() con el código a ejecutar. Esto puede permitirle escribir su aplicación (o servidor de aplicaciones) en C (o C++) y "llamar a" el código de lisp.

En CCL, hay una interfaz de llamada compatibles C-que le permiten hacer algo como esto:

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

En la mayoría de otras implementaciones CL (como SBCL; y sí funciona esto en ECL y CCL también) puede usar UFFI (o CFFI) que simplemente le permite llamar a las funciones C, que es lo que otras personas están hablando. Si esto es todo lo que quiere hacer, entonces CFFI es un buen lugar seguro para comenzar.

+0

uffi es obsoleto por mucho tiempo ... –

+0

Muchos programas aún se enfocan en uffi en lugar de cffi; uffi todavía tiene una mayor disponibilidad. – geocar

+1

En estos días, CFFI admite más Lisps que UFFI, a saber, ABCL y CLISP. No estoy seguro si eso es lo que quieres decir. –