Perlテックブログ

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

SPVMロードマップ - OSサポート、64bit命令、多次元配列、C99数学関数

OSサポート

SPVMの試験がたくさんのOSで通るようになってきた。Linuxに加えて、Windows, Mac OS X, Free BSDで試験が通っている。

多次元配列のサポートに苦労する

これから2週間くらいは、型システムをもう一度見直す作業をする。SPVMの型は、intやStringなどの、基本的な型とint,int、Stringなどの配列型からなっている。

これはどういうことかというと、型というのは、「基本型」と「次元」の組み合わせだということだ。

今頃になって、ものすごく困っているのは、次元というのは、動的なものだということだ。基本型は、コンパイル時までにすべてきまるのだが、次元というのは、実行時にならないとわからない。

たとえば、Perl側から呼び出す場合に、intがすでにコンパイル時に定義されていたとして、intの配列をさらに作るとすると、intという方が新しく登場することになる。実行時にこれを解決しないといけない。

これまでは、型がすべて静的に決められるとして、コーディングしてきたのだけれど、これが、そのままではうまくいかなくって、完全に型システムを書き直さないといけない状態。

ソースコードの広範囲にわたっているので、これだけで、2週間くらいはかかりそうだ。

64bit命令

現在の命令長は1命令、128bitなので、これをがんばって64bit命令長にしようと思う。メモリはなるべく詰まっていたほうが、パフォーマンス的に有利になる。64bitCPUだと、一回当たりのフェッチで、とってこれるので、このサイズまでは、小さくしたい。

しかし、こうすると、一つのサブルーチン当たりの、変数の数、オペコードの長さ、行の長さが、65535に制限されてしまう。制限をかけるか、命令長を小さくするかの選択だけど、SPVMは、パフォーマンスの方を取りたいので、制限を書けて、命令長を短くしようと思う。

C99の数学関数のサポート

最初は、ライブラリは、Javaのほうに寄せようかと考えていたのだけれど、いろいろと問題がある。それは、SPVMは、メソッドのオーバーロードを持たないので、Javaと対応させるのは非常に難しいということだ。それに、非常にたくさんのライブラリがあるので、サポートするのが、とても大変そう。

だから、方向性を変えて、C言語の関数をラッピングする方向に変更。SPVMのひとつの目標は、C言語バインディングを簡単にかけるようにすること。この目標に調和させて、C99の数学関数をまずはサポートしようと思う。