2014-01-20 13 views
11

Also ... in dem Versuch, bereits existierende Räder zu verwenden, anstatt meine eigenen an jeder Ecke neu zu erfinden, habe ich versucht, eine ordentliche Common-Lisp-Umgebung zu bekommen, die mit [einer bestimmten Java-Bibliothek] arbeitet. Meine ABCL-Abenteuer sind wirklich einigermaßen gut gelaufen und ich habe es schließlich geschafft, dass sich ABCL gut mit [it] unterhalten hat. Natürlich wollte ich mehr als nur das, ich wollte Interoperabilität zwischen dem [it] und meinem halbrunden Rad, chemicl, einem Cheminformatics-Paket, das ich in Common Lisp geschrieben habe. Hier begann der Zug von den Gleisen zu fallen.Was sind die möglichen Ansätze für Common-Lisp/Java-Interoperabilität?

ABCL und cxml-stp

Eine Weile zurück, in einem früheren, bemerkte ich, abgebrochenen Versuch, einige meiner chem/Bioinformatik (https://github.com/slyrus/cl-bio) Sachen arbeiten mit ABCL zu bekommen, dass plexippus-XPath nicht sein könnte in ABCL geladen. Dies wurde behoben, daher wurde ich ermutigt, dass die Dinge mit ABCL funktionieren könnten. Cxml-stp scheint ABCL jedoch zu brechen.

Hoffentlich ist dies ein reparierbarer Bug und einige zukünftige Versionen von ABCL funktionieren mit cxml-stp.

In der Zwischenzeit ...

Andere CL und Java

Also, ich dachte ich immer Java einige andere Ansätze versuchen würde und eine Common Lisp Implementierung schön zu spielen. Ich weiß, du denkst "Warum benutzt der Typ nicht nur Clojure? Schließlich ist Clojure dafür geschaffen!" Nun, das ist eine gute Frage. Ich habe clojure für einige frühere Erkundungen mit [dieser Java-Bibliothek] verwendet, und obwohl die Java-Integration im Allgemeinen gut funktioniert, habe ich eine Menge vorhandenen Common-Lisp-Code, den ich gerne verwenden würde, und zu der Zeit schien es zumindest so Alle Clojure Wrapper waren dünne Wrapper um hässliche Java-Bibliotheken. Ich habe viele Common-Lisp-Bibliotheken kennen und lieben gelernt, von denen viele in QuickLisp verfügbar sind, und ich würde gerne in der Lage sein, diese zu verwenden (Dinge wie cxml-stp, plexippus-xpath, opticl, etc ...).).

Antwort

11

Clozure Common-Lisp (CCL) wird seit fünf Jahren mit einer vollständig portierten JFLI-Distribution geliefert (JFLI war früher abhängig von LispWorks FFI) als Standardkomponente der "Beispiele", die mit der CCL-Quelldistribution geliefert wurden . JFLI (von Rich Hickey, Schöpfer von Clojure) verwendet ein In-Process-Modell und wird wahrscheinlich mindestens eine Größenordnung leistungsfähiger sein als alles, was Sie aus dem Modell von Hickey's nächstem Versuch zusammensetzen könnten, einem weiter kompatiblen Socket-basierten Ansatz Lösung nannte er FOIL.

Haben Blick auf die folgende URL der aktuellen JFLI Quellcode zu durchsuchen, wie sie derzeit in den Kofferraum Clozure Entwicklung besteht:

http://trac.clozure.com/ccl/browser/trunk/source/examples/jfli

Rich-Hickey JFLI mit der folgenden Zusammenfassung der Ansatz eingeführt hatte er genommen (Stellvertreter CCL FFI, wo er verweist LW-FFI natürlich):

Mein Ziel war es umfassenden, sicheren, dynamischen und Lisp-y Zugriff auf Java und Java Bibliotheken, als wären sie Lisp-Bibliotheken, zur Verwendung in Lisp-Programmen, , d.h. mit einem Schwerpunkt auf der Arbeit in Lisp und nicht in Java. Der Ansatz, den ich nahm, war eine JVM-Instanz in den Lisp-Prozess mit JNI einzubetten. I konnte dies mit LispWorks eigenem FLI und keinem C (oder Java! *) Code tun, der eine Hommage an den LW FLI ist. Auf der JNI-Ebene (im Wesentlichen ein Wrapper um die gesamte JNI-API) baute ich diese API auf Benutzerebene mit Java Reflection.

+0

Einige aktualisierte Informationen hier: http://jfli.sourceforge.net/ –

+0

Und für FOIL auch: http://foil.sourceforge.net/ –

Verwandte Themen