コンパイル時型チェックと実行時型チェック - SPVM開発日記
仕様上必要なSPVMの型がでそろった。
数値型
byte型
short型
int型
long型
float型
double型
オブジェクト型
汎用オブジェクト型
パッケージ型
クラス型
インターフェース型
値型
ポインタ型
配列型
数値型
オブジェクト型
型チェック
型が出そろったので、コンパイル時型チェックと実行時型チェックの部分をもれなく見直さないと。文字列型はなくって、stringはconst byte[]のエイリアスになっている。
型チェックには、コンパイル時の型チェックと、実行時の型チェックがある。たとえば、数値からクラス型への変換はできないことは、コンパイル時にわかるから、これはコンパイルエラーにする。
# コンパイル時エラー my $num = 1; my $point = (Point)$num;
SPVMは静的型を持つ言語だけれど、型推論を使って、変数宣言では型を省略して書けます。
一方で、汎用オブジェクト型からクラス型への変換は、実行時にならないとわからないから、これは実行時型チェックをしないといけない。
# 汎用オブジェクトに代入 my $object : object = new Point; # 実行時型チェック my $point = (Point)$object;
このような型チェックを、すべての型で、コンパイル時と実行時にチェックする。また、数値は自動変換するので、自動変換が行われる場所では、自動変換のコードを挿入する。