检查器递归深度: 含有 ~10k 级别的有效程序(例如 10000n 字面)会出现"机器栈溢出"错误
作者: docxology创建于 2026年9月18日更新于 2026年9月18日
你所做的一切 # # What you did
# 点燃.bend #
导入基数
daf 主( ) - > 纳特:
10000n( 百万吨)`bend little.bend' (同样通过包/节点导入钩)。
发生了什么事#
错误: 机器堆栈溢出( 深层复发, 或字数太大, 无法扩展)- " 5000n " 检查和运行情况良好; " 10000n " (以及超过公布的 " 数量 " 的任何东西)死亡。
- 相同的溢出点击中有效的非文体程序:一个有~4,000相继多块语句的单一def正文失败,而2000个语句的同一程序编译(73s——参见单独的四相编译报告).
因此,检查器实际的名词深度预算是10k 构造器节点/呼叫框,远远低于任何有文件记载的限度,而"MAX SAFE INTEGER"在"parse term num" (bend.ts:2234)中的"守护"是装饰性的:在10k到9e15之间没有任何东西可以扩展.
失败本身被处理( 被RangeError 带一个体面的信息), 因此这是一个强性/ 可用性问题, 而不是崩溃: 有效的程序失败, 其信息不会说字面或构造太深 。
□ 预期
- 使检查器的回转深度预算明确和迭接性能低廉(Nat字形的扩展循环本身是迭接;溢出在检查/正常化时发生在下游)。
- 至少,在违法期间接下溢出,并报告"这个字面/时间太大了(限制~N)".
□版本/系统
- 2.0.5(主@e6676b0)
- 达尔文臂64
内容来源: HigherOrderCO/Bend