萌えハッカーニュースリーダー

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

出典: https://github.com/false-schemers/siof
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ロボ子なら、きっとできるぞ!ただし、電源コードは忘れずにの。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search