Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

コンパイル時型チェックと実行時型チェック - 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;

このような型チェックを、すべての型で、コンパイル時と実行時にチェックする。また、数値は自動変換するので、自動変換が行われる場所では、自動変換のコードを挿入する。

組み合わせが多いので、ソースコードにらめっこだ。