Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Apr 2004 05:43:35 -0400
From:      Rahul Siddharthan <rsidd@online.fr>
To:        Chris Pressey <cpressey@catseye.mine.nu>
Cc:        chat@freebsd.org
Subject:   Re: Beginning C++ in FreeBSD
Message-ID:  <20040426094335.GA7578@online.fr>
In-Reply-To: <20040425215837.3f4708fe.cpressey@catseye.mine.nu>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040426094335.GA7578>