pre{ white-space: pre; } .entry-content pre{ word-wrap: normal; }

ぶらコード

ぶらりオープンソースの旅

最初のぶらコード(まずはmavenのソースを読むことにしようかなという、だらだらとした話)

ブログのタイトル的にはダメな感じなんでしょうね。

読者を意識していない、キャッチーでないタイトル・・

 

ま、それはさて置き、とりあえず最初のぶらコード。

(ぶらコード=コードの世界をぶらぶらすること)

 

JVMが面白い。Javaという言語というより、その下のJVM(Java Virtual Machine)という環境がおもろい。複数のOSを抽象化しているレイヤーとか面白いし、中間コードとしてのバイトコードが面白い。

 

JVM上で動作するいわゆるJVM言語はJavaとかScalaに限らず、JRubyとかJythonとか、色んな言語のスタイルで書きつつ、最後はJavaバイトコードに変換してしまえば、もれなくJVMで動かせてしまうというのが面白い。

 

Ruby環境のc言語実装とか、JavascriptのV8Engine とか色んな仮想マシンがあると思うが、一番利用されていて、実績もあってその結果一番進化しているのがJVMではなかろうか。

VMは大体がGC(Garbage Collection)を搭載してると思うが、JavaのG1GCとかあれ程進化した実装を持っている環境もなかなかないだろう。

 

そんでもって、JIT(Just In Time Conpiler)もおもろい。実行中のJavaバイトコードを動的にプロファイリングしながら動的に最適化してしまうってところが面白い。その分性能テストとかで挙動が掴みにくくなったりして苦労することもあるが、動的最適化によって、c++よりも早くなることがあったりするところが、また面白い。

 

このバイトコードのレイヤーがあるから、バイトコードインジェクションとかAOPとか出来ちゃうところが、また面白い。

cとかc++とかも好きだけど、動的にコード書き変えちゃうとか、VMならではの面白い展開を考えると、やっぱりJava関係のソース読んでいく方が展開が楽しそう。

 

でも、JVM自体はそのほとんどがc++で書かれているわけだし、どうしたってJVMの下のOSについても知りたくなるわけで、そうなるとcのソースも読むことになるので、言語を限定しているわけでもない。

 

ただ単に、JVMの上(TomcatとかJavaで実装されたアプリケーション)とか、下(JVMが抽象化しているLinuxとかWindows)とか、横(V8エンジンとかの他のVM)とかをぶらつくと面白いソースがいっぱいありそうで、ワクワクするので、JVM周辺をぶらつこうかと。

 

ということでとりあえずJVM、さらに言語的には、とりあえずど真ん中のJavaで実装された何かをターゲットにぶらついてみたい。

 

で適当に物色していると、結局ソースをダウンロードとかしてきて、ローカルでビルドしたり、eclipseに取り込んでみたりするわけだが、そこでまずビルドでつまずく、、、。

大体が、mavenのpom.xmlが用意されていたりするので、プロジェクトの構成とかはある程度つかめるんだが、マルチモジュール構成になっていたり、依存関係の解決とかに失敗してビルド失敗する。

 

mavenは普段の開発でも使っているから、不慣れなワケでもないが、分かっていないことも多い。トラブった時の解決に時間がかかる。

なので、いっその事mavenのソースを一通り、読んでしまって、mavenへの苦手意識を薄めていくことから、始めるとしますか。(ここに来て、ようやく結論。なげーよ。)