scala c Integration

7

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

schreibt     
Arne 08.06.2011, 22:27
quelle

3 Antworten

13

Scala 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.

    
Madoc 09.06.2011, 08:45
quelle
17

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.

  1. Java varargs unterscheiden sich von Scala varargs. Wenn Sie eine variable C-Funktion aufrufen möchten, müssen Sie die Schnittstelle in Java statt in Scala schreiben. Aber Sie werden diese Schnittstelle genau so benutzen, als wenn Sie in Scala geschrieben wären.
    • Ich wollte, dass das Beispiel strikt in Scala bleibt, also habe ich puts anstelle von printf im Beispiel
    • verwendet
  2. Ich habe so ziemlich geradeheraus gearbeitet. Vielleicht möchten Sie etwas für Scala-esque machen.

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.

    
leedm777 10.06.2011 04:18
quelle
0

Soweit ich weiß, gibt es im Moment keine Möglichkeit, Scala-Code nach C zu exportieren. Aber Sie können das selbst schreiben;)

    
Fabian 09.06.2011 08:16
quelle

Tags und Links