Xtalに型チェック

型チェックの導入を考えています。

Array var = 10;

と書くと、

temp: 10;
if(!Array.op_check(temp)) throw TypeError();
var: temp;

というコードとほぼ等価になる機能です。

普通の型だと、単純に遅くなるだけですが、int と floatの時だけは最適化で速くなることも。


Class型のop_checkメソッドは内部で temp is Arrayとisで判定するのですが、
たとえばRange型だと temp in range_objectという判定となります。

つまり、次のように書けると。
(10..20) var = 30;


関数引数でも指定できます。
foo: fun(Array a, (0..10) b){

}

interfaceというのも追加し、特定のメソッドを持っているオブジェクトだけ許す、ということも。

Stack: interface{
push;
pop;
}

Stack s = foo();


うーん、どうなんだろう。