Alan,
Hi,
I think a big advantage is that programs can be written without regard
for whether or not a value will in the long run actually be evaluated.
For me one of the best examples of this is that of logging within a
compiler.
[example goes here]
Now if this is a strict language we have to go and modify all the
intermediate functions to first of all take in a boolean and then use
that to decide whether or not to produce any logging information. With
a lazy language though, we don't need to do that, we're already done,
no logging information will be produced if 'logOrNot' is false,
because it will never be forced to evaluate the thunk.
Yes, I agree, lazy evaluation is important, but unfortunately you didn't
convince me that it should be on *by default*. In strict languages we
usually some facility like macros, and with them we can do everything
like that (and with better performance). Or, we could make the logging
function (called by functions inside convertToIntermediate,
convertToAssembly etc) as lazy (mark them as lazy or change them to lazy
form). For example, Scala again:
/* Lazily compute the logger. The computation will not
start running until the value of 'logger' is actually requested. */
var logger = lazy({ Logging.getLogger() })
/* This will start the computation */
logger.debug("medved")
/* No delay to compute the logger again, as it has already been
calculated */
logger.debug("preved")
According to one guy's analogy: the Real World is strict - in order
to drink tea, you have to put the kettle on the fire, wait until
water boils, brew tea and then drink. Not the kettle is put on the
fire, water boils and the tea is brewed when you take the empty cup
to start drinking. :-)
Yes true, but you don't just boil up the kettle and brew the tea
unless you have first asked if anyone actually wants tea.
Hmm, the analogy is very flexible, and yours argument is also reasonable.
(Oops, yes - kettle should be put on the fire, not cattle :-D)
Best regards,
Nick
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe