clojureバイトコードと名前空間のロード
clojureが*.cljをコンパイルしたときに,どのようなバイトコードが 生成されるのかを調べてみる. まずは,単純な例: (ns example.hello)から始めてみる. 気をつけること コンパイル単位は名前空間 名前空間ごとにクラスローダ"namespace__init.class"が作られる http://clojure.org/compilationに詳細あり コンパイル時は(コンパイル対象のclojureコード)ソースディレクトリをクラスパスに含める 実行時はコンパイルされたクラスファイルの他にclojure.jarをクラスパスに含める コンパイル leiningenを使わず,生のclojureでコンパイルしていく. 以下のように3つのクラスファイルが作られる hello__init.class hello$fn__4.class hello$loading__4958__auto__.class $ mkdir clojure-work ; cd clojure-work $ wget http://central.maven.org/maven2/org/clojure/clojure/1.6.0/clojure-1.6.0.jar $ mkdir -p src/example $ vim src/example/hello.clj (ns example.hello) $ mkdir classes $ tree . ├── classes ├── clojure-1.6.0.jar └── src └── example └── hello.clj $ java -cp ./src:./classes:clojure-1.6.0.jar clojure.main user=> (compile 'example.hello) $ tree classes classes └── example ├── hello$fn__4.class ├── hello__init.class └── hello$loading__4958__auto__....