Scala.jsの0.4.0がリリースされました。0.3のリリースが一ヶ月前なので、いいペースで開発されているようです。
その0.4.0の新機能の紹介をしたいと思います。基本的には↓こいつの和訳みたいなもんです。
Scala.js v0.4.0 release! - Google グループ
0.4.0は大きく三つの新機能が追加されました。
@JSExport object Foo // or @JSExport("FooBar") object Bar
みたいにアノテーションを付けると、JavaScriptからその名前で参照できるようになります。 今までもJavaScriptからScala.jsのコードを参照することはできなくはなかったのですが、Google Closure Compilerの最適化により動かなくなっていました。今回の@JSExportアノテーションにより、その問題も解決しました。 また、今までのScala.jsアプリケーションでは同じようにGoogle Closure Compilerの最適化を回避するためにstartup.jsというJSが必要だったのですが、それも不要になりました。
詳しくは以下を参照してください。
Export Scala.js APIs to JavaScript
お、scalajs 0.3 で example の optimizeJS が 5 分くらいかかってたのに 0.4.0 だと 45 秒で終わった。これは..!!
— Kazuhiro Sera (@seratch_ja) 2014, 3月 13
scala.js0.4.0にしたら0.3で5分くらいかかってたoptimizeJSコマンドが30秒くらいで終わるようになった...
— Toshiyuki Takahashi (@tototoshi) 2014, 3月 13
optimizeJSの前にpreOptimizeJSってのが走るようになった。 applying a type-aware dead code elimination algorithmとのことです。
— Toshiyuki Takahashi (@tototoshi) 2014, 3月 13
tototoshiさんのツイートにもあるように新しいデッドコード削除コマンドのpreoptimizeJSが追加されました。これにより通常のpackageJSの出力が22MBのところがpreoptimizeJSにより1.5MBまで小さくなるようです。 しかもpreoptimizeJSはpackageJSと同じくらい速いらしいです。これに対してoptimizeJSが走るので劇的に最適化時間が短縮したわけです。さらに最適化後のコードも33%ほど小さくなるようです。
これは地味に嬉しいと思います。というのも、このケース結構あります。 Scala標準ライブラリはほとんどすべてJSにコンパイルされますが、逆にJavaの標準ライブラリはほとんど移植されてないと言ってもいい状態なので、かなりひっかかります。しかも実行時エラーです。 コンパイル時に警告が出るのはありがたいですね。