Rust闭包和Haskell lambda有什么区别? [关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust闭包和Haskell lambda有什么区别? [关闭]相关的知识,希望对你有一定的参考价值。

最近我asked关于如何将一堆具有相同签名的闭包放入Rust中的向量中。来自Haskell的背景,看起来有点复杂,Rust封装每个都有自己独特的类型,需要一个特征来代表它们。在Haskell中,lambda是通过其签名键入的,如果签名相同,则类型相同。

Rust闭包和Haskell lambda函数之间是否存在语义差异导致这些差异?

答案

Rust选择使用不同类型有两个性能优势:

  • 编译器可以堆栈分配您关闭的数据(或将其嵌入到包含的数据结构中)
  • 因为它知道闭包在编译时引用了哪个函数,所以它可以静态地调度调用甚至内联调用。

您也可以选择使用Box<Fn>。这会花费堆分配并导致间接调用,但作为交换,每个签名只有一种类型。

以上是关于Rust闭包和Haskell lambda有什么区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Go的闭包看你犯错,Rust却默默帮你排坑

Go的闭包看你犯错,Rust却默默帮你排坑

用 Rust 处理 WebAssembly 中的闭包而不是使用忘记和泄漏内存有啥更好的方法?

从 Rust 调用动态链接的 Haskell 代码

Rust编程语言入门之函数式语言特性:-迭代器和闭包

Haskell - lambda 表达式