Hot Soup Processor

Hot Soup Processor（ホットスーププロセッサー）は、1995年からおにたまにより開発されているプログラミングツール、およびそのプログラミング言語である。略称はHSP。

 歴史 
 誕生とHSP2登場 
1994年にHSPの前身となる（LSP）がPC-9800シリーズで開発された。名前の  は「」が由来である『逆引き　HSP3 プログラミング事典［基本編］』 工学社 p27 ISBN 4-7775-1226-6。言語仕様は米ダートマス大学で開発された  言語の書式に基づいているが、 との互換性はない。

1995年より  3.1 で動作するHSP1.0の開発が開始され とは?、1996年にフリーウェアとして一般に公開された。開発した経緯について、おにたまは『自分にとって必要だから作った、いわば中間生成物的ソフトなのです。』と述べている窓の杜 - 【このソフト作った人はどんな人？】 第3回：「」の作者、おにたまさん (2002年1月17日）。

1997年にHSP2.0が登場し、 95 以降で動作する32ビットアプリケーションとなった。定数や文字列型の変数に対応したほか、後のバージョンアップで3D描画機能をサポートした。1999年に「 賞」、2001年に「オンラインソフトウェア大賞2001」をそれぞれ受賞した。2005年には日本の経済産業省が支援する「ITクラフトマンシップ・プロジェクト」にHSPを取り入れた教育・研修が採択された平成17年度「ITクラフトマンシップ・プロジェクト」選定結果について平成17年度ITクラフトマンシップ・プロジェクト採択事業「スーパープログラマーを育てよう！」プロジェクト事業報告 特定非営利活動法人OCP総合研究所。なお、HSP2.61は  2003 を使用して開発しコンパイルされていた説明書「著作権、ライセンスについて」を参照（HSP2.61時点）。

 HSP3の登場 
2005年8月1日にHSP3.0が登場。OSはWindows 98以降が必要になった。文法体系の見直し、Windowsプラットフォームへの親和性の向上などが行われ、一部が従来のHSP2.x系と互換性のない書式に変更された。（詳細は#言語仕様参照）

HSP3.0のリリースから2年後にあたる2007年8月1日にHSP3.1が登場、HSPスクリプトエディタの機能改善や、新規のプラグイン・モジュールなどの追加、Peasエディタやかんたん入力機能によるスクリプト入力補助、Javaランタイム上でHSPを動作させるためのHSPLetの標準サポート、ライセンス形式の改定（BSDライセンス）による仕様やソースコードのオープン化が行われた。

2011年9月13日に登場したHSP3.3では、HSPDishというランタイムパッケージが供給されており、変換によってiOSやAndroid上でプログラムを実行させることができるようになった。また、HSP3のコードを他のソースに変換するためのツールとしてhsp3cnvが同梱され、公式にC++へのコード変換が可能になった。

HSP3の登場から新ポータルサイトHSPTV!が立ち上がりHSP3ユーザーのコミュニケーションの場として提供されている。またHSPTV!で同サイトのCGIプログラマを募集するなどの取り組みも試みられているHSPTV!システムプログラマー募集。
2003年からは毎年HSPプログラムコンテストが開催されており、2013年のコンテストでは「ニコニコ自作ゲームフェス2」との作品の相互提供が行われている。

 特徴 
HSPは手続き型言語であり、中間言語系インタープリタのプログラミングツールとして設計されている。公式に『子供でも理解し易いプログラム言語』を掲げており教育関係者・保護者の皆様へ、低年齢（例えば小学生）向けの解説書も出版されている。

ユーザーがスクリプトの記述や開発環境の設定を行うことなく、自動的にウィンドウの作成や制御が行われる。コンソール版HSP（HSPCL）を用いれば、コマンドプロンプト上で実行するプログラムも開発できる。スクリプトの最後の行が終わるとその時点で実行が停止し、自動的にプログラムが終了しない。

Windowsでの使用を前提としているが、公式にMac OSへの移植をしたHSP/Macも存在する。有志によって非公式的にLinuxにも移植されているが、移植版の場合はWindows版より古いバージョンがベースになっている。ただし、2018年4月1日に、正式にRaspberry PiやLinux対応を謳う、HSP3 for Linux/Raspberry Piが公開され、今後はWindows版もこちらに準拠する旨アナウンスされている。

 言語仕様の特徴 
HSP3.xの（ユーザーが実際に入力する）言語仕様に関する主な特徴として、以下のように挙げられる。
 BASICと似た構文を別名として利用できる。
 行番号は利用しない（できない）。
構文の大文字・小文字を区別しない。
 変数の使用に事前の定義が必要ない（自動的にグローバル変数またはモジュール内定義変数として確保される）。
 変数・ラベルはモジュールという他と隔離された名前空間で分離することができる。
 変数名に日本語（2バイト文字）を利用できる。
 ラベルを使用したサブルーチンの別個記述が可能である。
 DLLをプラグインとして利用することができ、それによってWindowsのさまざまな機能を利用することが出来る。DirectXやOpenGLなどの3Dグラフィックスを扱うものもある。
 プリプロセッサを持つ。
 COMオブジェクトに対応している。

 開発環境 
 スクリプトエディタ 
HSPには専用のスクリプトエディタが付属している。一般的なテキストエディタの機能を有しているほか、コンパイルや外部ツールの呼び出しなど独自の機能も備える。複数のファイルを参照・編集する場合、同一のウインドウ内にタブを用いて表示・切り替えできる。プロジェクトファイルの概念は無い。エディタのエンジンにはFootyが使用されている。

EXE形式で出力できるが、ファイルのアイコン変更は「HSPIC!」や「Sato Icon Changer」等の専用のソフトウェアが必要となる。また、HSP3.5以降(正確には3.5 beta6から)では標準でアイコン書き換え機能が追加され、#packopt命令を利用することによりアイコンを変更できるようになった。

現在の最新バージョンであるHSP3.xのリソースはHSP2.xのリソースとも共通規格でないため、一般的なリソースエディタはもちろんのこと、前記のソフトウェア以外のHSP2.x用に作成された変更ソフトではファイルが壊れてしまう。

コンパイルを行うツールを利用すれば外部エディタでの開発も可能である。

 Peasエディタ 
パーツ（要素）と呼ばれるものをマウスで配置し配線することで、自動的にHSPのスクリプトを生成するためのオーサリングツールである。HSP3.1からHSP3.6まで同梱されていた。HSP3.7β1以降は同梱が廃止された。

今までプログラミングに触れてこなかった人や、初心者にとっての新しい選択肢となるものの、すべての作業をPeasエディタで行なうことは想定していないとしているPeasエディタマニュアル参照（HSP3.3時点）。

なお、パーツはユーザー自身で制作することも可能である。

 HSP Document Library (HDL) 
HSPに同梱された関連ドキュメントを検索・観覧するための専用ブラウザである。ソフトウェア本体はsprocketが開発している。HSP3.0からHSP HELP Browserとして標準で同梱され、HSP3.2より同名称になった。

ドキュメントやサンプルスクリプトを検索し、表示することができる。ユーザー自身で新たなドキュメントを追加することが可能で、独自形式のドキュメントファイルを編集・作成するエディタが付属している。

HDLではhs(HDLのコマンドヘルプ)、html、txt、hsp、as(HSPヘッダファイル)の拡張子が付いたファイルを読み込み・表示することができる。

 言語仕様 

 主な構文 
以下の表はHSP1.x系とHSP2.x系とHSP3.x系との違いである。
項目HSP1.x系HSP2.x系HSP3.x系定数未対応整数、文字列整数、文字列、実数変数の型整数型整数型、文字列型整数型、文字列型、実数型、comobj型、モジュール変数(struct)型、ラベル型、拡張型式の評価演算子の優先度なし、左方優先演算子の優先度あり代入演算子未対応 +=, -=, ++, -- +=, -=, ++, --のほか *=, /= 等、ほぼすべての代入演算子に対応関数未対応対応（標準関数、ユーザー定義関数、拡張関数）マクロ仮対応対応

HSP3.x系では、関数のサポートなど一部が従来のHSP2.x系と互換性のない書式に変更された。これは添付されている互換マクロを利用することで、（関数を#undefとマクロにより命令風に置き換えるなど）一部は擬似的に互換を取ることが可能である。現在は未対応なものの今後、2.x系と同様、演算子の優先度などに関係なく左優先方式にも対応する予定である。ただし、新しく作成する場合はスクリプトの見やすさの面や他の言語との相互互換性,将来性などのこともあり新方式（関数などを利用した方式）で作成することが推奨されている。

HSP1.x系とHSP2.x系では命令中のラベル名にラベル名であることを明示するアスタリスクが省略できる、変数名やラベル名などに半角英数字以外に全角文字が使用できたりといくつかの仕様上の欠陥がある。HSP3.x系ではラベルのアスタリスク省略はできないように修正されている。システム変数はHSP3.x系で一部廃止され、関数やマクロに置き換わっている。HSP3.x系では拡張プラグインにより様々な構文（変数/命令/関数/システム変数など）を拡張できる。ただし、HSP3.0時点では定数の拡張はできない。

 命令リスト  
これは、HSPで使う命令の一例である。
+一般的な通常命令命令意味mes文字列を表示するbutton押しボタンを表示する。押された場合、指定されたラベルにジャンプする。input入力ボックスを表示するpos表示位置を指定するpicload画像を表示する(ver3.31ベータ版よりも前のバージョンの場合、PNG形式はimgloadという拡張命令と  が必要)color色指定（RGB形式で、各要素0～255、十進法で指定）ifもし～ならば～する（分岐命令）font文字列の大きさ・フォントを指定するboxf矩形を描画するrepeatrepeat～loop間の処理を指定回数繰り返すloopgoto指定したラベルにジャンプするgosub指定したラベルに行き、return があると元の gosub の次の行へ戻って実行returnendプログラムを終了するstopプログラムの実行を一時的に中断するtitleタイトルバーに表示する文字列を指定するscreen大きさ、位置などを指定してスクリーンを作る（bgscr命令で枠なしスクリーンも可能）

 コード例 
Linux版HSP3における例
#include "hsp3cl.as"
mes "あいうえお"
stop

外部APIとの連携
HSP は外部DLLライブラリやWindows APIとの連携にも対応している。

それぞれプリプロセッサを使用することで、Windowsのコモンコントロールを使用することができる。
また、それらのコントロールを最初から使用できるようにするモジュールスクリプトもHSP パッケージに標準で同梱されている。

 その他 
一部バージョンにおいて、アンチウィルス製品でマルウェアと誤認識される現象が報告されているHSP ver2.61に対するウィルス誤認識についてHSP ver3.1、ver3.2に対するウィルス誤認識について。

 出典 

 関連書籍 
『はじめてのHSP』 工学社 ISBN 4-87593-289-8
『HSPゲームプログラミング クックブック 2.6』 秀和システム ISBN 4-7980-0495-2
『HSPプログラミング入門 2.55』 秀和システム ISBN 4-7980-0209-7
『HSPプログラミング入門 2.6』 秀和システム ISBN 4-7980-0821-4
『最新HSP3.2プログラミング入門』 秀和システム ISBN 978-4-7980-2432-5
『HSPスクリプトプログラミング逆引きテクニック 2.55』 秀和システム ISBN 4-7980-0186-4
『無料ツールでゲームプログラミング HSP編』 エンターブレイン ISBN 4-7577-1863-2
『12歳からはじめる、わくわくHSPゲームプログラミング教室』 ラトルズ ISBN 4-89977-078-2

 関連項目 
 BASIC
 C言語
 HSPプログラムコンテスト
 3DACE
 野田クリスタル

 外部リンク 
 Hot Soup Processor公式サイト
 HSPプログラムコンテスト
 OpenHSP（オープンソース化されたHSPのWiki）
 GitHubでのリポジトリ （Linux版OpenHSPのソースコードの公開場所）
 びんずめ堂（Linux版HSP(xhsp)がダウンロードできる）
 Let's HSP!  
 CuteHSP（HSPの命令仕様をもとにしたクロスプラットフォームなトイ言語）

HOTSOUPPROCESSOR
HOTSOUPPROCESSOR
Category:1995年のソフトウェア