syntax-rulesの実装形式
syntax-rulesを直接実装するのと、er-macro-transformerを実装してその上にsyntax-rulesを乗せるのではどっちが楽ですか?
Twitterより
ホスト言語でsyntax-rulesのマッチと展開を書くにはそこまで複雑なデータ構造や強い組み込み関数がいらないので、erで書くのと労力はあまり変わらないような気がします。
リネーム機構はどちらの実装でも必要ですし。
ホスト言語で書くとerよりもリソースのオーバーヘッドが少ない分有利かな思います。
俺は syntax-rules は複雑過ぎてよく分からなかったから、syntactic-closure を実装して、それを使って er-macro-transformer を実装して、er-macro で SRFI 149 を実装した。
未だに syntax-rules はよく分かってないけど、er-macro が正しく動くなら SRFI 149 参照実装ポン付けが動作する
だから結局、たぶん er-macro で実装するのが楽なんじゃなかろうか派。
どのみち低レベルマクロトランスフォーマは欲しくなるだろうし。
ただ、ホスト言語で直接実装したほうが高速なのは間違いない。
低レベルマクロトランスフォーマの定義がこのファイル。
SRFI 149 は参照実装そのままだけど、Chibi の独自の手続きが使われてるからそれを補う必要がある。 俺は記憶が正しければ 確か sagittarius のコードを参考にしたはず。
(syntax-rulesの実装にsyntax-rulesが使われているケースがある、という話題に対して)
okuoku
午後5:43
個人的には自分のところで使ってるSchemeアプリケーションがHygienicなマクロに依存していないのもあって、Schemeフロントエンドとしては define-macro しかやってないですね。。
ただ、アプリケーション組込とかを考えると、ビルド時にCコンパイラ以外を要求するのはメッチャ分が悪い(e.g. クロスコンパイルが辛い)ので悩みどころです。。実際duktapeにせよQuickJSにせよ組込み処理系ではCソースだけで標準ライブラリも含めて揃うのが普通なので。