我正在为 Python 开发一个宏系统(如此处所讨论的),我一直在考虑的一件事是度量单位。尽管可以在没有宏或通过静态宏(例如提前定义所有单位)的情况下实现度量单位,但我正在玩弄允许在运行时动态扩展语法的想法。
为此,我正在考虑在编译时对代码使用一种部分评估。如果对给定表达式的解析失败,由于其语法的宏不可用,编译器将停止对函数/块的评估,并生成它已经拥有的代码,其中包含未知表达式所在的存根。当此存根在运行时被命中时,该函数将针对当前宏集重新编译。如果此编译失败,将引发解析错误,因为执行无法继续。如果编译成功,新函数将替换旧函数并继续执行。
我看到的最大问题是,在受影响的代码运行之前,您无法找到解析错误。但是,这不会影响很多情况,例如 []、{}、() 和 `` 等组运算符仍然需要配对(我的标记器/列表解析器的要求),以及类和函数等顶级语法不会受到影响,因为它们的“运行时”实际上是加载时间,在那里评估语法并生成它们的对象。
除了实现困难和我上面描述的问题,这个想法还有什么问题?