Beginning C++ in FreeBSD

Rahul Siddharthan rsidd at online.fr
Mon Apr 26 02:43:22 PDT 2004


Chris Pressey wrote:
> > A single Greek word for which there isn't an equivalent word in
> > English-- and I mean exact equivalent, including all the possible
> > meanings and nuances that this word can express in the Greek language
> > -- should be enough as an example, right?
> 
> Unfortunately, no, it's not enough.
> 
> A single Greek word for which there isn't an equivalent English word,
> phrase, sentence, paragraph, essay, book, or library would be enough
> though.

Which has very little relevance to programming languages.  Anything
that can be done in one Turing-complete language can be done in
another Turing-complete language.  The trade-off is in development
time ("expressiveness") and running time.

For a long time I've thought that the tradeoff is between ugly,
laborious and fast (C and, in the scientific community, Fortran - ugh)
and elegant, expressive and slow (Python etc).  But now I'm beginning
to play with functional languages like lisp and ML.  Some
implementations of these (cmucl, ocaml) are quite competitive with C
in speed (ocaml can even be faster in some circumstances), while being
orders of magnitude simpler and more elegant, and allowing far fewer
foot-shooting possibilities.  No more hideous hacks to write a
function that can deal with data of any type.  No more memory leaks,
no more segfaults, no more buffer overflows.  And if written in purely
functional style, no "side-effect" bugs.

For example, these languages recognise a particular form of recursion
("tail recursion") that can be optimised into a regular iteration, so
you get the efficiency of a goto with the programming elegance of
recursion.

And you can do things in them in a few lines that seem unthinkable in
C: eg, in ocaml, you can define a discrete derivative of an
unspecified function (a "function of a function") with

  let dx = 1e-10;;
  let deriv f = (fun x -> (f (x +. dx) -. f x) /. dx);;
or, for better accuracy,
  let deriv f = (fun x -> (f(x +. (dx/.2.0)) -. f(x -. (dx/.2.0))) /. dx);;

Then you can get a pretty good approximation of, say, sin' (=cos):

  let sin' = deriv sin ;;
  sin' 0.7854 ;;
- : float = 0.707105485275860701
  cos 0.7854 ;;
- : float = 0.707105482511236283

As for Lisp, its macros seem to have no equivalent in any other
language I can think of.  And a lisp program can basically rewrite
itself (or generate its own functions and execute them), which would
be a hideous hack at best in any other language.

So now I'm wondering: why aren't these languages more popular?  Back
in the 1970s the hardware didn't allow for efficient compilers, so I
can understand that C looked attractive, but that's no longer true.
And these languages are hardly newcomers: ML is nearly as old as C,
while Lisp dates to the 1950s.

Rahul


More information about the freebsd-chat mailing list