HQ9+
HQ9+はクリフ・ビッフルによって作られたジョーク向け難解プログラミング言語である。実用言語ではない。
HQ9+は4つの命令だけで構成されており、それらは'H'、'Q'、'9'、'+'という単一の文字で示される。HQ9+はチューリング完全ではなく、プログラミング言語としては不完全であるが、プログラミングの例題としてよく取り上げられるいくつかの問題に対しては極めて効率的である。
仕様
[編集]- Hコマンドは文字列"Hello, world!"を出力する。
- Qコマンドはプログラムのソースコードを出力する(参考:クワイン (プログラミング))。
- 9コマンドは『99 Bottles of Beer』(アメリカの数え歌で、プログラミングの例題でよく利用される)の歌詞を出力する。
- +コマンドはアキュムレータをインクリメント(1だけ増やす)する。
HQ9+のプログラムは、例えば次のようになる。
HHQ+HQ++
このプログラムは"Hello, world! Hello, world! HHQ+HQ++ Hello, world! HHQ+HQ++"と表示し、アキュムレータを三回インクリメントする。
解説
[編集]HQ9+の命令体系は、プログラム初心者や新しいプログラミング言語を学習するプログラマによく利用される例題そのものである。例えば「文字列"Hello, world!"を出力する」という例題は極めて一般的なものであるが、この種の処理を行うことが非常に難しいプログラミング言語も存在する。しかし、HQ9+にとっては極めて容易な問題であり、ただ単に"H"と命令するだけである(というよりも、問題の回答自体が言語仕様に入っている)。また、「自分自身のソースプログラムを出力する」という例題は多くのプログラミング言語にとって最も難しい課題の一つであるが、これもHQ9+にとっては取るに足らない問題である(これも問題を解いているわけではなく、言語仕様に回答が含まれているだけであるが)。
HQ9+のインタプリタを作成することは極めて簡単であるため、多数のHQ9+の処理系が存在する。たとえば、あるインタプリタはPythonによるものであり、作成時間は約5分、サイズはわずか18行である。またある、C言語で記述されたコンパイラはHQ9+のプログラムをCのコードに変換するもので、サイズは約40行である。そしてこのインタプリタはJavaScriptで記述されており、ステップ実行ができる[1]。
HQ9+には入力機能がないため、HQ9+のインタプリタやコンパイラをHQ9+自身で記述することは不可能である。
また、HQ9++と呼ばれる言語も存在する。これはデイビッド・モルガン=マールによって作成されたオブジェクト指向言語で、HQ9+とは下位互換性をもつ。HQ9++には'++'という新しい命令が追加されている。この命令はアキュムレータを2回インクリメントし、さらにオブジェクトのインスタンスを生成する。情報隠蔽の原理に従い、このオブジェクトへのアクセスはできない様になっている。
さらにFizzBuzzを追加したHQ9F+なるものも存在する。