Ich möchte etwas von meinem Scala-Code nach c portieren und diesen portierten Code von meinem aktuellen Projekt aufrufen. Aber ich habe keine Dokumentation darüber gefunden, wie das geht. Es wäre großartig, wenn dies nur von sbt möglich wäre, denn das ist mein aktuelles Build-System.
Momentan habe ich über SNA gehört, aber ohne Dokumentation
Ich suche nicht nach einem automatischen Scala-zu-C-Compiler oder ähnlichem. Ich weiß einfach nicht, wie man die Schnittstelle zwischen scala und c
schreibtScala und C sind grundlegend verschiedene Programmiersprachen. Sie können nicht erwarten, einen automatischen Konverter von Scala zu C zu haben.
Wenn Sie Scala-Code von C-Code oder umgekehrt aufrufen möchten, sollten Sie das Java Native Interface (JNI) . In diesem Fall führt eine laufende JVM Ihren Scala-Code aus, und JVM lädt Ihren C-Code als dynamische native Bibliothek und ermöglicht die Interaktion mit Ihrem Java / Scala-Code über JNI. Es ist jedoch nicht einfach oder unkompliziert; Sie müssen viel lesen und ausprobieren.
Ich bezweifle, dass Sie eine sbt-only-Lösung zum Kompilieren von C-Code finden werden. Selbst wenn Sie ein sbt-Plugin gefunden haben, das C-Code kompiliert hat, wäre ich wirklich überrascht, wenn es gut gemacht wäre. Das Kompilieren von nativen Bibliotheken ist einfach zu anders als das Kompilieren von Scala.
Zum Kompilieren Ihrer C- oder C ++ - Bibliothek empfehle ich CMake oder Automake . Beide sind nicht perfekt, aber beide machen es gut, Ihnen zu erlauben, im Grunde zu deklarieren "Kompilieren Sie diese .c oder .cpp-Dateien in ein .so". Automake ist bei Open-Source-Projekten beliebter, aber CMake ist etwas einfacher. CMake hat auch eine gute Unterstützung für das Kompilieren unter Windows, wenn das eine Voraussetzung ist.
Für den Zugriff auf Ihre eigene Bibliothek von Scala empfehle ich JNA . Es ermöglicht Ihnen den Zugriff auf nativen Code aus jeder JVM-Sprache, einschließlich Scala. Und das ohne die Leimschicht oder Code-Generierung, die für JNI erforderlich ist.
Ich habe das JNA-Beispiel von Java nach Scala portiert. Es gibt ein paar Dinge zu beachten.
puts
anstelle von printf
im Beispiel Und der Code:
%Vor%Übrigens ist es lustig, dass Sie ausdrücklich erwähnen, dass Sie keinen Scala-C-Compiler haben wollen. Es gab ein aktuelles Papier , das über die Erstellung von Scala für LLVM veröffentlicht wurde haben weitgehend den gleichen Effekt wie ein Scala-zu-C-Compiler.