-
-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add experimental syntax-rules #327
Conversation
srfi-149は既に組み込みのsyntax-rulesが対応してるので、srfi-149を期待してるコードで問題が起きるようでしたらマクロのバグとして報告してください。 |
それとは別に、Schemeで書かれた代わりのマクロ展開器を走らせようとしてGaucheのバグに当たることがあります。そういうケースでも個別にバグ報告していただけるとありがたいです。 |
<組み込みの syntax-rules > (1) https://github.com/SaitoAtsushi/pattern-match-lambda (2) Gauche の test/macro.scm で、 <今回追加した syntax-rules > (3) Gauche の test/macro.scm で、6件 NG になる。(4件は(2)と同じもの) <一覧>
○ : OK <テスト環境> 次の目標としては、今回追加の syntax-rules で (2)-(c) を通したいと思っています。 |
ありがとうございます。助かります。 マクロシステムをSchemeで書いたものに置き換える予定はありますが、性能のためGaucheの内部情報を利用する形になると思うので、現時点でGaucheにマクロの別実装をバンドルする予定はありません。 compile.scmのfixは検証後いただきます。 |
マクロの別実装について、Gauche本体にバンドルすることはないと思いますが、サードパーティの拡張ライブラリとして使えるものがあるのは歓迎なので、「独立したライブラリとして別マクロ実装をロードした場合に不都合が出る部分」があれば都度レポートしていただけるとマージします。 |
Not sure why I thought the outer construct should be let-syntax. The mdm-foo4 macro is apparently intended to be recursive, thus it should use letrec-syntax. See #327 (comment)
方針については了解です。 |
外部モジュールにしてみました。 |
このfixでpattern-match-lambdaのテストが通るようになりました。 |
こちらの環境でも問題ないことを確認しました。 ソースを見ていて ひとつ気になったのですが、ctx->literals についても、 (i) preprocess_literals で、identifier の場合は wrap せずにそのまま登録 (ii) compile_rule1 の下の方で、id_memq による一致チェック ctx->literals についても ctx->tvars と同様の変更が必要でしょうか? |
うーむ、確かに危ない感じではありますね。リテラルはfree-identifier=?で比較するから、問題が出るとすればマクロで再帰しつつ一回のイテレーションでidentifierに束縛を導入しつつそのidentifierをそれまでのリテラルリストに追加し、さらにそういったリテラルにマッチさせるマクロ呼び出しも生成する、といったコードになるのかな。まずはそのバグを突くテストコードを作ってみる必要がありそうです。 |
新しいissue建てました。 #329 |
実験的に SRFI-149 の syntax-rules を追加してみました。
環境変数 GAUCHE_EXP_SYNTAX_RULES を設定すると、
srfi-149-mod.scm の syntax-rules を使用します。
現状、マージできるレベルではなく、make check で以下のエラーが出ます。
また、環境変数ありで Gauche をビルドしてしまうと、
以後、環境変数なしで Gauche を実行したときにエラーが出たりするようです。。。
ただ、齊藤さんの
https://github.com/SaitoAtsushi/pattern-match-lambda
については、正常に動作するようでした。
デバッグは、compile.scm 等に print を追加して行っていますが、結構つらい感じです。
Sagittarius Scheme のソースのコメントが大変参考になりました。
まずは、make check が正常に終了することを目指してみようと思います。
気になる点等がありましたら、連絡をお願いします。
<テスト環境>
OS : Windows 8.1 (64bit)
Gauche : コミット e541e38 + 変更
開発環境 : MSYS2/MinGW-w64 (64bit) (gcc version 7.1.0 (Rev2, Built by MSYS2 project))