[GHC] #13330: forkIO has inconsistent behavior under optimization
GHC
ghc-devs at haskell.org
Wed Mar 1 08:35:40 UTC 2017
#13330: forkIO has inconsistent behavior under optimization
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.2.1
Component: Core Libraries | Version: 8.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: Other | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D3189
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by simonpj):
* owner: dfeuer => (none)
* status: closed => new
* resolution: fixed =>
Comment:
This is a tricky area so I'd like to be quite sure I understand. Several
things:
* The `$exceptions_and_strictness` note in `GHC/IO.hs` says
> While @test1@ will print "it failed", @test2@ will print "uh oh".
Previously it said that `test2` was unpredictable. Are we saying that
both are now predictable? That's good but why?
* The note does not say that the only difference between `catchException`
and `catch` is that the former is strict in the action. Indeed, it'd be
better to make that point in the doc for `catchException` itself; it's the
''only'' difference between the two.
> Since this strictness is a small optimization and may lead to surprising
results, all of the @catch@ and @handle@ variants offered by
"Control.Exception" use 'catch' rather than 'catchException'.
* But the comment is confusing. If `catchException` is more efficient
(and we might want to say why) should we not use it all the time in the
libraries if we can? What are the "surprising results" that you have in
mind?
* Moreover, specifically what "handle variants" do you have in mind?
`handle` and `handleJust`? But also `catchJust`.
-------------
Finally, does this efficiency matter? What is the nofib perf loss if we
use `catchException = catch`? And if there is some, can we see a poster-
child example so we can really understand when it's important?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13330#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list