JavaからIokeを使う

コマンド"ioke"から呼ばれるはずのioke.lang.Mainをベースに、とりあえずJavaからIokeを使うテスツ。

r.evaluateString("hogehoge");

で、IokeのRuntimeにメッセージを送る。ioke.lang.Runtimeには他にも、ファイルを受け付けるものがあったりStreamを受け付けるものがあったりするので、まぁ要するにJavaから普通に使える訳だ。

public class Main {
    public static void main(String[] args) throws Throwable {
        ioke.lang.Runtime r = new ioke.lang.Runtime();
        r.init();
        try {
            System.out.println(r.evaluateString("hoge = method(\"fuga\")"));
            System.out.println(r.evaluateString("hoge"));
            System.out.println(r.evaluateString("1 + 1"));
            System.out.println(r.evaluateString("[1,2,3,:fuga]"));
        } finally {
            r.tearDown();
        }
    }
}
#<DefaultMethod:C1FF9F>
fuga
2
[1, 2, 3, fuga]

どこぞの講演*1で作者自身が言う通り、Iokeはクソ遅い。何が遅いって、まずランタイムの初期化に10秒くらいかかる。r.init()で、標準オブジェクトを一通り初期化してるのが原因か?