Perlテックブログ

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

SPVMロードマップ 2018年8月 - SPVM開発日記

今週行っていた、リファレンスの実装が完了して、Perl側から数値や複素数を渡して値を更新できるようになった。これで、ポインタを受け取る関数のC言語バインディングがとてもやりやすくなる。

現時点で必要な機能は、残り3つ。この三つを実装した後は、パフォーマンスの評価と実際の使用でうまく動くかということを、試していく。

ループ展開

ループ展開は、ループアンローリングともいう。次に実装するのは、ループ展開。

どうやって実装しようかと考えていたのだけれど、自前実装ではなくって、forループの最適化を、gccに任せることができるように、C言語ソースコードを出力するという方向性で行こうと考えている。

具体的には、現状はC言語ソースコードを出力したときに、ループは、gotoのジャンプで行っているのだけれど、これを一定の条件のときに、for文を使って書き直すというもの。

for文を残しておくと、gccC言語を解析する時点で、for文の情報を利用できるので、これによって、最適化をしてもらおうという考え。

ビルドツール

SPVMのモジュールをCPANに簡単にリリースできるようなビルド機能を付ける。MinillaModule::StarterのようなCPANモジュール配布を簡単に行えるようなツールを作る。

SPVMモジュールはプリコンパイルできて、共有ライブラリの形にできる。これは、XSの仕組みと同じで、XSで書いたモジュールを共有ライブラリにするのと方式は同じ。違うところは、XSはC言語+XSのAPIで書くけれど、SPVMを使うと、ほぼPerlの文法で書けるということ。

ネイティブのバインディングも簡単に書けるようにする。

AOTコンパイル

AOTコンパイルというのは、事前コンパイルのことです。バーチャルマシンというのは、通常は、バイトコードを生成して、バイトコードをバーチャルマシンで実行するという動きをします。

でも、これだと、環境にバーチャルマシンが存在していなければ、プログラムが動きません。

単独で、プログラムが動くためには、バイトコードとバーチャルマシンを合わせたプログラムを、コンパイルして実行ファイルにする必要がある。

AOTでうれしいことは、Windowsandroidiphone上で動く、ネイティブで動くアプリが作成できるということ。

androidJavaなので、かなり仕組みは違うから、はっきりとはいえないけれど、Windowsiphoneは動くはず。Windowsでは、Win32 APIというC言語APIを使って、Windowsアプリを作れるし、iphoneでも、Objective-CAPIを使えば、大丈夫。

実際、Perl MotionというPerlの文法でiphoneを動かせるプロジェクトもあった。

僕は、SPVMで、簡単なWindowsアプリをリリースするところまで挑戦しようと思う。androidiphoneは、興味がある人がいれば、挑戦しておくれ。