Jan 9, 2024
0
0
F# 中更安全的递归
本篇翻译于David Schaefer的Safer recursion in F#。 这是David Schaefer的客座博客文章。David 是一名专注于函数式编程的自由软件开发人员。他是G-Research开源团队的一员。他致力于改进 F# 开发者工具的生态系统。此外,他还帮助维护各种开源的 F# 项目。 在函数式编程中,用递归的方式去定义算法是很常见的场景。这非常符合我们想要避免突变的心态,而且这通常不会导致性能下降。编译器在优化阶段会尝试将递归定义重写为更高效的循环。 然而,编译器并不总是能够将递归转换为循环。从这里开始,就有一定的危险了。 堆栈帧与生产环境 当我们在函数 f 内部调用函数 g 时,这个操作通常会在进程的调用堆栈上创建一个新的堆栈帧。函数...