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?
Antwort
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.
uffi ist längst veraltet ... –
Viele Programme zielen immer noch auf uffi anstatt auf cffi; Uffi ist immer noch verfügbarer. – geocar
Heutzutage unterstützt CFFI mehr Lisps als UFFI, nämlich ABCL und CLISP. Nicht sicher, ob du das meintest. –
CFFI!
- 1. Mit Lisp in C#
- 2. Erweitern C# -Syntax mit Roslyn
- 3. Wie kann ich „run“ Lisp-Dateien
- 4. Kann ich das in Lisp tun?
- 5. Kann ich Lisp ohne Emacs problemlos verwenden?
- 6. Common Lisp entspricht C enums
- 7. Wie erstelle ich eine Webanwendung mit LISP?
- 8. Wie kann ich Backquote in gemeinsamen Lisp reimplement?
- 9. C# erweitern MVC maxlengthattribute
- 10. Erweitern Zeichenfolge mit Erweiterungsmethoden (C# 3.0)?
- 11. C# dateibasierten Ressourcenmanager erweitern
- 12. Wie kann ich die Klasse java.awt.Color erweitern?
- 13. Welche Java-Klasse kann ich erweitern?
- 14. Wie kann ich den Vue-Validator erweitern?
- 15. Kann ich einen Anwendungsfall mehrfach erweitern?
- 16. Wie erweitern Sie Python mit C++?
- 17. C# Sprache erweitern?
- 18. Enums in C++ erweitern?
- 19. Wie kann ich eine SQLite-Datenbank "erweitern"?
- 20. Kann ich ein Objekt in angularjs erweitern?
- 21. Kann ich Meteor-Methoden überschreiben/erweitern?
- 22. Wie kann ich OData vom Server erweitern?
- 23. Kann ich das verzögerte Objekt jQuery.ajax erweitern?
- 24. Wie kann ich Datentyp in Java erweitern
- 25. Wie kann ich Node-Stream zu erweitern
- 26. Ich kann meinen Controller nicht erweitern
- 27. Wie kann ich einen Service erweitern
- 28. Kann ich eine Funktion in TypeScript erweitern?
- 29. Kann ich Utensilien gleichzeitig verwenden und erweitern?
- 30. Erweitern von C# -Code mit separater Assembly
Kann ich meinen Porsche mit einem Go-Kart-Motor verlängern? :-) –