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();
うーん、どうなんだろう。