clojure

先週のShibuya.lisp TT#4への参加をきっかけ*1に読み始めた『Programming Clojure』を一通り読み終えた。
今までは、JVM上の言語ということで何となく敬遠していたが、結構いろいろ面白そうな特徴があった。
とりあえず個人に良さそうだと思った点は以下の通り。※ あくまでも自分の印象なので間違っている可能性あり

  • Java関連
    • JVM上で動くので、Javaの安定性やポータビリティをそのまま継承
    • 既存のJavaクラス/ライブラリへのアクセスが簡単かつ低コスト ※ ラップ度が薄そうなのは好印象
  • データ構造関連
    • リストや配列、マップ、その他のaggregateなデータ構造全てをsequenceとして抽象化して扱える
      • common lispに当てはめれば、list型以外に対してもcons/car/cdr/mapcarなどの関数が使えるようなもの
    • データは基本的にimmutable/persistent
    • sequenceは基本的にlazyで、必要な時にのみ、その要素が計算/取得される
  • スレッド関連
    • スレッドモデルとして(?)STMを採用
  • 速度
  • その他
    • common lispよりもユーザが使いやすいように(良くも悪くも)お膳立てが出来ている感じ


まだ一冊本を読んだだけなので、実際にどれくらい使えるかは分からないが、とりあえずcommon lisp(sbcl)との住み分けはできそう。
言語的にはcommon lispの方が好みなような気もするけど*4、実用的な場面で使うのならば、clojureの方が安定・安全そうで良いかもしれない。
いずれにせよ、しばらく試してみて様子をみよう。

*1:正確にはその後の懇親会がきっかけ

*2:0からnまでの数の合計を求める関数。『Programming Clojure』のp.90に載っている

*3:ただし、(数値計算の場合はともかく)配列やハッシュなどのデータ構造がimmutable/persistentだという特性上、これらを酷使するようなプログラムでは顕著な差がでる可能性があると思う

*4:単に慣れの問題かもしれない