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 だなぁ...。しかしラスベガスに来てもやる事が変わらない。ギャンブルも面白くないからなー。