[GHC] #9339: last is not a good consumer

GHC ghc-devs at haskell.org
Mon Jul 21 00:21:29 UTC 2014


#9339: last is not a good consumer
-------------------------------------+-------------------------------------
        Reporter:  dfeuer            |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  libraries/base    |                 Version:  7.8.3
        Keywords:                    |  Differential Revisions:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  Runtime           |  Unknown/Multiple
  performance bug                    |              Difficulty:  Unknown
       Test Case:                    |              Blocked By:
        Blocking:                    |         Related Tickets:
-------------------------------------+-------------------------------------
 The profiler indicates that `print $ last [(1::Int)..10^7]` (compiled with
 -O2) allocates around 8*10^8 bytes. Using the Henning Thienemann-inspired
 {{{
 myLast = fromJust . foldr (\x -> Just . maybe x id) Nothing
 }}}
 (based on his code for viewR/unsnoc) reduces allocation by about half at
 the cost of some extra work. What we really want, I believe, is for `last`
 to fuse with the producer in a fashion that allows the Ints to be unboxed,
 eliminating all the allocation. I have no idea if this will fall out of
 the general fusion work planned for 7.9.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9339>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list