Perlテックブログ

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

SPVMでサブルーチン型の導入にチャレンジ

Perl風静的型言語SPVMで、サブルーチン型の導入にチャレンジしてみようかと思っている。

sortの実装はコールバックが渡せる必要がある

SPVMは、変数型については、すべて静的なものになっています。現在ポリモーフィズムとして、C++のテンプレートの機能を実装しています。

でも、いろいろと考えると、静的型とテンプレートだと、sortに、サブルーチンを渡せないなぁということに思い当ってしまった。

C言語であれば、サブルーチン型があるので、sortにコールバックをわたせる。でも、現状のSPVMだとできない。

Javaは、型に階層性がある

Javaは型に階層性があるので、すべての型をObject型に変換できる。インターフェースと継承を使うと、sortが実装できる。

Comparableをインプリメントして、継承を使って、compareメソッドを実装する。するとこのクラスは、比較可能となる。

テンプレートとサブルーチン型でsort関数が実装できそう

SPVMは継承を実装していないし、型は完全な静的型だ。そのため、現状sort関数が実装できない。あるいは、実装はできるのだけれど、非常に面倒な作業を伴う。

この問題は、僕の現在の感覚では、テンプレートとサブルーチン型があれば、解決するのではないかと考える。

ちなみにSPVMには、汎用型(JavaのObject型)がないので、sprintf関数みたいなのは実装できない。

サブルーチン型の実装はちょっと複雑だ

オブジェクト型と配列型は、型の表現としては、比較的簡単だ。

my $point : Point;

my $points : Point[];

これがサブルーチン型になると、複雑になる。

my $sub : int (Point, Point[]);

みたいな。戻り値がintで、引数がPointとPoint[]。複合型になっちゃうから、構文解析でちょっと頑張らないとね。