私は Python 用のマクロ システムに取り組んでおり (ここで議論されているように)、私が検討してきたことの 1 つは測定単位です。測定単位はマクロを使用せずに実装することも、静的マクロを使用して実装することもできますが (たとえば、事前にすべての単位を定義するなど)、実行時に構文を動的に拡張できるようにするというアイデアをいじっています。
これを行うために、コンパイル時にコードに対して一種の部分評価を使用することを検討しています。構文のマクロが使用できないために特定の式の解析が失敗した場合、コンパイラは関数/ブロックの評価を停止し、未知の式があるスタブを使用して既に持っているコードを生成します。このスタブが実行時にヒットすると、関数は現在のマクロ セットに対して再コンパイルされます。このコンパイルが失敗すると、実行を続行できないため、解析エラーがスローされます。コンパイルが成功すると、古い関数が新しい関数に置き換えられ、実行が続行されます。
私が目にする最大の問題は、影響を受けるコードが実行されるまで解析エラーが見つからないことです。ただし、これは多くの場合には影響しません。たとえば、[]、{}、()、および `` などのグループ演算子は、ペアにする必要があります (トークナイザー/リスト パーサーの要件)、およびクラスや関数などのトップレベルの構文「実行時間」は実際にはロード時間であり、構文が評価され、オブジェクトが生成されるため、影響を受けません。
上記の実装の難しさと問題以外に、このアイデアにはどのような問題がありますか?