[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

HSP3に追加予定の機能のリスト

現時点のβ版にすでに実装されている、もしくはほぼ決定しているもののリスト。

現在、おにたまさんによりHSP3.0の開発が進められています。HSPのβテスト版のページにて、HSP3.0のβ版が公開されています


機能

演算の評価順序変更

C言語とほぼ同じ評価順序に変更されます。

HSP2.x互換モード(左から順に評価)も搭載されるらしい?

  • 現在のβ版では互換モードは未実装
  • 2.x系はメンテナンスバージョン、3.x系系は機能強化バージョン、というように両バージョン間は非互換のまま並行して開発してもいいと思うのですが。メンテナンスの手間を考えると、そうもいかないのでしょうか。

配列要素の指定方法の変更

  • a(3) のようにカッコつきで指定します。
  • a(b+1) のように、要素を式で指定することが可能。
  • HSP2.x互換のピリオドによる指定も可能。(さらに、a.(b+1) のような指定も可能)

連想配列

変数の型によっては配列要素として整数値以外のものを指定することができるようになります。(変数の型については拡張プラグイン任せですが)

標準機能としては、COMオブジェクト型の変数でオートメーションオブジェクトのプロパティ名を指定できます。

浮動小数点実数のサポート

変数としては倍精度(double)のみの模様です。

関数・COMメソッドの呼び出しでは引数に単精度(float)を指定することが可能。

関数のサポート

次の関数が標準でサポートされます。

  • 各種数学関数
  • 変数型変換
  • 変数・関数ポインタ取得
  • 変数情報取得 (型、サイズなど)
  • ウィンドウ関連情報取得
  • ディレクトリ情報取得
  • システム情報取得
  • 文字列操作
    • ディレクトリ名変換
    • Unicode -> ANSI 変換
    • 書式指定文字列

その他、拡張プラグイン定義の関数をサポートします。

HSP のスクリプト上から関数を記述できるようにするかどうかは現在保留

repeat, gosub などのネスト制限の撤廃

といっても、gosubについてはHSP内部のスタック領域の容量が許す限りのようなので、無制限というわけではないみたいです。

repeat は現在のβ版では以前のままのようです。

ウィンドウメッセージの割り込み処理

サブルーチンのラベルを指定して、割り込み後、元の位置に戻すということも可能。

変数領域の自動再確保

配列変数や文字列変数を自動的にサイズ拡張

代入演算子の強化(追加)

これまでの += や -= に加え、*= , /= や &= などすべての代入演算子記述が使用可能。

ローカル変数の導入

モジュール定義命令の再帰呼び出しなど。

ラベル型の導入

  • 現在のβ版では未実装

モジュール変数

モジュール定義型の変数で、複数の変数やデータをまとめて管理。C/C++の構造体かクラスのようなもの。

  • アクセス演算子はもう決っているのでしょうか?
    • あるモジュールのモジュール変数へのアクセスは、そのモジュール内で#modfuncにより定義されている命令からのみアクセスできるようです。クラスほど高機能なものではないです。
    • 具体的にはどうやってアクセスするのでしょうか?Cの構造体ならアクセス演算子'.','->'を使うですが、HSPではどうなるのでしょうか?'.'は配列のアクセス演算子に予約されてますよね。
    • 基本的にモジュールの外の領域からはアクセスできないので、アクセス演算子はありません。あと、実行中もモジュール変数の型は変わりうるので構造体やクラスともちょっと違うような気もしますが。簡単なスクリプトだと以下のような感じ。
      #module a x,y,z     ; モジュール名とモジュール変数 
      
      ; 初期化 (コンストラクタ)
      #modinit ainit int p1,int p2,int p3
      x=p1:y=p2:z=p3
      return
      
      ; モジュール変数を表示する命令を定義
      #modfunc viewxyz
      mes "x="+x+" y="+y+" z="+z
      return
      
      #global
      
      newmod v,a,1,2,3
      viewxyz v       ; ここで "x=1 y=2 z=3" と表示される
      stop
      
    • クラスとして考えるなら、非publicな変数だと考えれば良いです。モジュール変数に触るには、アクセサとなる命令を介す必要があります。

COMオブジェクト、Unicode文字列のサポート

COMオブジェクト型変数がサポートされます。 インターフェースメソッド呼び出し、Unicode文字列の変換等。

オートメーションオブジェクト (IDispatch) のサポート。

ポインタ操作の強化

変数のアドレス取得関数と、任意アドレスのメモリブロックをHSP変数に割り当てる命令が追加されています。

ActiveXサポート

ウインドウ上にActiveX(OLE)コントロール配置することを可能に。

プラグイン

プラグイン機能の刷新

内蔵の命令が取得可能な情報や機能は、すべてプラグインでも利用することができるように。

仕様変更のため、HSP2.xまでの拡張プラグインをそのまま使用することはできなくなります。

DLL関数の呼び出し

  • これだけではloadlibとの違いがわかりません。どなたか具体例をお願いします。
    • 具体例じゃないですが。プリプロセス文で定義する事で、普通の関数の様に使える様になってます。インスタンスハンドル等は、呼び出し時に書かなくても、自動で渡されたりもします。動的呼び出しの方も残ってますが、大きく統廃合されてます。
    • 3.0ではloadlib系命令及びllmodモジュール系の命令はサポートしないようです。llmodモジュール命令系は互換マクロの実装を予定しているそうです。
    • なお、API関数などDLL内の関数をHSPの命令のように扱える機能になっています。(戻り値などを利用できないので関数ではないです、戻り値はシステム変数・statに代入されるようです)、正確に言えばLoadLibraryとGetProcAddressをプリプロセッサ命令化してこれで命令として定義し呼び出せるようになっているようです(FreeLibraryはHSPが自動で呼び出す?)。
    • 実際には、(まだロードされていなければ)DLL関数呼び出し時にLoadLibraryとGetProcAddressを、HSP終了時にFreeLibraryを呼び出している模様。
  • 実際のスクリプトとしては
    #uselib "user32.dll"
    #func MessageBox "MessageBoxA" hwnd,str,str,int
    
    #define MB_OK 0
    
    MessageBox "DLL関数呼び出しテスト", "HSP 3.0α", MB_OK
    end
    
    また、書き方は1通りではなくて次のようにしたりもできる。
    #uselib "user32.dll"
    #func MessageBox "MessageBoxA" int,int,int,int
    
    #define NULL 0
    #define MB_OK 0
    
    s = "DLL関数呼び出しテスト"
    t = "HSP 3.0α"
    MessageBox NULL, varptr(s), varptr(t), MB_OK
    end
    
  • mingwのヘッダあたりからwinapiのプロトタイプだけ抜き出してくると便利かも。

デバッグ

デバッグ機能の強化

外部ツールと連携してスクリプト実行のデバッグ支援を行う。1命令単位の実行トレースや停止などをサポート

エディタ

ほぼ無制限のUNDO / REDO

キーワード色分け

オートインデント

コンパイラ

コンパイル時文法チェック

リソースの組み込み

実行ファイル作成時にリソースセクション(.rsrc)の操作を行ない、アイコンなどのリソースを直接更新。