開発を遅くすることなく、Erlangシステムを高速化

最近、Erlangシステムのモジュールを書くためにCを使用することが可能になりました(私の意見では、これはここで提案されたどの方法よりも便利です )。 おそらく、HaskellをErlangと組み合わせて使用​​する可能性について知らなかったのでしょう。 Haskellは明らかに万能薬ではなく、コードの実際に重要なセクションはおそらくCで書き直す必要がありますが、Haskellは厳密なタイピングとCに比べてコード量の削減を提供します。 。 Haskellは、静的型付けとスマート型推論システムのおかげで Erlang よりも高速ですHaskell / Erlang-FFIに関する記事の無料翻訳に注目します。





ErlangタイプはHaskellではErlTypeタイプで表されます。

型変換は、toErlang関数を使用して標準型から生成された型に対して実行されます。

ghci> toErlang [("a", 1), ("b", 2)]

ErlList [ErlTuple [ErlString "a",ErlBigInt 1],ErlTuple [ErlString "b",ErlBigInt 2]]

ghci> fromErlang $ ErlList [ErlTuple [ErlString "a",ErlBigInt 1],ErlTuple [ErlString "b",ErlBigInt 2]] :: [(String, Int)]

[("a",1),("b",2)]








Haskellコードを使用してノード(ノード)を作成するには、ノードの名前を取得するcreateSelf関数を使用します。

self <- createSelf "haskell@localhost"







アーランスタイルのプロセス(SIP)を作成するには、createMBox関数を使用します。この関数は、新しいプロセスを開始するノードをパラメーターとして受け取ります。



mbox <- createMBox self







メッセージを送信するために、mboxSend関数は4つのパラメーターを受け入れます。メッセージを送信するプロセスは融合し、「名前」はノード、pid、およびメッセージ自体のアーランです。 あらゆるタイプのアーランを投稿してください。 Pid構造はやや複雑です。Leftpid(pidはプロセスアーランの識別子)またはRight name(nameはプロセス名を含む文字列)です。



mboxSend mbox node pid msg







メッセージを取得する方が簡単です:

msg <- mboxRecv mbox







より高いレベルの相互作用の可能性もあります。



reply <- genCall mbox node pid msg



genCast mbox node pid msg









genCallがgen_serverからerlangノードへの同期プロセス呼び出しを行い、genCast-非同期を行うことを推測するのは難しくありません。



Erlangモジュールから関数を同期的および非同期的に呼び出すことも可能です



reply <- rpcCall mbox node module function arguments

rpcCast mbox node module function arguments









Erlang Port Mapper Daemonでのプロセスのリンク、エラーの転送、プロセスハッシュの登録の機能は、このリリースでは実装されていません。



hackage.haskell.org/package/erlangからダウンロードできます。



PS申し訳ありませんが、翻訳として発行していません。



All Articles