FFI-Code (mit "fremden Importen") mit GHCi testen

8

Gut (Ihre lokale Tageszeit), alle.

Ich ging durch Kapitel der realen Welt Haskell auf der Fremdfunktionsschnittstelle, und habe einige Nachlese hier gemacht. Ich experimentiere jetzt mit der Bindung zu C-Funktionen, und ich möchte einige Erläuterungen zu einigen Dingen.

Folgendes ist ziemlich klar:

%Vor%

Ich kann das laden und Code, der es in Ghci verwendet, und alles ist in Ordnung. Es sogar lädt im eingebetteten Ghci im Haskell-Modus von Emacs. Ich finde das großartig zum Testen. math ist eine Systembibliothek, dies ist also einfach.

Nun ein Beispiel von Real World Haskell:

%Vor%

Ich habe den Rest der Funktionssignatur absichtlich weggelassen. Jetzt kann ich das nicht laden Haskell-Modus. Alle Beispiele, die ich gesehen habe, sagen, dass dies getan werden muss:

%Vor%

Was ich tue, und bekomme sofort eine Bestätigung, dass die Dinge richtig geladen werden:

%Vor%

Ich kann dann meinen Bindungscode laden und testen, aber ...

_Question 1 _ Kann ich Nicht-System-Bibliotheken aus ghci laden, z. B. pcre? Das würde erlaube mir, innerhalb von Emacs zu testen.

Weitermachen. Die Dinge werden komplizierter, wenn ich versuche, Bindungen an meinen eigenen C-Code zu schreiben.

%Vor%

Zugegebenermaßen eine sinnlose Funktion. Es dauert ein ByteString von Haskell und druckt es mit C. Hier ist eine einfache Testdatei:

%Vor%

Ich konnte das folgendermaßen zusammenstellen:

%Vor%

Und bekomme eine ausführbare Datei, aber ich konnte sie überhaupt nicht in ghci laden. Dies verzögert den Testprozess erheblich.

_Question 2 _ Was muss ich tun, um Haskell-Code in ghci zu laden, der an my C-Code bindet? Keine der Hauptquellen von FFI-Informationen hatte etwas dazu zu sagen. Keine Menge an Fummelei mit ghci -L könnte es zum Funktionieren bringen.

Bitte und danke für jede Hilfe, die Sie anbieten können.

    
Colin Woodbury 28.03.2013, 08:38
quelle

1 Antwort

9

ghci lädt jede Bibliothek, solange sie für Ihre Architektur gültig ist und sich auf einem Pfad befinden kann. Auf Windows, Pfadnamen mit Leerzeichen verwendet, um Probleme zu verursachen, weiß ich nicht, ob sie immer noch tun.

Um Ihren eigenen Code in ghci zu laden, müssen Sie ihn zuerst kompilieren und dann ghci anweisen, die Ausgabe davon zu laden:

%Vor%

Sie könnten auch die C-Dateien in eine Bibliothek kompilieren und diese in ghci laden, aber für nur eine Datei ist die Verwendung einer Objektdatei sehr praktisch. Wenn Sie eine Bibliothek erstellen möchten, sollte ein Befehl wie @ Jonke vorgeschlagen funktionieren. Auf meinem System (OSX),

%Vor%

Auf meinem System funktioniert es auch, nur den Dateipfad der Bibliothek als Argument zu verwenden, aber ich weiß nicht, ob das tragbar ist.

    
John L 28.03.2013, 10:17
quelle

Tags und Links