haskell - Rust 闭包和 Haskell lambda 有什么区别?

标签 haskell lambda rust closures

<分区>

最近我asked关于如何将一堆具有相同签名的闭包放入 Rust 中的向量中。来自 Haskell 的背景,它似乎有点复杂,每个 Rust 闭包都有自己独特的类型,需要一个特征来表示它们。在 Haskell 中,lambda 由其签名类型化,如果签名相同,则类型相同。

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

最佳答案

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

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

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

关于haskell - Rust 闭包和 Haskell lambda 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036486/

相关文章:

haskell - 返回默认 Prelude> 屏幕 GHC 7.8.3 的 Haskell 程序退出代码的示例实现是什么

haskell - 如何将类型族命名为高阶类函数

c# - 使用 2 个字段对 C# 进行列表排序

rust - 如何在 ARM 嵌入式 Rust 中使用更少的内存进行取模

generics - 定义通用特征时出现未知大小编译错误

performance - 如何在 Haskell 中有效地字节交换二进制数据

performance - Haskell 模式匹配有多快?

lambda - Lisp 方案 : let to lambda

python - 如何使用 lambda 获取列表中过滤项的索引?

generics - 如何限制 Rust 中特征的通用实现?