2015の29日目の記事です。pocketberserkerの爆走」でした。ActorライブラリであるCricketについてご紹介します。CricketとはCricketはF#製のActorライブラリです。ここではそれらの比較はしませんが、それぞれに特徴のあるライブラリたちだと思います。Cricketの特徴は、F#によるF#のためのライブラリなので、アクターをコンピュテーション式で書けるということと、あとはアクターの雰囲気がErlangの「プロセス」にように思われること、です。3.0でのみ動作しているようです。サンプルコードそれでは、公式ドキュメントにあるサンプルコードを見てみましょう。Actor最初のActorHost.Start()で行う初期化が重いようで、ここで少し時間がかかりますが、それが終わるとささっと流れます。}というコンピュテーション式で作ります。カスタムオペレーションのnameとbodyは、それぞれアクターの名前と処理本体を設定するものです。bodyの中では、MailboxProcessor<'Msg>などでもやるような、ループ関数を作っています。}である、という違いがあります。アクターの動的ディスパッチさて、アクターを定義する際に名前を付けたのですが、これは一体何に使うのでしょうか。それは、「その名前で呼べるようにするため」です。いう文字列を渡していました。この名前の文字列で、対応するアクターの選択を動的に解決することができます。Helloアクターを動的に呼び出せるようになって一番嬉しいこと、それは「アクター間でメッセージのやりとりをしやすくなる」ことだと思います。"白ヤギさんは手紙を食べました。"黒ヤギさんは手紙を食べました。MYMACHINE_MyProject_9360[MYMACHINE_MyProject_9360]白ヤギさんは手紙を食べました。(通算1回目)黒ヤギさんは手紙を食べました。(通算1回目)白ヤギさんは手紙を食べました。(通算2回目)黒ヤギさんは手紙を食べました。(通算2回目)白ヤギさんは手紙を食べました。(通算3回目)黒ヤギさんは手紙を食べました。(通算3回目)白ヤギさんは手紙を食べました。(通算4回目)黒ヤギさんは手紙を食べました。actor://MYMACHINE_MyProject_9360@*/black)ある程度F#のアクターに親しんでいる方にはそれほど難しくないコードだと思います。いう演算子を使っている箇所だと思います。演算子のLazy版です。遅延評価するので、1つ目のアクターを定義する際に、2つ目のアクターがまだ読み込まれていなくても問題ありません(正格評価版を実行すると異常終了します)。これにより、2つのアクター同士でメッセージを送り合うことができるのです。MailboxProcessor<'Msg>にはこの機能がないため、同じことをやろうとすると不必要な手間がかかってしまうのですが、Cricketではそれをほとんど感じさせません。まとめF#製ActorライブラリであるCricketを手短にご紹介しました。アルファ版ということで改善の余地があるプロダクトだとは思いますが、機能的に非常に面白みのあるライブラリで、今後も注目していきたいと思います。