Subject: Re: Java vs lisp (was: Re: Prolog vs. Lisp)
From: Erik Naggum <>
Date: 1997/04/03
Message-ID: <>

* Jason Trenouth
| Java, while admirable in many respects, is a very poor substitute for Common
| Lisp:
| 	no function pointers
| 	no closures
| 	no multiple inheritance
| 	no multiple dispatch
| 	no macros
| 	no arbitrary precision arithmetic (*)
| 	no restarts
| 	no real dynamism (you still have to cast for pity's sake)
| 	etc

at various times, people have been claiming that syntax means nothing, that
all programming languages are Turing equivalent, or that there is value in
repeating similar tautologies, so my take on this is that they all boil
down to an issue of pragmatics, since the arguments translate to "you can,
with some effort, fake everything in one language in every other language".
the issue of pragmatics becomes important only when considering the amount
of work required to implement something that some other language gives you
at much lower cost.  in the final analysis, the same CPU must be executing
a sequence of instructions, taken from the same instruction set, resulting
from compiling any and all the languages out there, but we don't discuss
the merits of machine languages these days.  I guess the _only_ reason is
that people who still argue about how much feature X can be "simulated" in
language L don't really want to take their argument all the way.

* Fergus Henderson
| Function pointers and closures can be simulated without _that_ much
| trouble using interfaces.  Java does allow multiple inheritence of
| interfaces.  Multiple dispatch is also something that can be simulated in
| the language, although probably not as conveniently as in Common Lisp (I
| don't know how Common Lisp handles it).  As you yourself point out,
| arbitrary precision arithmetic can be (and probably has been) done in a
| Java library.

you admit that on the pragmatics scale, Java loses on all these points.

| Yes, you do miss out on macros, but macros have disadvantages as well as
| advantages.

what an amusing argument.

| Is "restarts" a feature of common lisp the language, or is that an
| implementation-specific thing?

restarts are a fundamental part of the Common Lisp condition system.

| If saving and restarting programs were a feature that is strongly in
| demand, then I'm sure some Java implementations would have it soon.

I think it would have added credibility to your argument if you had asked
what a `restart' in Common Lisp is.

| There is also no doubt a list that is probably about as long as the one
| above of things that you can do in Java but not in common lisp.

really?  you know, it's kinda hard to believe you're the right person to
say that after your above stunt with restarts.  how about _supplying_ this
list if it "no doubt" exists?  in the face of one _actual_ list, where your
response is that users have to _simulate_ the features in Java, hand-waving
"no doubt" about a similar list the other way is pretty lame.  but since
this is posted to, what's to expect?  *sigh*

I'm no longer young enough to know everything.