[Haskell-cafe] Is lazyness make big difference?

Nick nick.linker at rambler.ru
Thu Feb 15 07:37:58 EST 2007


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070215/e3dcfbe2/attachment.htm


More information about the Haskell-Cafe mailing list