RX0012

领域: 引擎

错误消息

builtins.feml 声明的内置函数数量超过了一个契约集能容纳的上限(上限 %s,在内置函数 %s 处达到)

消息中的 %s 表示引擎抛出错误时填入的具体内容。

小故事

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

文本来自 Rush 引擎的错误目录。