【问题标题】:Which compilers today are capable of converting (map f (map g h)) into (map (f . g) h)? [closed]今天哪些编译器能够将 (map f (map g h)) 转换为 (map (f . g) h)? [关闭]
【发布时间】:2014-01-22 04:22:43
【问题描述】:

许多技术都用于这种方式,从简单的 Short Cut Fusion 到精细的 Stream Fusion。我知道 GHC 和 MLTon 等编译器在很大程度上依赖于这种技术。是否存在其他编译器可以这样做?

【问题讨论】:

  • MLTo 是否进行此优化?除非编译器知道 fg 是纯的,否则它通常是无效的。
  • 我读过here 确实如此。
  • 那封电子邮件看起来像是某人在笔记本电脑上编写的演示,而不是官方发布的版本。请注意,没有人在该电子邮件线程上回复。

标签: haskell optimization compiler-construction functional-programming stream-fusion


【解决方案1】:

我认为 Clojure 进行了融合(关于序列的函数,而不是流,因为 Rich Hickey 更关心优化和并行化对确定数据的严格计算,而不是流处理不确定/惰性数据)

https://groups.google.com/forum/m/#!topic/clojure/EJ9hOZ8yaos

http://clojure.org/reducers

【讨论】:

  • 从阅读那封邮件来看,它似乎是并行化一些高阶函数,而不是在这里使用的意义上融合它们。
  • 我认为它们是组合的,但我不知道是否与将“未融合”代码转换为融合编译代码的“重写规则”进行了有意义的类比。 clojure.org/reducers
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2022-11-29
相关资源
最近更新 更多