C++ vs Lisp

Neal Alexander WQEQWEUQY at HOTMAIL.COM
Sat May 17 14:04:51 PDT 2008


Walter Bright wrote:
> An oldie, but some very thought provoking observations on what makes a 
> language productive:
> 
> http://faculty.cs.byu.edu/~irenelg/courses/330/CTM/Resources/C++-vs-Lisp.txt 
> 
It'll be interesting to see where D goes with the functional stuff.

Some nice things i think you should steal from Haskell:


- One of the interesting things about programming/reading haskell code 
is how a function's definition is structured. Each "where" clause is 
like zooming in on a microscope or whatever. Most of the time you can 
just look at the top levels and understand what the function does 
without even looking at the inner definitions. This gives a lot of 
locality to the code.

- Thinking in terms of map/fold/zip/recursion is really a lot nicer than 
manually looping. Once you write code that can deal with 1 instance, it 
pretty much automatically can be applied to multiple sequences without 
any real changes.

- Function composition: (process . reverse . sort) list
vs
process(reverse(sort(list)))

- Partially applied functions

- Good type inference

- The "Maybe" monad provides a clear transport for possible failure. One 
of the nice things about it is how you can force different error 
handling behaviors. Short circuit, Pattern Match exception etc.

- Restricting mutability to the absolute bare minimum helps reason about 
behavior.


D already has the groundwork for the large majority of these features, 
but unfortunately has to rely on template hacks. In my opinion, one of 
the worst problems with D is going through the template system for alot 
of the advanced features (currying, tuples etc). Its not as bad as Boost 
but still.



More information about the Digitalmars-d mailing list