Mas*_*tic 3 optimization haskell real-time immutability ghc
我希望将Haskell用于包含不断变化的重状态的实时应用程序.
当然,状态是不可改变的,因此在每个州的步骤中,我将重新创建一个新的略微改变的状态并丢弃旧状态.在这种情况下,它会变得非常低效,因为我不需要以前的状态.
我经常遇到人们说GHC可以优化那些东西并在内部改变不可变的值,我想确保它会.
可能吗?有没有办法确定GHC是否会通过内部改变价值来优化它?有没有办法强制执行/确保它会?
PS这个优化是否有正式的名称?
GHC本身并不这样做.各种容器库使用称为流融合的技巧,这意味着纯功能代码所暗示的一些副本实际上并未实现 - 但这仍然不是真正的"内部变异",而是将多个操作组合在一起,每个操作都包含一个复制到一个大的操作仍然只有一个副本.
我认为以全自动方式获得真正的"突变优化"并不可行; 一些像Mercury这样的语言声称他们这样做,但我真的不知道它有多好用.
然而,像Haskell这样的好的纯函数语言能够明确地处理可变状态:通过monad.这可能是"无所不能"的IOmonad(有点不赞成,因为你失去了所有ref-transp.保证,但对于实时应用程序这可能是正确的事情),或者是专门的STmonad,其目的是让你使用true可变状态,同时保持程序的外部行为纯粹功能.
如果你采取这种方法,你不仅要确保不会有昂贵的副本,你也可能最终得到更好的代码.因为有时突变只是思考某些问题的正确方法; 如果你在Statemonad中 "假装"使用可变状态,那么即使是真正纯粹功能的代码也会变得更好.
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |