JSXにテンプレート型サポート入れ始めた
まだ master にはマージしてないですが kazuho/user-defined-templates ブランチのやつを使うと、
class Adder.<T> { static function f(x : T, y : T) : T { return x + y; } } class Test { static function run() : void { var n = Adder.<number>.f(1, 3); log n; var s = Adder.<string>.f("abc", "def"); log s; } }
が、最適化オプション (--optimize inline,fold-const) でコンパイル後に
Test.run$ = function () { /** @type {!number} */ var n; /** @type {!string} */ var s; n = 4; console.log(n); s = "abcdef"; console.log(s); };
になって、更に Google Closure Compiler にかけると
a.run$=function(){console.log(4);console.log("abcdef")};
になる。いい感じ。
コードサイズが肥大化するのではないか、という点については、同一の関数定義をマージする機能を後段に入れることで対処可能だと考えています。