[Haskell-cafe] Re: Channel9 Interview: What makes imperative programming so difficult

Doaitse Swierstra doaitse at cs.uu.nl
Wed Jan 31 10:34:14 EST 2007


If you ask an "ordinary" programmer what is the effect of an  
assignment like:

x := <expr>

you will get an answer along the lines: the <expr> is evaluated and  
the result is stored in a box named "x".

If you ask him/her whether something else has happened the answer  
will usually be "no"; and this is the wrong answer, since one tends  
to overlook the fact that one has, by mentioning the variable "x",  
also indicated that the old value of "x" is no longer needed. As such  
imperative programming is "functional programming with explicit  
garbage collection".

This may have been a necessity in the old days, when memory was  
scarce and machines slow (in my first course on numeric algorithms we  
were taught to declare the variables x, y, z, n, m, i, and j, and the  
array a, and to solve our problems with those only; points would be  
deducted for making use of more variables, or not reusing whenever  
possible!). Nowadays I think everyone agrees that automatic garbage  
collection is a good thing; think about the amount of wasted  
programmer years of people figuring out where they have space leak,  
etc., and users of programs getting a disappointing feeling about  
computer science as a whole since apparently we keep delivering  
programs that stop to work at unpredictable moments.

So, one might wonder whether assignments are always bad, bringing us  
back to the OO discussion. Of course if we have the following  
expression:

  digest.chew.eat.serve.cook.chop.pluck.kill $ chicken

we all have a definite feeling that after applying the functions, the  
original object is no longer available, and the FP view does not feel  
entirely natural.

  Doaitse Swierstra








More information about the Haskell-Cafe mailing list