Perlテックブログ

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

exeファイルを作り出す - SPVM開発日記

ループ展開は複雑で、難しすぎたので、ひとまずあきらめの心境。難しいことやるまえに、まずは先にベンチやんなきゃね。

ビルドツールもSPVMコアには必須ではない気がしてきたので、こちらは将来CPANモジュール化してくれる人が現れるのを期待して、リリース方法をドキュメント化する方針に変更。

今取り組んでいるのは、exeファイルを作り出すところ。

exeファイルの作り方

SPVMは、デフォルトで、バイトコードをランタイムで実行するように設計されている。

precompileオプションを使うことで、関数をC言語ソースコードファイルに変換して、gccを使ってオブジェクトファイルにすることができる。

ランタイムからプリコンパイルされた関数を呼び出す方式で実行できる。← イマココ

exe化するためには、何が必要だろうか。たぶん、こんな感じなんだろうと思う。

  1. ランタイム自体をコンパイル、SPVMのソースコードコンパイル、main関数を含むブートストラップもコンパイル
  2. そして、この3つをリンクさせて、実行ファイルを作る

すべての関数呼び出しを静的な関数呼び出しにして、ひとつのファイルにまとめ上げる。こんな感じだろうか。

exe化できると何がうれしいの?

exe化できるとランタイムなしで配布できるということが一番うれしいことだね。

たとえばWindowsのexeをポンっと吐き出せると、それがそのままWindowsで動いちゃう。exeを作り出した後は、PerlもSPVMも必要がない。

Perlを開発環境として利用して、Windowsネイティブが作り出せるというわけ。

C#.netはマイクロソフトの公式サポートがあるから、それで作るのが一番便利なので、その方法が一番いいんだけどね。

でも、Windowsは、Win32 APIというC言語のライブラリが存在するから、これをどの言語でもラッピングできたりする。

Delphiとか、Visual C++とか、C++ Builderとか、VB.netとかC#.netとか、いろいろな開発環境でWindowsネイティブが吐き出せるでしょう。

まぁ、それと、仕組み的にはおんなじことをやりたい。