Haskell bindet mit Ruby durch FFI?

7

Da sowohl Rubin als auch Haskell FFI unterstützen,

  • Ist es möglich, Haskell-Code von Ruby aufzurufen, vielleicht über FFI?
  • Gibt es eine Haskell-Bindung in Ruby?
Johan Dahlin 24.03.2009, 08:10
quelle

6 Antworten

11

Ich bin ein wenig zu spät zu dieser Diskussion, aber ich schreibe gerade eine Brücke zwischen Ruby und Haskell. Es ist bei Ссылка - es ist eine Bindung, die auf C-Ebene funktioniert. Noch in einem sehr frühen Stadium der Entwicklung.

    
Mark Wotton 14.09.2009 05:45
quelle
8

GHC 6.12.1 unterstützt das Erstellen dynamischer Bibliotheken unter Linux. Versuchen Sie etwas wie:

Beispiel.hs

%Vor%

wrapper.c

%Vor%

script.rb

%Vor%

Makefile

%Vor%

Befehle zum Ausführen

%Vor%     
Dan 12.03.2010 02:56
quelle
6

Ich habe es vorher nicht gesehen, aber es ist möglich.

  • Verwenden Sie Haskells FFI, um libruby zu umbrechen. Ihre Haupt-Programmdatei wird in Haskell geschrieben, die ruby_init() und verwandte Funktionen aufruft, um den Ruby-Interpreter im Prozess auszuführen. Dadurch können Sie jedoch beliebigen Ruby-Code ausführen.
  • Verwenden Sie Rubys FFI, um ein GHC-Modul als Bibliothek einzubinden . Ihr Ruby-Skript muss hs_init() aufrufen und kann nur auf foreign export ed-Funktionen zugreifen.

Sie müssen etwas Code schreiben, einige in C, damit eine dieser beiden Optionen funktioniert.

  • Führen Sie Ruby und Haskell in separaten Prozessen aus, wobei Sie einige IPC verwenden, um zwischen ihnen zu kommunizieren. Vielleicht XML-RPC ( Haskell / Ruby ) oder JSON ( Haskell / Ruby ) über Sockets oder vielleicht auch nur Pipes mit Ihrem eigenen benutzerdefinierten Protokoll.

Ich weiß nicht, was Ihre Anforderungen sind, aber das ist, was ich für gehen würde - es ist viel einfacher.

    
ephemient 24.03.2009 16:20
quelle
1

Ich bin mir nicht sicher über die Haskell-Seite, aber hier ist ein cooles Video von Mountain West Ruby Conf 09 über die Arbeit mit FFI von Ruby. Es sieht wie eine ziemlich nette Schnittstelle aus.

Ссылка

    
danmayer 26.03.2009 07:21
quelle
0

@ephemient, ich suche eigentlich nach Ruby (high level + dynamic), um die Haupt-Controller-Logik zu sein und Haskell für eine große Menge an Daten zu knacken (Funktion + Geschwindigkeit)

Ich denke, native Bindung ist nahe der Nicht-Existenz, abgesehen von diesem Tweet Ссылка

Die Verwendung von JSON RPC ist wahrscheinlich der einfachste Weg, um zu implementieren, wo es einen dünnen Wrapper in Ruby gibt (method_missing), um haskell über JSON / Socket aufzurufen.

JSON hat den Vorteil, dass es einfach ist, Grundelemente zwischen verschiedenen Sprachen in native Typen zu mappen.

%Vor%

Andere Alternative für schnelles Zahlen knirschen in Rubin (+ funktionaler Stil)

  • NArray oder andere wissenschaftliche Bibliothek in Ruby
  • Ruby-Bindung der GNU Scientific Library
  • oder gehen Sie ruby ​​1.9 und verwenden YARV2LLVM , um die Berechnungslogik in LLVM für eine schnellere Ausführung zu JIT
  • >

Gedanken jemand?

    
26.03.2009 06:22
quelle
0

Ich habe genau das versucht (ich bin derjenige aus dem erwähnten Tweet).

Ich habe nicht an den libruby-Ansatz gedacht, aber ich habe viel Zeit damit verbracht, rubys FFI zu verwenden, um eine exportierte Funktion aus haskell zu verpacken, und konnte sie nie vollständig auf alle Verknüpfungen und Runs bringen.

Wenn Sie sich die FFI-Beispiele von haskell ansehen, sehen Sie, dass sie alle eine C-main () - Funktion enthalten. Da Rubins FFI kein main () hat (und nicht haben kann), wird das nicht funktionieren. Wenn Sie ohne das versuchen, enden Sie mit seltsamen Verbindungsfehlern.

Ich kann teilen, was ich mit dir habe, ping mich auf freenode (cschneid) oder auf Twitter (BlurredWeasel).

    
Chris Schneider 26.03.2009 12:31
quelle

Tags und Links