JSX のコード例
class Point{
var x : number, y : number;
function constructor(x : number, y : number) {
this.x = x;
this.y = y;
}
}
class Matrix {
var a11 : number, a12 : number, a13 : number
var a21 : number, a22 : number, a23 : number;
function constructor(a11 : number, a12 : number, (省略)) {
this.a11 = a11;
(省略)
}
function transform(pt : Point) : Point {
return new Point(
this.a11 * pt.x + this.a12 * pt.y + this.a13,
this.a21 * pt.x + this.a22 * pt.y + this.a23);
}
}
Aug 24 2013 JSX - 公開から1年を迎えて 12
13.
最適化コンパイル例 – アフィン変換
n JSXのソースコード:
new Matrix(1, 0, 0, 0, 2, 0).transform(new Point(x, y))
n 生成される JavaScript:
{x: x + 0 * y, y: 0 * x + 2 * y}
Note: 0 * n cannot be folded since it is equiv. to: isNaN(n) ? NaN : 0
Aug 24 2013 JSX - 公開から1年を迎えて 13
Minify
Aug 24 2013JSX - 公開から1年を迎えて
n Minify is safe and more effective thanks
to the type information
0" 0.2" 0.4" 0.6" 0.8" 1" 1.2"
Total"
ngCore"HTML5"
JSX"
v8bench.jsx"
byte%size%of%generated%code(ra2o)%
Impact%of%Minifica2on
jsx"AArelease"
jsx"AArelease"|"uglifyjs"
jsx"AArelease"|"esmangle"
jsx"AArelease"AAminify"
15
16.
リリース後の進化
n セルフホスティング
n JSX のコンパイラを JSXへ移植
n 型推論の強化
n var a = [1,2,3].map((x) -> 3 * x)
n a の型は number[]
n オプティマイザの強化
n メソッドの関数への変換、末尾再帰のループ展開等
n JavaScript との互換性の強化
n export 属性、バインディングのインライン定義
Aug 24 2013 JSX - 公開から1年を迎えて 16