オースティン・ヘンリーは、制約を課しました:Cで1024バイト以内にPythonインタープリタを書き、宏もライブラリも使用しない。結果は、まるで親しみやすい構文を持つPythonのような形をした電卓ですが、実態はPythonの実装というよりはむしろそう見せかけたものです。

Terminal showing byte count verification, compilation, and fizzbuzz output from the 1024-byte interpreter
The 1024-byte interpreter compiles and runs fizzbuzz successfullyaustinhenley.com

A terminal screenshot captures the full workflow: checking that the golfed C file is exactly 1024 bytes, compiling it with gcc, and executing fizzbuzz to demonstrate the interpreter produces correct output.

このインタープリタは、固定の999文字のソースバッファにプログラム全体を保持し、単一文字の小文字の変数用の256エントリのシンボルテーブルを持ちます。トークン化はリアルタイムで行われ、空白を削除し、キーワードは正しく入力されていると仮定し、'f'で始まる行はforループ、'w'はwhile、'i'はif、'd'はdef、'p'はprintとみなします。エラー回復機能はなく、入力を正しく扱うという多くの仮定に基づいて動作します。

式は、標準の再帰下降歩行中に解析中に評価されます。制御フローには、Cの呼び出しスタックをネストリングに使用し、インデントが減少するまでブロックが続きます。ループは条件式の位置を記憶し、反復するごとにソースを再解析して開始します。関数は呼び出し元の位置を保存し、呼び出し時に本体にジャンプし、終了時に呼び出し元を復元します。中間表現は生成されません。

機能リストは意図的に短く、単一文字の変数と整数リテラル、代入、+ - * %による算術演算と優先順位、< > <= >= ==による比較(1つにつき1つの比較のみ)、整数の真理値、if/else、while/forのelseブロック付き、無引数関数定義と呼び出し、インデントベースのブロック(スコープなし)、整数または文字列用のprint。

ヘンリーは、Cの golfing に関するStack Overflowの「Tips for golfing in C」スレッドからの技術を駆使して、可読版の4,800バイト超えのバージョンを正確に1024バイトに golfing しました:単一文字の名前、暗黙のint、文字リテラルの代わりにASCII値、ternary演算子とカンマー演算子、論理演算子の代わりにビット演算子。これにより、可読版のソースが1つの濃密なブロックになりました。GitHubには、golfedバージョンと共に可読版が保存されています。

Dense block of golfed C code fitting in exactly 1024 bytes with single-letter names and ternary operators
The complete golfed source code — 1024 bytes of C implementing a Python subsetaustinhenley.com

This screenshot displays the entire minimized C source. Every technique from the Stack Overflow golfing thread is visible: implicit int, ASCII literals, comma and ternary operators, bitwise tricks, and single-character identifiers compressed into one dense block.

このインタープリタは、生産ツールではなくデモです。整った入力であることを仮定し、式につき1つの比較のみサポートし、+ -の単項演算子のみ式先頭で処理できます。ヘンリーは、おそらくfizzbuzzだけでも800バイト以下にできるだろうと述べています。