更新时间:2023-12-04 16:30:10
看起来像编译器的序列表达式编译机制中的错误。以下是简化的复制形式:
Looks like a bug in the compiler's sequence expression compilation mechanism. Here's a simplified repro:
let rec loop r = seq {
if r > 0 then
let rec unused() = unused()
yield r
yield! loop r
}
printfn "%i" (Seq.nth 10000000 (loop 1))
显然,未使用的递归定义的存在不应该影响是否会产生堆栈溢出,但是会。
Obviously the presence of the unused recursive definition shouldn't affect whether this generates a stack overflow, but it does.