3/26 tokyoclj

40 views
Skip to first unread message

Takahiro Hozumi

unread,
Mar 26, 2011, 10:38:14 AM3/26/11
to clojure-ja
こんばんは、穂積です。
今日はありがとうございました。

話の流れで、Aleph と cljque について説明しようとしましたが全然説明できてませんでした。
簡単な説明とリファレンスを記載します。
どちらも非同期イベント処理のためのフレームワークです。

Aleph (by Zach Tellmanさん)
https://github.com/ztellman/aleph

Lamina
Alephで使われてる非同期イベント処理ライブラリ。いつからかAlephから分離された。
https://github.com/ztellman/lamina

clojure conj 時の5分ぐらいの紹介動画
http://clojure.blip.tv/file/4881274/

Aleph では tcp,http server/client、redis client などが実装されています。
現状、Aleph を使って嬉しい事は
・http で web socket を扱うことができる
・通信相手との入出力をチャネルに抽象化できる
・チャネルへの入出力をシーケンス処理ライクに処理できる
ことだ思います。
Network部にNettyを使ってるのでパフォーマンスもいいのかもしれません。

Aleph も Lamina も wiki に丁寧なドキュメントが充実してます。
ただ、パイプライン(Nettyのパイプラインとは別物)の概念など少し難しいと思います。
Aleph は非同期処理に特有のコードが読み難くしている場合がありましたが、
最近、async というマクロを追加して劇的に改善したそうです。
それについては以下が詳しいです。
(async ...) and future directions for Aleph and Lamina
http://groups.google.com/group/aleph-lib/browse_thread/thread/28478c992cbb5555
Async Programming https://github.com/ztellman/lamina/wiki/Async-Programming


http://dev.clojure.org/display/design/Channels
↑これは Zack さんが clojure に Lamina を提案しているドキュメントのようです。
コメント欄でRich Hickey は非同期イベント処理は .NET の Rx が素晴らしいので参考にして欲しいと言っています。
それを受けてか Stuart Sierra さんが以下の Rx 風な cljque というのを作っています。


cljque (by Stuart Sierraさん)
https://github.com/stuartsierra/cljque

Stuart Sierraさんによる紹介動画 (1時間半!)
http://ontwik.com/clojure/asynchronous-events-in-clojure-by-stuart-sierra/
ActiveMQ, ZeroMQ, Erlang, Lamina, Rx などいろいろな話が出て面白いです。
add-watch という便利な関数の存在も初めて知りました。

cljque はまだ実験的なプロジェクトであり、動くようになっていないとのことです。
.NET の Rx を参考にして作られています。
私は Rx の javascript 版を触ってみたのですが、イベントをシーケンス処理(map, filter等)のように扱えて便利でした。
Aleph もチャネルに対してシーケンス処理のようにイベントを処理できますが、cljque はより汎用的なもののようです。
ソースを見ると cljque(Rx) の API は把握し易くて綺麗だと思いました。
使えるようになるのを期待しています。

Aleph も cljque も Netty を使用していますが、ネットワーク部分を組み立てるのに使っているだけで
非同期処理のコアの部分(AlephはLamina, cljqueはRxっぽいの) にNettyは関係ないです。
Java NIO を使用したフレームワークはNetty以外にもいろいろあります。
Java NIO については次のブログが面白かったです。
HTTPサーバにJava NIOは必要か
http://kanatoko.wordpress.com/2011/02/15/http_server_and_java_nio/
Reply all
Reply to author
Forward
0 new messages