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