From Java to Scheme

最近カヤック星人が流行っているとかいないとか。あっちはJavaでやってた仕事をRubyでやりましょ、みたいな話(だと思う。読んでないからしらない)。

こっちは、Javaで書けるものってSchemeでも書けるよね。その証拠に、それJavaからSchemeに変換できるよ、みたいな話。今Gaucheで書いているオブジェクトシステムの振舞いをJavaコンパチブルにすると、実はJavaSchemeに自動翻訳ってそんなに難しくないのかもしれない、と考えていた。

しかし、難しいと面倒くさいは違うのだ。

public class Hello {
  public void say(){
    System.out.println("Hello, world.");
  }
}

Hello hello = new Hello();
hello.say();

コンパイラ通してないから動かないかも。Javaなんてもう忘れた。で、今書いているオブジェクトシステムで↑のを書き直すとこんな感じ。

(class Hello
  (public say ()
    (J System -> out -> println "Hello, world")))

(let ((hello (create Hello)))
  (J hello -> say))

staticとかクラスのスコープとか継承とかまだ全然考えてないけど、大体こんな感じのコードを書けば動くようになってる。

それSchemeで!

それSchemeなら簡単だ... - カヤック星人 - はてなセリフ