2010-10-06(水) [長年日記]
■ Clojure勉強中(2)
さいきん猫画像がなくてすみません。
空き時間にぽちぽち進めているClojure、教科書を読んでいるときはREPLに直接コードを打ち込んで動かしているからいいけれど、アプリケーションを書こうと思ったらちゃんと.classファイルを生成して配布可能にしなくてはならない(もちろん.cljファイルのまま配布したっていいんだけど、それじゃClojureを選んだ意味がない)。
で、やっと教科書でもそのへんに差し掛かったので、一番プリミティブなJavaアプリケーションはどんなものかと思って削っていったらこんな感じになった(あってる?):
(ns hello (:gen-class)) (defn -main [& args] (println "Hello, world."))
Rubyでは3タブだが、Clojureでは普通に2タブである(余談)。これを"hello.clj"として保存し、(まだコマンドラインコンパイラを使えるようにしていないので)REPL上でコンパイル:
user=> (compile 'hello) hello
するとclassディレクトリの下に.classファイルができる。hello.classだけじゃなくて他にもhelloで始まるファイルが都合4つ。これを普通にJavaアプリケーションとして実行する:
% java -cp classes:lib/clojure.jar:lib/clojure-contrib.jar hello Hello, world.
JRubyなんかだと、rubyのクラスとJavaのクラスが一致するように書けるからもっとシンプルなんだろうけど(jrubycを使ったことがないので「たぶん」)、関数型言語とオブジェクト指向言語の橋渡しをするための「おまじない」が多くてかなーり暗号っぽい。アプリケーションならエントリポイントを1個だけ作ればいいけど、これがクラスライブラリだったりすると「うぇ」ってなるかもなぁ。
まぁ、このあたりはテンプレ化できるはずなので、きっとスマートに書けるフレームワークがあるに違いない。なんにせよやっと単体で動作するアプリが書ける準備ができたので、だんだん面白くなってきたよ。