Java がこの世に出てからだいぶ経つようですが、出た当時に比べればだいぶはやっているようです。最近はJSPなどサーバで動くものも 作られています。apache.org では様々なフレームワークなどが開発されており、Javaを使うのが以前に比べて楽になりました。
ただ、Javaを使っていて少し気になる事が一つだけあります。javac JavaSource.javaと打ってからコンパイルが終わるまでの時間が かなりあるのです。コンパイラ自体もJavaで実装されているようなので、仕方がないことなのかもしれませんが、もう少し速くならないのか とよく思います。比べるのも変な話ですがせめてg++ -O0くらいにならないものでしょうか。
今回紹介したいのは、IBMのjikesという高速なJavaコンパイラです。 これはC++で実装されており、javacより5倍 ほど速いようです。半年ほど使ってみましたが、今のところバグには出会っていません。 ただ、ライブラリのパスを通さないといけなかったり、日本語など多言語環境で使う場合に文字コードを指定しなければならなかったり するので、注意点をまとめておきます。
標準的なUNIXのプログラムと同じように入れられるはずです。最近は様々なdistributionにパッケージがあるようです。 詳しいことは本家のdistributionのページを参照してください。
javacと違って、jikesはjavaの標準ライブラリの場所を知りません。そのため、ライブラリのパスを指定しないでjikesを実行すると、おそらく以下のような エラーが出ます。(MacOSX,finkの場合)
teru@server ~/src/java $ jikes lcs.java
Found 1 system error:
*** Semantic Error: You need to modify your classpath, sourcepath, bootclasspath, and/or extdirs setup.
Package "java/lang" could not be found in:
/sw/share/java/jde/bsh.jar
/sw/share/java/jde/checkstyle-all.jar
/sw/share/java/jde/jde.jar
.
.
.
.
.
.
teru@server ~/src/java $
見ての通り、ライブラリのパスが見つからないのです。そこで、環境変数で教えてあげます。MacOSXならclasses.jarの位置を、
teru@server ~/src/java $ export BOOTCLASSPATH=/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar
のように、また、それ以外、例えばLinuxなどはrt.jarの位置を
teru@server ~/src/java $ export BOOTCLASSPATH=/usr/java/j2sdk1.4.1/jre/lib/rt.jar
のようにすればよいでしょう。BOOTCLASSPATHは、CLASSPATHでも構いません。 前の環境変数を上書きしないように
teru@server ~/src/java $ export CLASSPATH=$CLASSPATH:/usr/java/j2sdk1.4.1/jre/lib/rt.jar
のようにするのもいいかもしれません。これらの内容は、気に入ったら.bashrcなどに追加することをおすすめします。
jikesはDefaultでは日本語などのEncodingを処理しません。そのため、ファイルに日本語などが含まれる場合は明示的にコードを 渡す必要があります。例えば、コンパイル対象のファイルがeuc-jpなら、
teru@server ~/src/java $ jikes -encoding euc-jp Somefile.java
とします。
* rindolf tries to think what can cause the KDE 4 SNAFU on
his user.
<rindolf> And hopefully to avoid bissecting the KDE 4 config tree.
<Zuu> snafu... that wounds like a delicious cake :D
<Zuu> *sounds
<rindolf> Zuu: Situation Normal - All F****ed up.
<Zuu> :/
* Zuu gives the snafu cake to Dmage :D
<Zuu> Dmage, just eat the cake already
<Dmage> Zuu, are you hate my english? ;)
<Zuu> i hate your non-english
<Black_Phoenix> I english your hate
<Dmage> xD
<Zuu> Dmage, but i dont hate you! :D
<Black_Phoenix> and now I can do that
<Dmage> Zuu, learn russian then! :)
<Zuu> Hehe
<Zuu> Dmage, i think you'd hate my russion far more than i
would ever hate your english
<rindolf> Spasiva.
<Dmage> xD
<Dmage> learn 'Eto huinya!'
* Zuu steals the snafu cake back from Dmage and gives it
to rindolf instead
<Dmage> and apply everywhere
* rindolf eats the SNAFU cake
<Zuu> :D
* rindolf eats Zuu's Danish too.
<Zuu> Noooh!
* rindolf loves Zuu's Danish.
<rindolf> Yum yum.
<Zuu> tis mine!
<Zuu> My daaaanish :'(
<rindolf> My precioussssssssss!
<Zuu> tis gone :<
-- SNAFU Cake
-- ##programming, Freenode
Chuck Norris commits with a roundhouse kick into the SVN server's head.
-- Daxim
-- Chuck
Norris Facts by Shlomi Fish and Friends ( http://www.shlomifish.org/humour/bits/facts/Chuck-Norris/ )