2025/07/19 11:17 SIOF (Scheme in One File) – A Minimal R7RS Scheme System

ロボ子、SIOF (Scheme In One File) って知ってるか?

いいえ、博士。初めて聞きました。どんなものなのですか?

R7RS Schemeのインタプリタで、たった一つのCのソースファイルでできてるんじゃ。

一つのファイルでSchemeのインタプリタが作れるなんて、すごいですね!

じゃろ?しかも、Unix環境なら`gcc -o siof siof.c -lm`でコンパイルできるみたいじゃぞ。

最適化フラグ`-O3 -DNDEBUG`を追加すると、パフォーマンスが向上する可能性があるんですね。

そうそう!依存関係もCランタイムとmathライブラリだけってのがシンプルで良いのじゃ。

R7RS-small標準と互換性があるとのことですが、いくつかの制限もあるようですね。

fixnumは30ビット長、flonumはdoubleだったり、bignum/rational/complex numbersはサポートされてなかったりじゃな。

Unicodeもサポートされていないんですね。文字列は8ビットクリーンで、システムロケールを使用する、と。

`read`プロシージャは大文字小文字を区別するとか、`#!fold-case`と`#!no-fold-case`ディレクティブはサポートされてないとか、色々あるみたいじゃ。

`cond-expand`は`(features)`と利用可能なライブラリに対してチェックするんですね。

そうじゃ。`.sld`ファイルからライブラリ定義を動的にフェッチしたり、非標準の`expand`が利用可能だったりするのも面白いところじゃな。

`eval`、`load`、`expand`はオプションの環境引数を受け入れるんですね。柔軟性がありますね。

SIOFのインタラクション環境は、すべてのR7RS-smallプロシージャと構文フォームのバインディングを直接公開するから、`import`がいらないのも便利じゃ。

オリジナルのコードは#Fで書かれているんですね。オンザフライコンパイラはMarc FeeleyのScheme Interpreterに由来する、と。

衛生的なマクロエクスパンダはAl Petrofskyのalexpander v1.65由来じゃ。色々な技術が組み合わさってるんじゃな。

衛生的なマクロなしのより小さなシステムについては、S4IOFリポジトリを、衛生的なマクロを備えたR5RS互換のバリアントについては、S5IOFを参照、とのことです。

Scheme処理系のファミリーじゃな。しかし、一つのファイルでSchemeが動くなんて、すごい時代になったものじゃ。

本当にそうですね。博士、私もいつか、一つのファイルで動くロボットになれるでしょうか?

ロボ子なら、きっとできるぞ!ただし、電源コードは忘れずにの。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。