Perlゼミ はてな出張所

Perlゼミのはてな出張所。Perlイベントなどの紹介

PerlからSPVMにデータを渡す - SPVM開発日記

今ちょうど、PerlからSPVMにデータを渡すところを整備している。

SPVMは、SPVMであることを意識せずに、Perlからデータを渡すことができる。

use SPVM 'Foo';

# メソッド呼び出し
my $ret = Foo->sum(1, 2);

Foo.spvmにFooパッケージとsumを定義すれば、それをPerlから呼び出すことができる。

動的言語から静的言語の関数呼び出しをするのはとても重い

実際、動的言語から静的言語の関数呼び出しをする処理はとても重い。

その理由は、静的言語の関数に渡すときに、実行時型チェックをしなければいけないからだ。

このために、たとえばFFIは、C言語の関数を呼び出せはするのだけれど、for文で繰り返し呼び出すとなると、パフォーマンスが実現できなくなる。

動的言語から動的言語の関数を呼び出すよりも、動的言語から静的言語を呼び出す処理は、はるかに遅くなる。

バインディング書いて早くしよーと思って書いても、関数呼び出し遅すぎるじゃんということになりがちだ。

SPVMはこの問題を解決する。SPVMの関数に一度わたってしまえば、その内部では、静的型言語で記述できるのが理由。

スクリプト言語C言語を直接結び合わせてしまうと、その階段が大きすぎる気がしている。

その中間にスクリプト言語風の静的型言語が入れば、FFIやXSの問題点のいくつかを解決できそうだ。