错误消息
消息中的 %s 表示引擎抛出错误时填入的具体内容。
小故事
引擎启动时,发现 builtins.feml 里声明的内置函数太多,一个契约集装不下了。我们来算一笔账。执行法则本身,就是一个 tungsten 契约集,每个内置函数在里面占两个位置:一个是它自己的契约,一个是它的 effect 契约。契约集总共能放 W_MAX_CONTRACTS 个成员,所以内置函数的上限,恰好是它的一半。这个数是用同一道算式定义出来的,所以声明的上限和真正执行的上限,永远不会对不上。更重要的是,引擎为什么不悄悄丢掉多出来的行呢?因为一旦丢了,它就会对一个声明里明明白白写着的内置函数说:这个函数不存在。那才是真正的谎言。所以它宁可拒绝诞生。怎么办?要么提高 tungsten 的 W_MAX_CONTRACTS,要么把声明拆分到不止一个契约集里。记住:容量不够,就大声说出来,不要悄悄丢东西。
文本来自 Rush 引擎的错误目录。
