On Thu, Dec 10, 2009 at 4:42 PM, Stephen Tetley <stephen.tetley@gmail.com> wrote:
C'mon Andrew - how about some facts, references?
2009/12/10 Andrew Coppin <andrewcoppin@btinternet.com>:
Which code optimizations?
> 1. Code optimisation becomes radically easier. The compiler can make very
> drastic alterations to your program, and not chance its meaning. (For that
> matter, the programmer can more easily chop the code around too...)
>From a different point of view, whole program compilation gives plenty
of opportunity for re-ordering transformations / optimization - Stalin
(now Stalinvlad) and MLton often generated the fastest code for their
respective (strict, impure) languages Scheme and Standard ML.
Feel free to check the last page of the report here before replying
with the Shootout - (GHC still does pretty well though easily beating
Gambit and Bigloo):
http://docs.lib.purdue.edu/ecetr/367/
Other way round, no?
> 2. Purity leads more or less directly to laziness, which has several
> benefits:
> 2a. Unecessary work can potentially be avoided. (E.g., instead of a functionDidn't someone quote Heinrich Apfelmus in this list in the last week or so:
> for getting the first solution to an equation and a seperate function to
> generate *all* the solutions, you can just write the latter and laziness
> gives you the former by magic.)
>
http://www.haskell.org/pipermail/haskell-cafe/2009-November/069756.html
"Well, it's highly unlikely that algorithms get faster by introducing
laziness. I mean, lazy evaluation means to evaluate only those things
that are really needed and any good algorithm will be formulated in a
way such that the unnecessary things have already been stripped off."
http://apfelmus.nfshost.com/quicksearch.html
> 2b. You can define brand new flow control constructs *inside* the languagePsst, heard about Scheme & call/cc?
> itself. (E.g., in Java, a "for" loop is a built-in language construct. In
> Haskell, "for" is a function in Control.Monad. Just a plain ordinary
> function that anybody could write.)
> 2c. The algorithms for generating data, selecting data and processing dataGranted. But some people have gone quite some way in the strict world, e.g.:
> can be seperated. (Normally you'd have to hard-wire the stopping condition
> into the function that generates the data, but with lazy "infinite" data
> structures, you can seperate it out.)
http://users.info.unicaen.fr/~karczma/arpap/FDPE05/f20-karczmarczuk.pdf