2008-12-18 12 views
5

Kann ich eine Funktion von Lisp aus einer Bibliothek in C oder C++ aufrufen? Wie kann ich Lispeln verlängern? Dies ist nützlich, wenn Sie einige Systemaufrufe oder solche Sachen machen wollen.Kann ich Lisp mit C++ erweitern?

+5

Kann ich meinen Porsche mit einem Go-Kart-Motor verlängern? :-) –

Antwort

8

Es ist ungewöhnlich, nicht lisp-Code aus Lisp zu rufen, und selten erforderlich. CLX (die X11-Client-Implementierung für CL) verbindet sich nicht mit der Xlib-Implementierung, sondern "spricht" X11 direkt. Auf jedem System hat Ihre CL-Implementierung wahrscheinlich bereits ausgezeichnete Betriebssystem-Hooks, die das überflüssig machen.

Das heißt, hängt die Antwort auf die Lisp-Implementierung:

In ECL man kann tatsächlich eine CL-Umgebung unter C Host und einfach cl_eval() mit dem Code aufrufen auszuführen. Dadurch können Sie Ihre Anwendung (oder Ihren Anwendungshost) in C (oder C++) und "call to" -Lispcode schreiben.

In CCL gibt es eine C-kompatible calling Schnittstelle, die Sie so etwas tun können:

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

In den meisten anderen CL-Implementierungen (wie SBCL, und ja, das funktioniert in ECL und CCL auch) Sie können UFFI (oder CFFI) verwenden, mit dem Sie einfach C-Funktionen aufrufen können, worüber andere reden. Wenn dies alles ist, was Sie tun möchten, dann ist CFFI ein guter und sicherer Startpunkt.

+0

uffi ist längst veraltet ... –

+0

Viele Programme zielen immer noch auf uffi anstatt auf cffi; Uffi ist immer noch verfügbarer. – geocar

+1

Heutzutage unterstützt CFFI mehr Lisps als UFFI, nämlich ABCL und CLISP. Nicht sicher, ob du das meintest. –