[GHC] #12620: Allow the user to prevent floating and CSE
GHC
ghc-devs at haskell.org
Thu Oct 6 09:18:22 UTC 2016
#12620: Allow the user to prevent floating and CSE
-------------------------------------+-------------------------------------
Reporter: nomeata | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #9520, #8457 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by edsko):
But perhaps I misunderstood: yes, marking the ''function type'' as
"oneshot" `Maybe Char -o Sink` would also do the trick. Although I'm not a
fan of calling this "oneshot", or indeed the `-o` notation (borrowed from
linearity). The whole point is that these functions _might_ be executed
more than once; after all, if we were guaranteed that that wouldn't
happen, we wouldn't be hanging on to them and there would be no memory
leak.
But marking that function as "noupdate" or whatever would seem to make
sense; of course, now we can ask the same question as you asked above:
what about
{{{#!hs
foo :: Maybe Char -> Sink
{-# NOUPDATE foo #-}
foo = if <expensive> then f1 else f2
}}}
but I guess this is far less likely to be a problem in practice; how often
do we write something like
{{{#!hs
await >>= if <expensive> then f1 else f2
}}}
I think almost never; this is far more likely
{{{#!hs
await >>= \mi -> if <expensive> then c1 else c2
}}}
and that would be just fine.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12620#comment:28>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list