Scala.js 0.4.0新機能の紹介 2014年03月14日

Scala.jsの0.4.0がリリースされました。0.3のリリースが一ヶ月前なので、いいペースで開発されているようです。

その0.4.0の新機能の紹介をしたいと思います。基本的には↓こいつの和訳みたいなもんです。

Scala.js v0.4.0 release! - Google グループ

0.4.0は大きく三つの新機能が追加されました。

  1. @JSExportアノテーションが追加され、Scala.jsのライブラリをJavaScriptから呼び出せるようになった。
  2. 新しいデッドコード削除アルゴリズムにより、最適化が高速になり、サイズも小さくなった。
  3. また新しいデッドコード削除アルゴリズムにより、JSに移植されていないJava標準ライブラリを参照した場合に警告が出るようになった。

@JSExportアノテーション

@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

最適化が高速化

tototoshiさんのツイートにもあるように新しいデッドコード削除コマンドのpreoptimizeJSが追加されました。これにより通常のpackageJSの出力が22MBのところがpreoptimizeJSにより1.5MBまで小さくなるようです。 しかもpreoptimizeJSはpackageJSと同じくらい速いらしいです。これに対してoptimizeJSが走るので劇的に最適化時間が短縮したわけです。さらに最適化後のコードも33%ほど小さくなるようです。

JSに移植されていないJava標準ライブラリを参照した場合に警告

これは地味に嬉しいと思います。というのも、このケース結構あります。 Scala標準ライブラリはほとんどすべてJSにコンパイルされますが、逆にJavaの標準ライブラリはほとんど移植されてないと言ってもいい状態なので、かなりひっかかります。しかも実行時エラーです。 コンパイル時に警告が出るのはありがたいですね。