s式でJavaが書ける処理系
s式でJavaが書ける処理系をつくってみました。
http://github.com/mas454/experiment/blob/master/jts.scm
(class Test (public) (def (main args) ((public static void) |String[]|) (System.out.println "Hello Java World")))
これを例えばTest.jtsという名前で保存して、
gosh jts.scm Test.jts Test.java
のようにgaucheで実行すると、Test.javaに
public class Test{ public static void main(String[] args) { System.out.println("Hello Java World"); } }
が出力されます。実際には字下げとかはされません。
ちなみにマクロが使えます。例えば、mainメソッドはよく定義するので、マクロ
を使って簡単に定義できるようにすると、
(macro (def_main . body) `(def (main args) ((public static void) |String[]|) ,@body)) (class Test (public) (def_main (System.out.println "Hello Java world")))
のような感じになります。マクロは、gaucheで書けます。
(macro (test . body) (list (list test 〜 )))
本当にこんなの使えるのかどうか疑問だったのですが、実際に使ってみないと
わからないので、試しに書いてみました。
schemeでJavaのapiを呼び出せるような処理系は、いくつかあるのですが、
なんとなく使いづらくて、特に、guiが書きにくいです。
それで、自分でguiが書きやすいような、schemeの処理系が作れないかどうか
考えていたのですが、作れたとしても実用的になるまであまりにも、時間が
かかりすぎるような気がしたので妥協案として、この処理系を書いてみました。
これで、guiが書きやすいかどうかはまだ分かりませんが。
それから、s式でJavaを書くために作った処理系ですが、これのマクロを使ってJava以外のCとかC++などの別言語を出力できるようにすることもできます。
例えば、classとdefはマクロで定義しています。
たぶん、そのうちこの処理系のマクロのくわしい説明を書きます。
処理系のほうでは、最低限の機能だけ実装しています。