performance - 为什么使 Vector 成为 Functor、Monad、Applicative、Alternative、Foldable 和 Traversable 实例的函数很慢?

标签 performance haskell

vector 0.8 版的更新日志列出以下带有警告的更改:

Functor, Monad, Applicative, Alternative, Foldable and Traversable instances for boxed vectors (WARNING: they tend to be slow and are only provided for completeness).



有人可以解释为什么会这样吗?它只是类型类特化的正常成本,还是更有趣的东西?

更新:查看一些特定实例,例如:
instance Foldable.Foldable Vector where
  {-# INLINE foldr #-}
  foldr = foldr

其他折叠也是如此。这是否意味着 Vector 的折叠速度很慢?一般情况下?如果不是,是什么让非专业弃牌慢到足以发出警告?

最佳答案

一年半前,我将这些实例的原始集合提交给 Roman,并从那时起一直维护向量实例。 (一旦它们迁移到向量中,我必须从向量实例中删除这些实例,现在只为真正异国情调的东西维护它)。他担心的是,如果人们多态地使用这些实例,那么除非多态函数被内联和单态化,否则使向量融合的规则无法触发。

它们之所以存在,是因为并非地球上的每一段代码都是特定于 Vector 的,即便如此,有时使用通用名称也很好。

这里的慢是相对的。最糟糕的情况是它们的表现与其他任何人的折叠、绑定(bind)等一样,但 Roman 将每一个盒装值视为对个人的侮辱。 :)

关于performance - 为什么使 Vector 成为 Functor、Monad、Applicative、Alternative、Foldable 和 Traversable 实例的函数很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7583403/

相关文章:

javascript - Ember.js 2. 使用嵌套模板会消耗更多 RAM 吗?

java - 使用 VisualJVM 在 Eclipse 中测试 Java 项目的性能

PostgreSQL 12 : performance issue with overlap operator and join on very same table

haskell - 为什么我不能在 ghci 中定义新类型?

haskell - 运算符重载

java - Java Locking 有多贵?

performance - nginx反向代理吞吐量周期性下降,可能是什么原因?

math - haskell中的泰勒级数

haskell - 创建 Haskell 实例声明

parsing - 如何从Haskell中的字符串解析UTCTime类型的时间值?