ErlangEOSのJavaScript,Python,Rubyとの連携
俺はErlang大好きっ子だが、バイナリーデータを加工しまくるような処理はF#,C#で書いている。Erlangはこういった他の言語との連携も実によく考えられている。F#,C#で作っている部分でどうにも対処できないようなエラーが起きて落ちてもErlangに何の影響も与えずに自動で再起動、処理もリトライするように作ってある。こんな処理が簡単に作れてしまうのがErlangの素晴らしいところだ。
NIFで高速なJavaScriptとの連携 basho/erlang_js · GitHub
Portを使ったPython,Rubyとの連携 ErlPort - connect Erlang to other languages
なんていう汎用的なライブラリーがある。ところが、これの使い方が美しくない。
例えばこんな風、
{ok, P} = python:start(). python:call(P, math, factorial, [10]).
これをErlangEOSで書くと、
P = #<erlport>(python){} P.math.factorial(10)
と書ける。若しくは、
P = #<erlport>(python){} Math = P.math Math.factorial(10)
これって、もう完全にErlangの一部として使えるでしょ。
こんな感じでJavaScript,Python,RubyとErlangをいい感じで統合できるようになった。
結構いい感じで動いているんだけど、困っていることがある。 REPLで使おうとするとうまくいかない。erlで起動して明示的にreplの関数を呼べば動くんだが、いったい何が違うんだろうか。