Home > Archives > 2011-03-04

2011-03-04

HSP3ソースコンバーター ver0.3

かなり前から、OpenHSP上でHSP3ソースコンバーター(hsp3cnv)の実験を行なっていて、少しずつ形になってきています。
hsp3cnvは、HSP3のコードを他のソースに変換するためのツールで、C++言語など他の言語及びプラットフォームに向けたソースの移行を可能にするためのツールです。現在のバージョンでは、HSP3のソース(.hsp)をC++言語のソース(.cpp)に変換することができます。これによりネイティブコード動作による高速化や解析に対するセキュリティ向上などが期待できます。
hsp3cnvは、OpenHSPからも最新版をダウンロードできますが、まとめたアーカイブをβ版としてここでも公開するとともに簡単な使用方法を記しておきます。

※注意
HSP3ソースコンバーターは、できる限りHSPのソーススクリプトを他のシステムで運用できるよう変換を行なうもので、すべてのHSPソーススクリプトの変換を保証するものではありません。このバージョンは、テスト版のため多くの機能が実装されていません。変換の流れや、システムの概要を知るための参考程度にお使い下さい。
ダウンロードはこちらからどうぞ。

  hspcnv03.zip (234.6 KiB)

おおまかな利用方法は以下の通りです。

  • 変換したいソースをスクリプトエディタで読み込み、オブジェクトファイルを作成します(HSPメニュー→オブジェクトファイル作成)。
    この時、最初の行に「#cmpopt varname 1」を入れておくと変数名などがそのまま生成されるので変換後のソースが見やすくなります。
  • ソースと同じフォルダに生成されたオブジェクトファイル(拡張子が.axのファイル)をソースコンバーターに渡します。コマンドプロンプト上でパラメーターを指定するのが正しい使用法ですが、axファイル(オブジェクトファイル)のアイコンを「hsp3cnv」にドロップするだけでも、同じフォルダにcppファイルが作成されます。(詳しくはドキュメントを参照してください)
  • ここから先は、Microsoft Visual StudioのC++コンパイラが必要になります。ここでは、VS2005で検証していますが、基本的には2008や無償で入手できるExpressでも同様に使用することができるはずです。(2010での検証はまだ行なっていません)
    Visual Studio上から、hsp3rtestフォルダ内にあるプロジェクトを開いてください。
  • 最初にそのままプロジェクトをコンパイル(ビルド)することができるかを確認してみてください。正常にビルドされると、MIAさん作のレイトレーシング(raytracing.hsp)が起動できるはずです。
  • ちなみにビルドの構成を「Release」にしていない場合は、実行速度は遅いままなので注意してください。
  • 自分で変換したソースをビルドする場合は、hsp3cnvで変換したソースを「test.cpp」とリネームしてhsp3rtestフォルダ内にコピーするか、hsp3rtestプロジェクトに登録されている「test.cpp」を削除して変換されたソースに入れ替えればOKです。
    Visual Studio上でビルドされたexeファイルは、Windows上でスタンドアロン動作するバイナリとなります。

C++言語上での、動作は以下の内容に制限されています。

・HSP3がサポートする基本命令、基本関数、システム変数
・int,double,str,label型の変数
・モジュール変数以外のモジュール機能(#module、#global)
・ユーザー定義命令、関数(#deffunc、#defcfunc)
・DLL及び、プラグイン呼び出し(仮対応)

以下の機能は、まだサポートしていません。

・プラグインによる変数型の拡張、コマンドタイプの拡張
・COMオブジェクト操作、COM型・Variant型変数
・モジュール変数
・varptr関数によるdll関数ポインタ取得機能

以下の機能は、このシステム上でのサポート予定がありません。

・run命令

サンプルで使用したMIAさんのレイトレーシング(raytracing.hsp)の場合、こちらの環境でテストした限りでは、1画面のレンダリング所要時間は以下のような結果になりました(環境により変動があります)。


HSP3.21実行時、17.429秒
hsp3cnvによるC言語実行時、9.655秒
hsp3cnvによるC言語最適化実行時、8.797秒

現状で、インタプリタ(通常)版のHSP3から2~5倍程度の速度になっています。(Debugビルドのままだと大幅に遅くなります)
VC++のPGO(Profile-Guided Optimization)を使用することで、さらに高速化を図ることができます。
HSP3ソースコンバーターの目的は、高速化やネイティブ化という面もありますが、C++など他の言語に変換することでWindows以外のプラットフォームでの動作につなげるという面も持っています。
特にスマートフォンやタブレット等のポータブルデバイスや、組み込み系の機器向けにライブラリを用意することで、Windows上で開発したものを手軽に移植するための環境として利用できます。
現在はまだ準備段階ですが、今後これからソースコンバーターを介して発展していく領域は限りなく広いと考えています。ぜひ、多くのユーザーに利用してもらえることを願っています。

また、OpenHSPではzakkiさんによりllvmを使用したJITコンパイラを搭載したバージョンも作成されています。こちらは、実行時にネイティブなコードを生成するもので、axファイルから直接コンパイルと同等の速度で実行を行なうことが可能です。詳しくは、以下のサイトをご覧ください。

peppermint.jp
http://peppermint.jp/

    このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

  • Comments: 7
  • Trackbacks: 2

Home > Archives > 2011-03-04

Search
Feeds
Meta

Return to page top