トップ «前の日記(2008-05-26) 最新 次の日記(2008-05-28)» 編集

じじぃの日記、ツッコミ可

Twitter: @jijixi_org
Xbox Live: jijixi

初心者が書いた OCaml 入門
Spotlight tips サイト内リンク集
1970|01|02|
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|11|
2011|05|
2012|01|

2008-05-27 [長年日記]

% [OCaml][Java] OCaml-Java project

Caml-list に 1.0 が出たとアナウンスが上がってたんでちょっぴり試してみた。 OCaml のソースを JavaVM のバイトコードにコンパイルするコンパイラや、関連するツール群という構成のようだ。

まず Downloads のページから ocamljava-bin.tar.gz を取得。 適当なところに展開。

% tar zxf ocamljava-bin.tar.gz -C /usr/local

適当に ml ファイルをコンパイル。

% java -jar /usr/local/ocamljava-bin/bin/ocamljava.jar -standalone fizzbuzz.ml

camlprog.jar というファイルができるので、これを java コマンドで実行。

% java -jar camlprog.jar
1
2
Fizz
4
Buzz
(以下略)

コンパイル時に -standalone オプションを付けると、必要なクラスファイルを全て含んだ状態の jar ができるらしい。 ちなみに上記の例でそれを付けているのは、付けなかった場合にどうしてもうまく動かせなかったから。 クラスパスに ocamljava.jar や ocamlrun.jar を指定しても動かないんだよなあ。

% java -classpath /usr/local/ocamljava-bin/bin/ocamljava.jar -jar camlprog.jar
Exception in thread "main" java.lang.NoClassDefFoundError: fr/x9c/cadmium/kernel/AbstractNativeRunner
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:280)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)

無いと言われてるクラスのクラスファイルは含まれてるみたいなんだけど、↓

% jar tf ocamljava.jar | grep AbstractNativeRunner.class
fr/x9c/cadmium/kernel/AbstractNativeRunner.class

どうしてこうなるんだろ。 Java わかんねー。

OCaml VM と JavaVM とで同じソースを使ってベンチマークを取ってみようかと思ったんだけど、手頃なソースが見当たらなかったんで止めた(弱

ちなみに ocamljava.jar には camomile が含まれている模様。 たぶん文字列を Unicode に変換する際に使ってるんだと思われる。

最後に配布アーカイブに含まれてた ocamljava-bin.pdf の「Compatibility with the standard OCaml distribution」を適当訳。

  • 末尾呼び出しの最適化は直接的な再帰 (訳注: 自分自身を呼ぶ場合ってことかな?) のみで、他の関数を呼ぶ場合には最適化されない。(これは Java におけるメソッド間のジャンプに関する制限による)
  • オブジェクトキャッシュは実装されていない。(スレッド間のごちゃごちゃした話とかに関係する)
  • 実行順序は ocamlc/ocamlopt を使った場合と同じであるとは保証されない。
  • 通常のコンパイラ (訳注: ocamlc/ocamlopt のことか?) に比べてシグナルを使った処理の反応性が劣る。(訳注: ちょっと自信無い)
  • ランタイムによるスタックオーバーフローやメモリ不足の診断はできない。(そういうときは JVM は問答無用で Java のエラーを出しちゃうから)
  • バックトレースのサポートは基礎的なものだけ。
  • (訳注: ocamljava によって) 生成されたコードは Cadmium (JVM 用の OCaml ランタイム) と標準ランタイム (訳注: 本来の OCaml ランタイム?) との互換性の問題に影響を受ける。(訳注: よくわからん。あたりまえのことを言ってるようにも思えるが)
  • ocamljava は ocamlc/ocamlopt では起こらないコンパイル時エラーを発生することがある。(めんどくさいので以下略。だいたいは JVM の制限によるものっぽい)

できればもう少し遊んでみたいけど、気力が無い…… まあ、またいずれ。

% [clip] コードギアスって一休さんのリメイクだったの? (働くモノニュース : 人生VIP職人ブログwww)

ID:mIPuHktJO が鬼才すぐるw

ともあれ、元からコードギアスって飛び道具アニメだったと思うけど、この前の回のアレは過去最大級の飛び道具だったことは確かだな。 苦笑するしかなかった。

% [雑談] 弱音のような愚痴のような

あー、root で作業するのって、すげぇー神経疲れる。

お名前:
E-mail:
コメント:

トップ «前の日記(2008-05-26) 最新 次の日記(2008-05-28)» 編集

日記ってのは本来、自分で読み返すためにあるもんだよなあ……
もしくは有名人になったら死後に本になったりとかか?

RSS はこちら

jijixi at azito.com