hio++.
ひおにっき(2007-05-22)外部ポートっていう言い方があってるのかわかんないけれど^^; 別プロセスを起動してそっちで処理して結果を返す. 返さなくてもいいんだけど. Erlang-Port-0.04として CPAN にアップしてあります.
遊び方はしごく簡単で、Erlang::Portを入手したらmakeして、exampleディレクトリにcdして以下のようにするだけ。
% erl Erlang (BEAM) emulator version 5.5.4 [source] [async-threads:0] [kernel-poll:false] 1> c("perleval"). {ok,perleval} 2> perleval:start("perl -Mblib perleval.pl"). #Port<0.124> 3> perleval:eval("$]"). "5.008008" 4> perleval:eval("sub{$_[0]**$_[1]}->(2,4)"). 16 5> perleval:stop(). {<0.30.0>,close}
ソースコードもむっちゃ綺麗。Erlang::Portもpure perlなので、何をしているかはソースを読めばわかる。ソース読みたくない人のために解説すると、erlangとperlは標準入出力で通信。データのserialize/deserializeは主にperl側で行うといったところ。
みかログ: oregexp動いた氷魚にゃさんにErlangからPerlを呼び出すモジュールを作ってもらい,
というわけで、私からもおねだり。今度は逆に、Perl側からErlangを呼び出すモジュールも欲しい。このあたりが参考になる。
もちろん、
でもいいのだし、似たようなことは私もよくやっているのだけど、これをErlang::Portのserializer/deserializerを使ってやってみるというか。
ただ、今のところは、RBridgeにせよErlang::Portにせよ、粗結合型のbridgeなので、作りやすく使いやすい一方、密結合--組み込み型もちょっと欲しくなってくる。
みかログ: oregexp動いたPerlの方は,関数呼び出しを1回挟まないとダメで,それが大きなオーバーヘッドになってしまっている模様.
これはむしろErlang⇔Perlの通信に絡むoverheadの方が大きいと思う。粗結合型の一番の欠点がこれ。小さなタスクだと、サーバー側(RBridgeではerlang, Erlang::Port では perl)の処理よりも通信コストの方が高い。これを何とかしたいところなのだけど....
Dan the Man with too Many Languages to Speak
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。