Perlテックブログ

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

SPVMロードマップ 2018年4月25日

SPVMのバージョン1.0までのロードマップ。2018年4月25日版。ロードマップというのは、進んでいく道筋という意味。

数値の配列型から文字列の配列型への型変換

SPVMのひとつの目的は、配列操作を高速にするというというものなんだけど、配列を頻繁に使う開発をしているときに、すぐにダンプしたい。

だから、以下のようにして、素早くダンプさせたいなぁと考えている。数値の配列を、文字列配列に変換して、それをjoin関数で結合して、出力する。

my $nums = new int {1, 2, 3, 4};

my $output = join(",", (String[])$nums);

print($output);

ちなみに、join関数はまだ実装されていない。頻繁に行うであろうことは、簡単にできるようにするという方針だね。

C99の数学関数を使えるように

数値計算と集合演算でよく使うモジュールを標準モジュールで持ちたい。モジュールはのちのちにも追加されていく予定だけれど、最優先は、数値計算と集合演算の基礎となるようなライブラリをいれたい。

まず、最初はC99で定義されている数学関数を使えるようにしたいな。それとMatlabR言語のような列優先の次元を持つ配列を表現するモジュール追加したい。Std::NDArray::IntやStd::NDarray::Doubleみたいな。

Object型が配列を受け取れるように

SPVMは、インターフェース型を持つのだけれど、現在はObjectもインターフェース型となっている。でも、今考えていることは、Object型が、配列を受け取るようにしないと不便だなということだ。

つまり、Object型は、クラス型だけではなくって、あらゆる型を受け取れる汎用型として実装したほうがよさそうだなぁということだ。そうしてないと、リストやマップなどの値として、配列が利用できなくなってしまう。

C言語レベルのAPIの整備

SPVMのもうひとつの目標は、C/C++バインディングを簡単にできるようにすること。そのために、C言語でかけるAPIを整備しないといけない。特に、メモリの管理を、意識しないようなAPIの設計にすることが、一番の課題。

XSはメモリ管理がしんどいので、メモリ管理を特別に意識しなくてもよいようにしたい。

C言語の構造体のバインディング

C/C++の構造体やクラスを、SPVMで保存できる仕組みを作る。これができないと、関数のバインディングはできても、構造体を持つようなライブラリに対して、バインディングができなくなってしまうから。

無名サブルーチン

無名サブルーチンの実装。以下のようにかけたい。無名サブルーチンの実体は、オブジェクトなんだけど、それを簡潔に書けるようにしたい。なにが楽になるかというとsortが楽に書けるようになる。

sort_obj($objecs, sub : int ($x : int, $y : int) {
  
});