長年HSP (Hot Soup Processor) を愛用してきましたが、さらなるパフォーマンスや機能を求めてC++へ移行しようとすると、いわゆる「おまじない」の壁にぶつかります。

ウィンドウを1つ出すだけで何十行もの WinMain やウィンドウクラスの登録、メッセージループを書く必要がある……。 「もっと手軽に、screenmes だけで動かしたい!」

そう思って開発しているのが、HSPPP (HSP Plus Plus) です。

HSPPPとは?

HSPPPは、HSP互換のAPIをC++23モジュールとして提供するライブラリです。 「Pragmatic Hybrid(実用主義的ハイブリッド)」をコンセプトに、HSPの手軽さとC++の拡張性を両立させています。

特徴

  • WinMain不要: エントリーポイントは hspMain() だけ。
  • HSP互換: screen, color, boxf, mes などおなじみの命令がそのまま使えます。
  • モダンC++: C++23 Modules (import) を採用し、ヘッダー地獄から解放。
  • Direct2D 1.1: 描画バックエンドにはDirect2Dを採用し、高速で美しい描画を実現。

コード比較

百聞は一見に如かず。HSPとHSPPPのコードを比べてみましょう。

HSP3

; HSPのコード
screen 0, 800, 600
title "Hello HSP"

color 0, 0, 255
boxf 100, 100, 200, 200

color 255, 255, 255
pos 110, 120
mes "HSP Style!"

stop

HSPPP (HSP互換スタイル)

ほぼそのままC++に移植できます。

// HSPPPのコード (Global Style)
import hsppp;
using namespace hsppp;

int hspMain() {
    screen(0, 800, 600);
    title("Hello HSPPP");

    color(0, 0, 255);
    boxf(100, 100, 200, 200);

    color(255, 255, 255);
    pos(110, 120);
    mes("HSP Style in C++!");

    return 0; // hspMainはintを返すためreturnが必要です。stop()も使えますが、returnは省略できません。
}

もう一つの書き方:オブジェクト指向スタイル

HSPPPの真骨頂はここからです。 HSPライクなグローバル関数だけでなく、メソッドチェーンを使用したモダンな書き方も同時にサポートしています。

// HSPPPのコード (OOP Style)
import hsppp;
using namespace hsppp;

int hspMain() {
    // 戻り値を変数で受け取れば、そのウィンドウに対する操作が可能
    auto win = screen({.width = 800, .height = 600, .title = "Modern Style"});

    win.color(0, 0, 255)
       .boxf(100, 100, 200, 200)
       .color(255, 255, 255)
       .pos(110, 120)
       .mes("Method Chain!");

    // 割り込みハンドラもラムダ式で記述可能
    win.onclick([]() {
        mes("Clicked!");
        return 0;
    });

    return 0;
}

技術的なこだわりポイント

1. パラメータ省略の omit

HSPの特徴である「パラメータの省略」(screen , 800, 600 のような記述) をC++で再現するために、omit キーワードを導入しました。

// IDを省略(0になる)、サイズ指定
screen(omit, 800, 600);

// ID=1, サイズ省略, 非表示モード
screen(1, omit, omit, screen_hide);

C++26で _ が特別な意味を持つようになるため、あえて omit を採用しています。

また、omitと入力する手間を省くため、略記として空の波括弧 {} を使うこともできます。

2. 軽量ハンドル設計

Screen クラスは内部的にはIDのみを保持する軽量なハンドルです。実体はライブラリ内部のグローバルマップで管理されているため、コピーコストを気にせず自由に受け渡しができます。

3. C++23 Modules

ヘッダーファイル (.h) のインクルード順序やマクロ汚染に悩まされることはありません。import hsppp; だけで、必要な機能がすべて手に入ります。

動作環境

最新のC++機能をフル活用しているため、開発環境は少し尖っています。

  • IDE: Visual Studio 2026 (VS 18)
  • Language Standard: /std:c++latest (C++23以上)
  • Platform: Windows (x64)

まとめ

HSPPPは、「HSPの手触り」を残したまま、C++の世界へ足を踏み入れるための架け橋となるライブラリです。 「C++は難しそう」と敬遠していたHSPユーザーの方も、ぜひ一度触ってみてください。

ライセンスは Boost Software License 1.0 予定なので、商用・非商用問わず自由に利用・改変が可能です。