David Bakhash <cadet@alum.mit.edu> wrote:
+---------------
| This newsgroup will always be frequented by Schemers, many of whom
| prefer Scheme to CL. But when you consider CLOS, the MOP, CL arrays,
| hashtables, vectors, structures (and DEFSTRUCT of course, among other
| great macros), you want to just forget about every other language, not
| just Scheme.
+---------------
MzScheme, the version I Scheme I use most often, has hashtables,
vectors, structures ("define-struct", with single-inheritance like CL
DEFSTRUCT's :INCLUDE), defmacro (in addition to syntax-rules). It also
has a thread system (well-integrated with I/O), a socket library (that
works well with threads), multiple namespaces, a sophisticated module
system ("units with signatures"), and a rich exception-handling system.
Oh, and boxes, weak boxes, & finalization ("will executors"). And regular
expressions, and the "awk" macro from Scsh. Add MrEd, and you get a
portable GUI application tookit (including a small web browser). Add
MysterX for COM/ActiveX (Windows only), and SrPersist (all platforms)
for OBDC connectivity.
Yes, it has only single-dimension arrays, and only a single-inheritance
object system with no MOP. When I need CL arrays or full CLOS, I use CL.
"But it's not Scheme", you say, "cuz that stuff's not in R5RS!" Herein
lies one of the big differences between the two communities: the Common
Lisp folk (at least, the ones in this newsgroup) get *much* more uptight
about Scheme extensions than the Scheme folks themselves do!! In the
Scheme community, if an implementation provides what's in R5RS, so that
R5RS-compliant programs run, then it *is* a "Scheme", no matter how much
(or what) extra stuff it has.
Also, at least as far as getting real work done, the Scheme folks tend
to pick an implementation and stick with it long enough to learn its
quirks & salient points, just as I've heard people say here they do
with CL, too.
Finally, as someone else pointed out, in actual practice neither the
CLTS nor R5RS is enough to get real work done, when "real work" includes
sockets, DBMS bindings, GUIs, and other trappings of modern life.
The really big difference is how *much* the standard "standardizes".
For Scheme, it's very little of the messy stuff; for CL it's much,
much more, but still not everything. In either case, porting a
significant application to a different implementation (of the "same"
language) is likely to be a bit of work -- but not a *huge* amount,
if your abstractions are reasonable.
I carry a Swiss Army Knife in my pocket, and I know where to go
when I need a well-appointed machine shop. I use both at various
times, for (mostly) different things. Why should I have to declare
exclusive allegiance to either of them?
-Rob
-----
Rob Warnock, 31-2-510 rpw3@sgi.com
SGI Network Engineering http://reality.sgi.com/rpw3/
1600 Amphitheatre Pkwy. Phone: 650-933-1673
Mountain View, CA 94043 PP-ASEL-IA