JavaScript Compressor

当初はSummer of Codeのネタとして応募したんですが、6時間ぐらいで実装でけた (Parser & Lexer & Output)。割と楽そうなネタだったので応募したんだが、ここまで早いとは思わなんだ。Parser & Lexerは kjs のそれを用いたので、実際に自分が実装したのは Output の所だけ。半分ぐらいの時間はkjsからのParser & Lexerの切り出しに要した。

ubuntu% cat test.js 
var a = 1;
var c, d;
var e = "aiueo";

for (var i = 0; i < 10; i++) {
  a[i] = 1;
}
ubuntu% ./jsc test.js 
{{var a=1;var c;var d;var e="aiueo";for(var i=0;i<10;i++){a[i]=1;}}}

kjsのコードを使っているのでLGPLになるのだが、それだとDojoのライセンスに合わんから新しくJavaで書いてくれとか言われたのでSummer of Codeは辞退した。嫌やっちゅうねん。でもmentorになる予定だった人とは仲良くなったのでDojoの外部プロジェクトとしてぼちぼち書いていきます。

本当はCompressorとかやりたいんじゃなくて、inline expantionとかして性能を上げるような変換がやりたいんだよな。定数の畳み込みは実装してみた。でもDynamicな言語だから(evalとか有るし)色々と難しいんだなぁ。YARVの最適化とかが参考になるのか?Threaded Codeとか(当て勘)。

後はテストケースを積み上げるのも、重要な仕事だけど heavy だなぁ...。しかしラスベガスに来てもやる事が変わらない。ギャンブルも面白くないからなー。