Perlテックブログ

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

型の互換性に関する考察 - SPVM開発日記

SPVMの型の互換性について、いろいろと調査している。

オブジェクト型についてまとめると以下のようになる。

汎用オブジェクト型 object object[]
インターフェース型 Comparable Comparable[]
クラス型 Point Point[]

配列の次元数は255まで増やすことができる。

さてここで、問題なんだけど「Point[] 」は「object[] 」に代入可能な型かということ。

「Point」は「object」に代入可能だけれど「Point[]」を「object[]」に代入することはどうだろうか?

もし代入できてしまうと、本来はPointの配列なのに、Point以外の配列が代入されてしまうかもしれない。

そうなると、配列への代入するときに、実行時型チェックが必要になりそう。

実装して感じていることは、メモリセーフな静的型言語の型の規則は複雑であるということ。

パフォーマンスが犠牲になるか、文法の規則が複雑になるか、何かが犠牲になっている。

C言語のようにメモリセーフでなければ、何もかもがポインタというもので代用できてしまうが、メモリセーフな実装だとこうはいかないようだ。

でも、なんとか型の整合性が崩れないように実装しないと。

SPVMで犠牲にするものは、オブジェクト操作のパフォーマンス。重視するものは、数値計算のパフォーマンスと文法の簡潔さ。

この方向性で、型の互換性を調整していく。