第2のドワンゴ Advent Calendar 2015 - Qiita に参加してponylangについて書きました。 Ponylangで型付きActor生活 - Qiita
今回は上の記事を投稿した後で教えてもらったことや気づいたことをまとめます。
学び
http://www.ponylang.org/papers/fast-cheap.pdf のイントロダクションの
A current trend in programming languages is to combine the actor-model [3] of concurrency with shared memory to eliminate the requirement to copy all messages between actors, as is done in languages such as Erlang [4]
の解釈が間違っていたことに気がつけました。
- ☓ Erlangで行われているような、「全メッセージコピーを省略するためのシェアードメモリーとアクターモデルを統合する試み」がトレンド
- ◯ Erlangで行われているような「全メッセージコピー」を省略するためのシェアードメモリーとアクターモデルを統合する試みがトレンド
(erlangは節約のためにコピーしないんですよねみたいな話を職場の先輩にしたら、いやコピーするよ?みたいな話になり読み返したら発覚というパターンでした。)
shared nothingなアクターモデルにshared memory方式を入れるのは、全部のメッセージを毎度毎度コピーすると(特に大きなメッセージを次々とやりとりする場合に)パフォーマンスが低下する懸念があるのがモチベーションとなっています。 これはponyの優位性を考える上で重要な点で解釈を間違えているのはまずそうですが、この部分はアドベントカレンダーの記事中では触れなかったところなので記事の訂正は不要そうです。
erlangだと基本的に全部コピーされて、他のアクターの変数にも触れないようになっているそうなのでerlangはかなり安全側に倒れているようです。 erlangはすごいE本の前半部分を読んだだけなのでその辺は全く知らず、勉強になりました。
erlangのメモリモデルについては、http://ds.cs.ut.ee/courses/course-files/To303nis%20Pool%20.pdfが分かりやすいと紹介してもらいました。(まだ読んでないですが・・・)
erlangの挙動は分散処理の際にリモートアクターなのかローカルのアクターなのかといったことを気にせず使える透過性に一役買っているようです。
さらに、ponyにはまだ分散処理の仕組みが無いのでerlangのその辺の良さとの比較はまだ出来ないですねという話をしたのでぐぐってみたら、
@PreetamJinka @amontalenti @xaprb @ponylang the distributed actors in pony is still unreleased but the paper exists.
— ¯\_(ツ)_/¯ (@SeanTAllen) October 24, 2015
ということで実装はまだだけど論文は既にあるよとのツイートが見つかりました。
たぶんこの辺?といった話をしました。(まだ読んでないですが・・) http://www.doc.ic.ac.uk/~scd/Disributed_Pony_Sept_13.pdf
(さらに、ponyの元になった修士論文 http://www.doc.ic.ac.uk/teaching/distinguished-projects/2013/s.blessing.pdf の存在も教えてもらいました。これを読むのは厳しそうですね・・・。)
また、記事を書くためにRustとの比較をしなければと思いRustの勉強を少ししたりしました。 その結果、記事ではRustとの違いの一つとしてデッドロックの有無を挙げました。
見落としている点として、ponyでは原理的にデッドロックを回避しているわけではないという点を指摘してもらいました。 つまり自分でロックを実装して、むりやりデッドロックさせること自体は可能なので絶対にロックしないわけではないということです。 (とはいえロックが不要なモデルなので実用上はデッドロックフリーと言っても問題ない範囲ではあると思います。きっと・・・。)
pony日本語情報について
やや脱線したので、記事の話に戻ります。
本文では触れませんでしたが、ponylang tutorialは一通り記事にしています。(英語の解釈に失敗して間違っている可能性がありますが・・・。)
- Ponylangで型付きアクター生活[1] Hello World編 - だいたいよくわからないブログ
- Ponylangで型付きアクター生活[2] TypeとActor編 - だいたいよくわからないブログ
- Ponylangで型付きアクター生活[3] Expression編 - だいたいよくわからないブログ
- Ponylangで型付きアクター生活[4] Capabilities 編 - だいたいよくわからないブログ
- Ponylangで型付きアクター生活[5] 続CapabiltiesとAliasing編 - だいたいよくわからないブログ
- Ponylangで型付きアクター生活[6] consume, recover編 - だいたいよくわからないブログ
- Ponylangで型付きアクター生活[7] capability subtyping, arrow type編 - だいたいよくわからないブログ
最近では、Implementing chat application with Pony lang | Software Development Ramblingsのような面白いチュートリアルや、 jemc/pony-zmq · GitHub(ponyでのZeromq実装)のようなおもしろいプロダクトも登場しています。
僕も調子に乗ってチュートリアルを書いてみました。 pub subっぽいponylangのサンプルコードを書いた - だいたいよくわからないブログ
ponylang日本語情報あんまりない(#ponylang lang:ja - Twitter Search, ponylang - Google 検索)気がするので、もっと盛り上がるといいなーという気持ちでアドベントカレンダーに書いたので盛り上がるといいなーと思っています。