[ Main Page ]

Jikes java コンパイラ

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
      

とします。

He says "One and one and one is three".
Got to be good-looking 'cause he's so hard to see.

Excerpt from "Come Together" by the Beatles.

    -- The Beatles
    -- Come Together ( http://en.wikipedia.org/wiki/Come_Together )

                -->  ispy_ has joined ##programming
            <ispy_>  hi gang.
            <ispy_>  I'm a n00b programmer and think I should learn A and
                     B before C, right?
          <std_orb>  ispy_: General understanding should come before that.
            <ispy_>  std_orb: I have no idea what I'm doing...
          <std_orb>  ispy_: I can see that
                  *  ispy_ kicks the dirt...
 <tommy_the-dragon>  ive been meaning to get into it
            <ispy_>  Is C like JavaScript?
            <ispy_>  Same thing right?
 <tommy_the-dragon>  ispy_: lol
          <rindolf>  ispy_: Perl is more like C than JS is.
            <ispy_>  rindolf: Never heard of Perl... I should google that.
          <rindolf>  ispy_: use Bing search instead.
          <rindolf>  Or Altavista.
         <Terminus>  rindolf: i see.
            <ispy_>  rindolf, std_orb, tommy_the-dragon ... thanks for the
                     pointers :)
          <rindolf>  ispy_: you should learn Intercal, it's the most
                     expressive language possible.
            <ispy_>  rindolf: Sounds exciting!
         <Terminus>  intercal... lol!
            <ispy_>  haha
            <ispy_>  ok ok ok... I can't continue this... I'm practically
                     laughing my ass off at my desk.
          <rindolf>  :-)
            <ispy_>  hehe

    -- Emulating a Clueless Newbie
    -- ##programming, Freenode


Powered by UNIX fortune(6)
[ Main Page ]