かなり前から、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/
Related posts:
- 新しいエントリ: サイトの動作状況について
- 古いエントリ: 次回のOBSLiveは2/19(土)、LostResortレポなど、スタジオゲストは川越康弘(ノイジークローク)さん
Comments:7
- mono 11-03-05 (土) 11:53
-
こんにちは、monoと申します。
Visual Studio 2010 Professionalで付属していたレイトレーシングを実行してみたところ、ビルド時に警告がいくつか出るものの問題なく動作しました。さらに自作のプログラム(URIのページで公開しているもの)をいくつか試してみたところ、不具合と思われるものに遭遇したので報告させていただきます。
変換前のソースコードに改行(\n)を含む文字列リテラルがあると、その部分が変換後のソースコードでは改行になってしまい、コンパイルエラーとなるようです。ただ、これ以外は問題なく動作しており完成度はかなり高いと感じました。
様々なデバイスでプログラムが実行できるようになるというのもあり、とても面白いシステムだと思います。 - 匿名 11-03-05 (土) 21:58
-
「invalid end stack」が2回出て変換しました・・
(web上の、左右クリックで色相環?のリングがバウンドしながら転がるサンプルです)あと、
>hsp3rtest.vcproj 変換済み 0 1
>変換の問題 – hsp3rtest.vcproj:
>ローカルの IIS サーバーへの Web 配置はサポートされなくなりました。Web 配置ビルド ツールはプロジェクト設定から削除されました。
>プロジェクトは正常にアップグレードされました。
>このアプリケーションは、Windows Vista のユーザー アカウント制御 (UAC) 機能に関連する設定を含むように更新されました。既定で、UAC を有効にして Windows Vista 上でアプリケーションを実行すると、起動したプロセスと同じ特権で実行するようにマークされます。このマークによって、アプリケーションの仮想化による実行も無効になります。プロジェクトのプロパティ ページから UAC 関連の設定を変更できます。okならいいんですかね
- 匿名 11-03-05 (土) 22:03
-
test.cppが行の終わりが一貫してないと言われました。(hsp3rtest)
- 774 11-03-05 (土) 22:59
-
こんにちは
コンバーターを使ってみたのですが、
.axファイルを.cppファイルに変換するときに「Invalid end stack」とエラーが表示されます
エラーダイアログが表示されるだけで、強制終了はされずにOKボタンを押すと.cppファイルが生成されます
しかし.cppファイルをコンパイルしようとすると「1>.\test.cpp(90) : error C3861: ‘PushPrgcmd’: 識別子が見つかりませんでした」とエラーが表示されコンパイル出来ません
恐らくhspソース内の「button gosub」がエラーの原因になっているんじゃないかと思います
「button」ではエラーは表示されずにコンパイル出来ました「button gosub」命令が使えないのはちょっと辛いかと思います
- 魔女オイラ 11-03-12 (土) 22:59
-
安否が心配です。ご無事でしょうか?
- onitama 11-03-13 (日) 13:09
-
はい、大丈夫です。皆さんHSP3ソースコンバーターについての検証と報告ありがとうございます。
不具合については修正していきたいと思います。また、現在サポートされていない機能についても、極力もとのHSP3と互換が取れるようにしていきたいと考えています。
引き続き宜しくお願いします。 - 匿名 11-05-25 (水) 18:12
-
「invalid end stack」のエラーについてですが、
HSPソース内の「foreach」をすべて「repeat」に変えると
表示されなくなりました。「foreach」のままで変換し「invalid end stack」が表示されても.cppは生成されるので、それをビルドし実行してみたところ
「#Error 9 –>内部エラーが発生しました(9)」と表示されるので
「foreach」に何か原因があるのではないかと思います
Trackbacks:2
- Trackback URL for this entry
- https://www.onionsoft.net/wp/archives/433/trackback
- Listed below are links to weblogs that reference
- HSP3ソースコンバーター ver0.3 from おにたま(オニオンソフト)のおぼえがき
- pingback from HSPで作るスマートフォンアプリ - おにたま(オニオンソフト)のおぼえがき 11-04-01 (金) 0:27
-
[…] h(device interpolation shell)と呼ばれるシステム上で動作しています。既に発表しているHSP3ソースコンバーターによって、HSPの中間コードをC言語に変換した上で、HSPと同様の描画、制御用ライ […]
- pingback from HSPが遅いんだなって話 - スーパーカジキレーシング 12-04-08 (日) 18:19
-
[…] ああやっぱりHSPは遅いのかなー、そういやHSPソースコンバーターなんてあったなぁ、C++に変換するから多少は早くなるのかな?と思って使ってみた。以下それっぽいとこ。 static void L0002( […]