Da sowohl Rubin als auch Haskell FFI unterstützen,
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.
Ich habe es vorher nicht gesehen, aber es ist möglich.
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. 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.
Ich weiß nicht, was Ihre Anforderungen sind, aber das ist, was ich für gehen würde - es ist viel einfacher.
@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)
Gedanken jemand?
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).