プログラミング Clojure

(株)オーム社の森田さまより プログラミングClojure を献本いただきました。ありがとうございます。


Clojure を初めて知ったのは本書の訳者でもある Shiro さんの日記だったと記憶している。JVM 上で動く Lisp であること、言語デザインが優れている事などが挙げられていたように思う。その後 Clojure の名前は Hacker News などでたびたび見かけるようになり、気になっていたのだが本書が出版されるまで自分で触ってみる事はなかった。「新しいテクノロジへの追随は週に1-2時間でよろしい」という Rod Johnson の教えを守っている時期でもあったし。


本書はそんな Clojure がどんな言語であるかを教えてくれる貴重な日本語の書籍である。Lisp プログラマも、 Lisp になじみもない Java プログラマも何回もニヤリとする場面に遭遇すると思う。


Clojure への第一印象は「ああ。これは本気だな。本気の Lisp だ」というもの。読みながらメモした大小の特徴からもその本気が見えてくると思う。

  • 短い識別子
  • JVM べったりの構造
    • 最適化は JVM に任せてしまう
  • 各種データ構造のリテラル(マップ、セット、正規表現)
  • 変更不可データ
  • doc 関数の存在
  • Java の呼び出しの簡単さ
  • 型ヒントによる性能向上
  • シーケンスの導入
  • 並行プログラムへのアプローチ


自分は ClojureScheme の差分に着目して読み進めたが、「そうそう。やっぱりあれがないと話にならないよね」というものきちんと認識して組み込みで提供している。勝手な印象だが、Shiro さんの Gauche に良く似ていると思う。丁寧な作り込みと、実践や経験からくる組み込み機能提供のバランスの部分とか。


ClojureScala などとともに今後普及するかどうかは、現時点では怪しいと思うがそれでも野心的な Lisp 処理系なことには間違いない。Java 案件があったらこっそり Clojure で書いてみたいと思った。
しかし JRuby しかり Clojure しかり、JVM に乗っかった処理系たちは勢いがある。Clojure における再帰問題のように JVM も完璧ではないのだが、JVM に乗っかる事で得られる利益は僕が考えているよりは大きいのだろうな。


ちなみに Scheme が読み書きできるならば、以下の 2 つのコードを見比べてみると手っ取り早く Clojure との違いの雰囲気を知ることをできる。


プログラミングClojure