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")};

になる。いい感じ。

コードサイズが肥大化するのではないか、という点については、同一の関数定義をマージする機能を後段に入れることで対処可能だと考えています。