Lisp Scheme Part39
■ このスレッドは過去ログ倉庫に格納されています
0579デフォルトの名無しさん
2015/01/01(木) 21:21:12.94ID:BLuAa79y展開のタイミングの話じゃなくて、そのときに見える「環境」について。
R6RS ではライブラリ単位でメタレベルという名の指定を与えてそれを元に分離された環境を作る。
マクロ展開時に見える環境と実行時に見える環境は別物。
でも R6RS 処理系の中でもいくつかのアプローチにわかれてる。
まずひとつは明確に分離せずうやむやにしているタイプ。 実装をあまり読んでないけど sagittarius はこのタイプだと思う。
ふたつめはユーザのメタレベル指定に厳密に従って環境を分離するタイプ。 Larceny などはこれ。
みっつめは環境は分離するがメタレベル指定によってではなくプログラムの内容を見て自動的に決定する方法 (implicit phasing) 。 Chez とかはこのタイプ。
R6RS はメタレベルの解釈について厳密な定義を与えているものの、
レベルの不整合を受入れるような実装があってもよいという逃げ道も書いてあるので、
どの方針を取るか迷いがあるんだと思う。
もしコンパイラマクロやリーダマクロを Scheme に導入するとしたら更なる混迷の渦がまきおこるに違いない。
■ このスレッドは過去ログ倉庫に格納されています