Perlテックブログ

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

型チェックをコンパイル時に移動する | SPVM開発日記

今SPVMのコンパイル情報とランタイム情報とを分離する作業をを行っているのですが、これがなかなか難しい。

分離すると、ロジックが二重管理になっちゃうものがあるんだけど、これを何とか解決せねば。

ランタイムに含まれる型チェック

今は、型チェックの関数がランタイムに入っていたりする。

if (SPVM_TYPE_is_object_type(compiler, basic_type_id, dimension, flag)) {
  ...
}

型チェックがランタイムに入っている。

でも、よく考えると、サブルーチンの引数型と戻り値型は、コンパイル時に完全に決定するから、この部分はキャッシュしておいてもよいなと感じる。キャッシュしておくと、実行時は真偽値の判定に置き換えられる。これで、コンパイル依存を減らしていく。

インターフェースの適合性の判定

インターフェースに適合するかの判定も型チェックが入ってしまっている。でもよく考えると、すべてのクラスはコンパイル時に決定されるから、どのクラスが、どのインターフェースに適合するかは、コンパイル時に決定できる。ちょっとforループの負荷は高くなるかもしれないけれど、クラス数は、一般的には少ないだろうから、ちょっと、この方法に切り替えてみるかな。

exeガッチャンコへの道は、もう少し長い。