2010-10-23(土) [長年日記]
■ プログラミングClojure(Stuart Halloway)
関数型言語、特にLisp族への漠然とした憧れというのがあるわけですよ。S式を操るのってなんかカッコいいし。で、7年も前にSchemeに挑戦してあっさり挫折した身としては、このClojureで再チャレンジになる。
きっかけは今年のLLTigerで、Language Updateで紹介されたのを聴いて興味をもったため。特に並行プログラミングをサポートするSTMは面白いと思ったし、プラットフォームがJVMというのも、豊富なJavaのライブラリを活用できるいい選択だと思った。JVMを要求するとなると活躍の場が限られてしまうけど、今ならAndroidもあるからね。
読み手(おれ)の側で7年前と何が大きく違うって、いまはRubyでメタプログラミングがそこそこわかっている点だ。おかげでClojureでやろうとしていることが、Rubyではどう書けばいいのかなんとなく想起できるので、ずいぶん理解が早い。つまり、手続き型言語脳をRubyを介して関数型言語脳に変換できるようになっているわけで、これがないとまた挫折したんだろうなー、と思う。やっぱRubyすごい。
登場するコードはREPLに入力して動作を確認しながら読み進めた。川合さんの訳も読みやすいし、著者にもできるだけトリッキーなコードを排す姿勢があって、けっこうサクサク読める。まぁ、「理解できたか?」と聞かれれば「だいたいわかった」という程度だけど、最後まで読み通せた自分をほめてあげたい(ただし「マクロには近寄るな」ってじっちゃが言ってたので、軽く流す程度←じっちゃじゃねぇ)。
(JVMの制限で)関数型言語のくせに末尾再帰最適化ができないとか(これは回避策がいくつかある)、Javaのライブラリを使うときのシンタックスシュガーがちょっとキモいとか、慣れるのに時間がかかりそうな要素はあるものの、基本的には素直なLisp族という印象。ロック状態に気を配らずに並行プログラミングができるSTMはすばらしいし、(動的ディスパッチ的な)マルチメソッドも面白い。使いこなしたらなかなかいい武器になりそうな言語という印象だ。
とはいえ、何か本格的なアプリを書いてみないことには、言語を習得したとは言えないわけで、そうは言っても今のところいいネタがないんだよな。とか言ってるあいだに忘れそうだが(笑)。いやAndroidアプリを書けばいいんだけどさ。