Best Language Tool

最高の言語ツール

受賞者:Sean Barrett

引用元:https://www.ioccc.org/1992/buzzard.2.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1992/buzzard.2.hint

動作

独自スタックベース言語firstの評価器。次のように使う。

$ gcc -o buzzard.2 buzzard.2.c

$ echo "2 3 + . cr" | cat third - | ./buzzard.2
Welcome to THIRD.
Ok.
5

2 3 + . crがプログラムで、23をスタックにプッシュして、それらを足したものに置き換えて(+)、それを10進数表示して(.)、改行を表示する(cr)という意味。

解説

firstは13命令しかない非常にプリミティブなスタックベース言語で、thirdはそれの標準ライブラリ。 実行するときは、firstインタプリタにまずthirdを食わせて、それからプログラムを食わせる。 thirdのソースコードは難読化されていないので、スタックベースプログラミング言語を知っていればそれなりに読める。 上の例の2とか3とかはすべてthirdが規定している。

firstとかthirdとかいう名前はプログラミング言語FORTHの劣化版みたいなネタ。 secondがないのは、5文字を超えるため(FORTHはもともと「4番目の言語」という意味でfourthと名付けたかったが、当時の開発環境ではファイル名が最大5文字だったのでFORTHになったという逸話がある)。 thirdはforth79と大体同じくらいの機能を備えているとか備えていないとか。

スタックベース言語自体が難読なので、コードの難読化自体にそれほど特筆するところはないと思う。 この年の翌年(1993年)に、現代でも有名な難解プログラミング言語であるBrainfuckBefungeFalseが登場している。 当時そういうブームがあったのかもしれない。