On Mon, Aug 13, 2007 at 07:35:31PM +0100, Andrew Coppin wrote: > Not related to optimisation, but... is there some switch to warn you if > something gets removed? (Presumably this means you forgot to export > something, or you haven't coded the bit that calls it yet or something.)
-fwarn-unused-binds (included in -Wall) > (I once compiled a program that used the GHC API. The final binary was > several times larger than ghc.exe...) GHC is a particularly bad case because what it does is determined by the settings of a bunch of switches in the configuration data. Of course, GHC isn't smart enough to perform inter-module control flow analysis, so even with -split-objs you'd probably still link most of GHC. >>> I read somewhere that if one funtion returns a tuple, and the caller >>> immediately extracts the values from the tuple, GHC tries to optimise >>> away the tuple - so it's as if the function can just return multiple >>> values at once. Is this true? Does it apply only to tuples, or to all >>> types? >> >> This is called the Constructed Product Return (CPR) analysis, and it >> applies to all types with one constructor (in archaic jargon, product >> types). > > Right. So it doesn't have to have strict fields or anything? Just has to > have exactly one constructor? Yep, CPR is completely independent of strictness, however the returned product must be *new*, since returning an old object by value risks losing sharing (and thus creating large memory leaks). Stefan
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe