渋谷JVM - JVM言語編でLTしました

渋谷JVMという集会の案内を見て、しばらく流していたのですが、実はJVM言語の集まりということが分かったので、Kinkの宣伝のためLT枠に滑り込みました。CCCの懇親会LTを使い回して、午前中には資料を完成させました。用意周到です。

本編はScala, Clojure, Groovy, Javaのセッションとパネルディスカッションでした。

途中、Clojureのcore.asyncという非同期処理ライブラリについて、2点質問しました。

この質問について、 id:ihcomega さんから、わけが分からないから解説しろ!という、もっともな突っ込みをいただきました。

ということで急遽LT資料を作って、コルーチンの実装方法を説明しました。

まとめると次のとおりです。

  1. コルーチンの実装にはスタックレスとスタックフルの二種類があって、Clojureのcore.asyncではスタックレスな実装を選択しているらしい。このため、コルーチンから処理を呼び出した先でコンテキストスイッチすることはできない。
  2. 通常のIOはブロックする。ブロックするとコンテキストスイッチできないため、コルーチンとの相性が悪い。このためコルーチンには、組み合わせて使える非同期IOが用意されることが多い。core.asyncでは専用のIO実装は用意されていないらしい。

また、無理を言って元のLTも喋らせていただきました。