Closed umajho closed 1 year ago
@dicexp/executing
中只考虑软性时间限制,硬性的则由管理 worker 的地方处理。concretize
算一步,并按是否已经记忆化划分。
1000#1
这样也可以很耗时。)concretize
调用次数” 差不多,故略去。除此之外,还可以对结果包含的值的数量做限制。
已在 https://github.com/umajho/dicexp/commit/5459b51fcc2cc0747c2be5d3db9f1e980be9b71e 完成支持部分软性的限制,硬性的时间限制则需要等实现用 WebWorker 执行表达式。
决定不限制总步骤数和最大深度,改而允许限制总计调用次数。(软性的时间限制也在统计调用次数途中检查。)
可以考虑的限制有:
有些操作比较昂贵(比如引入
bigint
后的指数操作,不会止步于无限),判断是否超出限制时应该注意切成多块。限制时间:表达式在 worker 中求值,超时时尝试软性中断(在中断处造成 RuntimeError,用以溯源),没有响应则硬性中断(步骤全无,只剩一个 RuntimeError)。