[comp.lang.clos] CLOS' popularity

tusveld@nluug.nl (Fred Tusveld) (05/13/91)

Hello,

I have been working on a Esprit project in which we use CLOS.
In presenting our project, we are often asked about actual applications
delivered in CLOS.

Does anyone know of applications written in CLOS that have been delivered?

Another interesting question is : are there signs that CLOS
is gaining industrial acceptance? Some time ago I heard that an industrial CAD
package originally written in C was being ported to CLOS.





Fred Tusveld
ICT
Landdrostlaan 51, 7302 HA Apeldoorn The Netherlands
tel. +31 55 498600
hcsrnd!tusveld@hp4nl.nl
or hcsrnd!tusveld@relay.EU.net

gillett@AI.MIT.EDU (Walter E. Gillett) (05/19/91)

>Does anyone know of applications written in CLOS that have been delivered?

"SitePlanner", a computer-aided engineering (CAE) software package
used in cleaning up hazardous waste sites.  Developed by ConSolve,
Inc., Lexington, MA.

>Another interesting question is : are there signs that CLOS is gaining
>industrial acceptance? Some time ago I heard that an industrial CAD
>package originally written in C was being ported to CLOS.

My impression is that industrial use of LISP/CLOS is largely confined
to research labs and that its use is, if anything, declining.
ConSolve is considering porting SitePlanner to C++ because of problems
with LISP.  Those problems are (in order of importance to us):

1. Performance.  LISP code is always significantly slower than C code,
even if one works hard to optimize it.  The richness of the language
is wonderful for quick development, but makes optimization difficult.
One has to be very disciplined (e.g., using destructive rather than
copying list operations wherever possible) and the language is
sufficiently remote from the machine that it is not always easy to
understand the efficiency tradeoffs of using different constructs.

Another problem is the amount of run-time overhead resulting from
CLOS's flexibility - on-the-fly class and method redefinition, for
example.  This is great for development, but to achieve reasonable
production speed it should be possible to say "OK, I'm finished
developing" and compile a fast, inflexible production image.

2. Isolation from mainstream software tools.  C programmers can use,
for example, the Motif and Open Look GUI toolkits directly.  LISP
programmers either have to build a foreign function call interface to
a C-based application or wait for someone else to provide one.
Foreign function calling is not part of the Common LISP standard
(therefore the resulting interface is not portable across different
LISP implementations), and debugging in a hybrid LISP/C environment is
very difficult.

3. Memory hog.  The base development image for Sun Common LISP takes
14 MB!  While there are tools for reducing delivery image size, the
results are still much larger than a comparable C program.

4. Recruiting.  It's a lot easier to hire C programmers than LISP
programmers.

In short, LISP is a wonderful prototyping tool, but is not viable for
commercial products (with the exception of specialized niches such as
expert systems).  C++ may be less powerful, but it is far more
practical.

jeff@aiai.edinburgh.ac.uk (Jeff Dalton) (05/23/91)

> My impression is that industrial use of LISP/CLOS is largely confined
> to research labs and that its use is, if anything, declining.

That is my impression too.  However, it seems rather strange that
when machines are becomming so much faster and memory so much cheaper
we find people thinking it will be a big win to move from, say, KEE
to ProKappa.  The advanatges of a C-based system are relatively less
than they used to be, I would think.

> ConSolve is considering porting SitePlanner to C++ because of problems
> with LISP.  Those problems are (in order of importance to us):
>
> 1. Performance.  LISP code is always significantly slower than C code,
> even if one works hard to optimize it.

I have encountered a number of cases where Lisp code was faster than C
or just as fast, but perhaps they are too exceptional.

There are also cases where Lisp is slower for no good reason, so
far as I could tell.

So I think there is room for Lisp to do better here, at least for
some applications, and I'd be interested in knowing what cases Lisp
handles poorly.  The various Lisp implementors may be interested too.

> 2. Isolation from mainstream software tools.  C programmers can use,
> for example, the Motif and Open Look GUI toolkits directly.  LISP
> programmers either have to build a foreign function call interface to
> a C-based application or wait for someone else to provide one.

The interface to such tools is simple in some implementations.
However, you are right that the implementors have to prepare the
ground for you and that your code will be at least somewhat
implementation-dependent.

An approach that works well for some applications is have the graphics
code written in C but running in a separate process connected to Lisp
by a pipe.  Windows, menus, etc are represented on the Lisp side by a
"handle" such as, perhaps, a string like "window-1".  Although there
isn't any standard way to make such a pipe connection, it's fairly
easy to do it in most Lisps.

> 3. Memory hog.  The base development image for Sun Common LISP takes
> 14 MB!  While there are tools for reducing delivery image size, the
> results are still much larger than a comparable C program.

This is indeed a major pain.

-- jd

kanderso@BBN.COM (05/23/91)

  Errors-To: commonloops-request@cis.ohio-state.edu
  Sender: commonloops-request@cis.ohio-state.edu
  Date: Wed, 22 May 91 21:15:01 BST
  From: Jeff Dalton <jeff@aiai.edinburgh.ac.uk>
  Subject: Re: CLOS' popularity
  To: "Walter E. Gillett" <gillett@ai.mit.edu>,
      tusveld <tusveld@cis.ohio-state.edu>
  Cc: commonloops@cis.ohio-state.edu, gillett@ai.mit.edu,
      gillett <gillett@cis.ohio-state.edu>

  > My impression is that industrial use of LISP/CLOS is largely confined
  > to research labs and that its use is, if anything, declining.

There are certainly older Flavor based systems in industrial use.  For
example, ALCOA has several Flavor based applications in their plants.

  That is my impression too.  However, it seems rather strange that
  when machines are becomming so much faster and memory so much cheaper
  we find people thinking it will be a big win to move from, say, KEE
  to ProKappa.  The advanatges of a C-based system are relatively less
  than they used to be, I would think.

Yes, from what i've read ProKappa sounds like a cleverly disguised LISP in
C clothing.  This certainly may have some marketing advantages these days,
but who knows about technical.  As time goes on, it may be that C looks at
lot more like LISP.  For example, garbage collection is a major issue in
C++ these days.

  > ConSolve is considering porting SitePlanner to C++ because of problems
  > with LISP.  Those problems are (in order of importance to us):
  >
  > 1. Performance.  LISP code is always significantly slower than C code,
  > even if one works hard to optimize it.

  I have encountered a number of cases where Lisp code was faster than C
  or just as fast, but perhaps they are too exceptional.

  There are also cases where Lisp is slower for no good reason, so
  far as I could tell.

  So I think there is room for Lisp to do better here, at least for
  some applications, and I'd be interested in knowing what cases Lisp
  handles poorly.  The various Lisp implementors may be interested too.

I'd be interested too.  Certainly vendors have worried a lot about fixnum
arithmetic, etc.  Unfortunately, in certain implementation LISP will loose
over C.  For example, in some implementations of floating point numbers it
is hard not to cons unnecessary floats.  It is also unfortuantely quite
easy to write very slow programs in LISP that you would never think of
writing in C.  One example is (reduce #'+ (mapcar ...)).

  > 2. Isolation from mainstream software tools.  C programmers can use,
  > for example, the Motif and Open Look GUI toolkits directly.  LISP
  > programmers either have to build a foreign function call interface to
  > a C-based application or wait for someone else to provide one.

But the foreign function interface is a good way to get to this
"mainstream" software.  If you thought about it, you might be able to write
the interface automatically.  You could even think of LISP as the glue that
holds your C together.  This might give you most of the best of both worlds.

I've only read about programming in C using Motif and Open Look, so correct
me if i'm wrong, but it seems like the first thing they do try to get
around some of the things C is missing - namely lists, keyword arguments,
and closures.  This forces one to program in a style that looks akward to
me.

  The interface to such tools is simple in some implementations.
  However, you are right that the implementors have to prepare the
  ground for you and that your code will be at least somewhat
  implementation-dependent.

  An approach that works well for some applications is have the graphics
  code written in C but running in a separate process connected to Lisp
  by a pipe.  Windows, menus, etc are represented on the Lisp side by a
  "handle" such as, perhaps, a string like "window-1".  Although there
  isn't any standard way to make such a pipe connection, it's fairly
  easy to do it in most Lisps.



  > 3. Memory hog.  The base development image for Sun Common LISP takes
  > 14 MB!  While there are tools for reducing delivery image size, the
  > results are still much larger than a comparable C program.

  This is indeed a major pain.

I think LISP can learn a lot from C, but what is a comparable C program to
Sun Common LISP?  What are we willing to leave out to make it smaller?

k

Rick.Busdiecker@cs.cmu.edu (05/23/91)

In article <16144.9105222015@subnode.aiai.ed.ac.uk> jeff@aiai.edinburgh.ac.uk (Jeff Dalton) writes:

   > ConSolve is considering porting SitePlanner to C++ because of problems
   > with LISP.  Those problems are (in order of importance to us):
   >
   > 1. Performance.  LISP code is always significantly slower than C code,
   > even if one works hard to optimize it.

   I have encountered a number of cases where Lisp code was faster than C
   or just as fast, but perhaps they are too exceptional.

Run-time compilation, in some situations, can be used to great
advantage in demonstrating performance quickly and easily in lisp that
is very difficult to match with C -- like how many C hackers have
really written code that does run-time linking?

   There are also cases where Lisp is slower for no good reason, so
   far as I could tell.

   So I think there is room for Lisp to do better here, at least for
   some applications, and I'd be interested in knowing what cases Lisp
   handles poorly.  The various Lisp implementors may be interested too.

This is a big area of frustration for me.  On the one hand, I feel that I am
constantly encountering this perceived notion that Lisp Is Slower Than C.  On
the other hand, I feel that I have a solid technical basis for claiming that
this notion of relative speed is based on semi-bogus information.  A big
problem is that it is much easier, albeit completely unnecessary, to write
correct, but *wildly* inefficient lisp code.

As a simple case in point, I once knocked more than 50% of the time out of an
commercial application with a typical running time in the 6 to 12 hour range,
by rewriting about a quarter page of code.  The code in question was MAPCARing
over the result of a MAPCAR call where the inner call used a :TEST function
which was in turning calling MAPCAR on the tail of the original list.  None of
this consing was at all necessary!  All of the partial results were `dropped on
the floor', or left for the garbage collector.  I rewrote the code such that it
produced the same result without consing.

I would like to think that this was an extremely uncommon situation, however
after having the opportunity to get up close and personal with a handful of
other large lisp applications, I now realize that extremely careless memory
management is the rule rather than the exception.  I would bet that a company
that *needed* to get their application faster could achieve similar results at
great savings by simply tuning their original application -- even if *only* for
memory management -- rather than recoding in C or C++.  I'm somewhat skeptical,
however, as to whether the typical industrial lisp hacker really understands
the issues involved well enough to do the tuning.

   > 2. Isolation from mainstream software tools.  C programmers can use,
   > for example, the Motif and Open Look GUI toolkits directly.  LISP
   > programmers either have to build a foreign function call interface to
   > a C-based application or wait for someone else to provide one.

   The interface to such tools is simple in some implementations.
   However, you are right that the implementors have to prepare the
   ground for you and that your code will be at least somewhat
   implementation-dependent.

   An approach that works well for some applications is have the graphics
   code written in C but running in a separate process connected to Lisp
   by a pipe.  Windows, menus, etc are represented on the Lisp side by a
   "handle" such as, perhaps, a string like "window-1".  Although there
   isn't any standard way to make such a pipe connection, it's fairly
   easy to do it in most Lisps.

Actually, I think that a good argument can be made that there *is* a portable
way to do this.  Given that having pipes requires having a U*ix operating
system, you can write portable C code, using the pipe-fork-n-exec model, which
starts up a lisp process with it's standard input and output streams tied to
the C program.  At the very least, this gives you portability across:

 - lisp implementations -- the lisp program just starts up normally;
   it can be prevented from accessing /dev/tty and assumed (yes,
   *some* lisp implementation, *could* meet spec and fail to deal with
   this situation -- I don't believe that that implementation exists.)
   to communicate via its standard input and output streams.  The
   reason that this cannot, strictly speaking, be firmly based within
   the Common Lisp standard is that start up and shut down are not
   standardized.  This lack is for good reason, given that the
   concepts don't fit well in, say, a lispm environment.  In any case,
   the assumptions made here about the lisp implementation really are
   quite reasonable.
 - C compilers -- In a U*ix they've all got to be able to generate
   code to make system calls.
 - U*ix implementations -- the assumptions here are that the OS must
   provide pipe(2), fork(2) and some form of exec such as execve(2).


The other thing that I hope will help to turn this situation around is
Python (Rob MacLachlan [CMU Common Lisp group]) and its presumeably
forthcoming commercial descendents.  Lisp compilers are now truly
coming of age, finally providing functionality (like source level
debugging support) that C hackers take for granted, and in addition
taking advantage of state-of-the-art optimization techniques to crank
out some truly tight code.  They might not actually eliminate
completely bogus consing (?), but they are getting to where they can
point you right at the places that are doing it.

I really think that moving from Lisp to C is a wrong approach, but I
agree that for the most part, industry appears to be moving in that
direction.
--
Rick.Busdiecker@CS.CMU.EDU
``Now, what I contend is that my body is my own, at least I have always so
  regarded it.  If I do harm through my experimenting with it, it is I who
  suffer, not the state.    - Samuel Langhorne Clemens (a.k.a. Mark Twain)

mthome@BBN.COM (Mike Thome) (05/24/91)

>>> 3. Memory hog.  The base development image for Sun Common LISP takes
>>> 14 MB!  While there are tools for reducing delivery image size, the
>>> results are still much larger than a comparable C program.

>> This is indeed a major pain.

>I think LISP can learn a lot from C, but what is a comparable C program to
>Sun Common LISP?  What are we willing to leave out to make it smaller?

How about Saber's C++ development environment?  After all, you get a
great deal in that 14 MB: i.e. compiler, interpreter, and debugger as
well as the standard lisp "runtime library".  So how much different is
this from a C++ environment?  Well, on my local Sun 4: hello.c
compiles to about 24K... But lets be fair and count the shared libc.a
(at 500K).  Now for the rest of a C++ environment: g++ (160K), cc1plus
(2608K), asparc (280K), ld++ (232K), gdb (1120K), make (312K), and
libg++.a (> 1024K).  Sum 'em up and: 6260K without an interpreter.
Now 1/2 the equivalent minimum size isn't bad, and you would still end
up with a 24K binary (+ however much of the 500K lib needed to run),
but we are most certainly not seeing (the commonly perceived) several
orders of magnitude of difference between *truly* comparable C and
Lisp programs.

cheers,
	-mik (mthome@bbn.com)

duff@starbase.mitre.org (David A. Duff) (05/24/91)

In <9105231427.AA09586@cheops.cis.ohio-state.edu> kanderso@BBN.COM writes:
>Yes, from what i've read ProKappa sounds like a cleverly disguised LISP in
>C clothing.  This certainly may have some marketing advantages these days,
>but who knows about technical.  As time goes on, it may be that C looks at
>lot more like LISP.  For example, garbage collection is a major issue in
>C++ these days.

have you seen any of the interactive c environments such as sabre c?  prokappa
is to sabre c roughly as kee was to lucid lisp.

saber c gives you a little bit of lispish stuff, such as the ability to
redefine functions on the fly, a debugger, the ability to inspect objects, the
ability to freely mix compiled and interpretted code.  it does this at a
price, however - it seems to me to be a much worse memory hog than lisp is.
of course, the advantage is that when you're done developing, you can leave
the saber environment behind and run in pure c.

>  > 2. Isolation from mainstream software tools.  C programmers can use,
>  > for example, the Motif and Open Look GUI toolkits directly.  LISP
>  > programmers either have to build a foreign function call interface to
>  > a C-based application or wait for someone else to provide one.

>But the foreign function interface is a good way to get to this
>"mainstream" software.  If you thought about it, you might be able to write
>the interface automatically.  You could even think of LISP as the glue that
>holds your C together.  This might give you most of the best of both worlds.

yes, i have done a considerable amount of development with lisp in this mode
(lisp as glue).  one useful mechanism i have found for doing this is using the
RPC protocol.  unfortunately, there doesn't seem to be a good publicly
available implementation of a lisp/rpc interface.  i have hacked together some
of the client-side stuff myself in a not-too-portable fashion (i use the
foreign-function inteface and load a lot of object code from system libraries
rather than writing all the way down to the lowest levels in lisp).  ...but it
works pretty well for the several systems i've used it on.

dave duff                   mitre corporation               703-883-7731
duff@ai.mitre.org          ai technical center            mclean, va usa
-- 
dave duff                   mitre corporation               703-883-7731
duff@ai.mitre.org          ai technical center            mclean, va usa

larry@tweety.Berkeley.EDU (Larry Rowe) (05/24/91)

I don't like to get into these arguments but sometimes I can't
resist...

The difference between Saber C++ and Lisp is that it takes
me a couple of minutes to recompile the production system
and I'm guaranteed that it will be *much* smaller.

I agree that more sophisticated performance tuning can often
substantially improve the space performance of Lisp, but the
problem is it takes a 4-star guru and lots of time, both of
which are scarce.

Now let's get real.  You own a $500K house and you're about
to develop a new product for your very own company.  Would you
bet your house on your ability to produce a *competitive* product
using Lisp?  I.e., if you have a product that no one buys, you
lose your house.  That's a big risk and most people making business
decisions avoid as many risks as they can.  

BTW, don't give me the superior productivity argument (i.e.,
Lisp can produce high function systems rapidly) because I run
on an 8 MB Sparcstation and I'm not going to run a >16MB calendar
program.  Why 8 MB you ask?  No good reason.  But most commercial
companies buy 500 workstations at a time and they can't afford
to by an addition 16 MB for every workstation.
	Larry

tmb@ai.mit.edu (Thomas M. Breuel) (05/25/91)

In article <duff.675023139@starbase> duff@starbase.mitre.org (David A. Duff) writes:
   >But the foreign function interface is a good way to get to this
   >"mainstream" software.  If you thought about it, you might be able to write
   >the interface automatically.  You could even think of LISP as the glue that
   >holds your C together.  This might give you most of the best of both worlds.

   yes, i have done a considerable amount of development with lisp in this mode
   (lisp as glue).

Unfortunately, among system programming languages, C is the least
suitable for interfacing with other languages. The main reason is C's
unfortunate confusion of arrays and pointers. ANSI C has now at least
opened the door to letting you view "pointers" as "displaced-to
arrays", but it will probably be a long time (if ever) until C vendors
catch on to the fact that the information of what range a pointer is
valid over should be kept at runtime, both for better error detection,
and to allow better interfacing with other languages.

						Thomas.

davis@barbes.ilog.fr (Harley Davis) (05/27/91)

In article <42236@ucbvax.BERKELEY.EDU> larry@tweety.Berkeley.EDU (Larry Rowe) writes:

   Now let's get real.  You own a $500K house and you're about
   to develop a new product for your very own company.  Would you
   bet your house on your ability to produce a *competitive* product
   using Lisp?

Yes.

   I.e., if you have a product that no one buys, you
   lose your house.  That's a big risk and most people making business
   decisions avoid as many risks as they can.

Fortunately, they're buying it.

   BTW, don't give me the superior productivity argument (i.e.,
   Lisp can produce high function systems rapidly) because I run
   on an 8 MB Sparcstation and I'm not going to run a >16MB calendar
   program.  Why 8 MB you ask?  No good reason.  But most commercial
   companies buy 500 workstations at a time and they can't afford
   to by an addition 16 MB for every workstation.

And they shouldn't have to, and they don't.

-- Harley Davis
--
------------------------------------------------------------------------------
nom: Harley Davis			ILOG S.A.
net: davis@ilog.fr			2 Avenue Gallie'ni, BP 85
tel: (33 1) 46 63 66 66			94253 Gentilly Cedex, France

ram+@cs.cmu.edu (Rob MacLachlan) (05/28/91)

I'd like to point out that (at least in the original message) there was more
substance to this thread than "C good, Lisp bad".  Pretty much everyone who is
starting a large new Lisp system is using CLOS, so the real question is "when
is programming in Common Lisp appropriate?"

>From: gillett@AI.MIT.EDU (Walter E. Gillett)
>Subject: CLOS' popularity
>Date: 18 May 91 18:33:59 GMT
>
>"SitePlanner", a computer-aided engineering (CAE) software package used in
>cleaning up hazardous waste sites.  My impression is that industrial use of
>LISP/CLOS is largely confined to research labs [...]  ConSolve is considering
>porting SitePlanner to C++ because of problems with LISP.  [The usual Lisp
>problems...]
>
>In short, LISP is a wonderful prototyping tool, but is not viable for
>commercial products (with the exception of specialized niches such as
>expert systems).

I am a Lisp implementor, and a Lisp advocate, but I think a lot of damage has
been done by advocating Lisp as being:
    "The same as FORTRAN/C/Ada, only better". 

Many of Lisp's efficiency problems can be (and are being) greatly reduced
through improved compilers, tuning, delivery and foreign interface tools, but
as it stands today, given realistic Lisp and C programs that implement the same
algorithm, the C program is guaranteed to be somewhat faster (1.5x to 3x) and
much smaller (2x to 5x).

C's problems with incremental development, debugging and prototyping can be
(and are being) reduced in sophisticated C programming environments such as
Saber C, but as it stands today, Lisp prototyping environments have more
functionality and are more cost-effective than comparable C prototyping
environments.

In addition to these contemporary (but subject to change) differences between
Lisp and C programming environments, there is also the inherent difference
between high-level and low-level programming.  In high-level programming, you
use (and reuse) powerful operations that are very distant from the hardware
implementation.  In low-level programming, the hardware implementation is
obvious.  You can program at different levels in any language, but Lisp
encourages high-level programming, and C excels at low-level programming.

Many of the advantages (and disadvantages) of Lisp are exactly the advantages
(and disadvantages) of high-level programming.  High-level programming is
easier, but produces a less efficient result.

The place where Lisp delivers its benefits is in the pre-production parts of
research and development.  Lisp is very appropriate in research labs, and is
also generally effective for rapid prototyping.  Programs that are long-lived
(subject to much evolution), but that are sold in small volumes for very high
prices may also gain significant benefits during their long maintenance phase.

The question key is:
  "When can a company get away with releasing a product written in Lisp?"

I think that the answer is basically "when there is no competition."  This is
not as restrictive as it might seem; because Lisp excels at rapid development,
it is easy for a Lisp program to be the first to market.  But in order to hold
onto market share after the first couple of years, the company must either:
 -- Continue to add useful functionality to the Lisp program, maintaining a
    powerful technological advantage, or
 -- Reimplement a production version, probably in a lower-level language.

The other way in which there may be no competition is under contract.  If
someone needs a very specialized program, they won't be able to buy it in a
competitive market.  Instead, they will have to take bids to develop the
program.  In this situation, the customer is forced to directly pay development
costs; if you program using an environment that reduces development costs, you
can come in with a lower bid.

  Robert A. MacLachlan

shebs@Apple.COM (Stan Shebs) (05/30/91)

Kudos to Rob for an incisive description of C vs Lisp issues!

In article <1991May28.033548.26907@cs.cmu.edu> ram+@cs.cmu.edu (Rob MacLachlan) writes:

>Lisp and C programming environments, there is also the inherent difference
>between high-level and low-level programming.  In high-level programming, you
>use (and reuse) powerful operations that are very distant from the hardware
>implementation.  In low-level programming, the hardware implementation is
>obvious.  You can program at different levels in any language, but Lisp
>encourages high-level programming, and C excels at low-level programming.

An observation: it's easier to push *up* from a base language than *down*.

Experienced C programmers will, over time, develop large libraries of high
level functionality for their programs.  Extension can be done by using
those libraries, optimization by replacing the implementations of those
functions with better versions.  (Amusingly, the extensions often look like
re-implementations of Lisp.)

Experienced Lisp programmers, however, start out high-level, and build
even higher-level functionality, but have a terrible time trying to
optimize the lower-level machinery that limits performance.  It's very
frustrating to look straight at a piece of list structure and ask "you
are a temporary list of known length, why is the system giving you the
red carpet treatment in non-ephemeral space?", all the time knowing that
if you had done this in C, you could stack-allocate an array and know
that nearly every C compiler was going to give you reasonable code.

Admittedly, my view of C is somewhat idealized, since bugs do run rampant
in those bits of optimized low-level functionality...

While we're on the subject, has anybody looked seriously at how well CLOS
might compile into C or C++ (for instance, via PCL/KCL)?

						Stan Shebs
						Apple ATG System Software
						shebs@apple.com

tmb@ai.mit.edu (Thomas M. Breuel) (05/30/91)

In article <13715@goofy.Apple.COM> shebs@Apple.COM (Stan Shebs) writes:
   An observation: it's easier to push *up* from a base language than *down*.
   [...]
   Experienced Lisp programmers, however, start out high-level, and build
   even higher-level functionality, but have a terrible time trying to
   optimize the lower-level machinery that limits performance.

That's not entirely true. Sure, the most commonly used Lisp dialects,
CommonLisp and Scheme, were poorly designed from the point of view of
being able to specify low-level optimizations. However, this is not
an inherent problem with Lisp. Individual implementations of Lisp dialects,
like T and AKCL, let you hand-optimize down to the machine level. The
only problem is that the necessary language constructs are not part
of any standard.

					Thomas.

jeff@aiai.ed.ac.uk (Jeff Dalton) (05/30/91)

In article <1991May28.033548.26907@cs.cmu.edu> ram+@cs.cmu.edu (Rob MacLachlan) writes:

>I am a Lisp implementor, and a Lisp advocate, but I think a lot of damage has
>been done by advocating Lisp as being:
>    "The same as FORTRAN/C/Ada, only better". 

I agree with much of what you say.  It's a mistake to try to compete
with FORTRAN/C/Ada on every front.  We should emhasise Lisp's strengths
rather than its weaknesses.  Lisp is higher level, and "many of the
advantages (and disadvantages) of Lisp are exactly the advantages
(and disadvantages) of high-level programming."

However, I think a lot of damage has been done by saying that Lisp
shouldn't try to be like C, even though I agree that it shouldn't.
It too often functions as a reason for failing to fix problems that
should be fixed.

For years, I have been hearing that it doesn't matter that Lisp
requires vast amounts of memory, because menory is so cheap.  For
years, I have been hearing that it doesn't matter that Lisp is
so poor at delivering applications because it's so great at
development.

I still don't have a machine that's big enough to run the big Common
Lisp implementations together with their programming environments
unless I use a machine that I share with many other users and so make
it much less useful for them.  

No matter how good the development environments are, they don't help
me unless I can run them.  And the C tools I can use aren't as bad as
some people seem to think.  In a cost benefit analysis, C often comes
out ahead even without considering such things as Sabre C.

There are a number of other cases where C again comes out ahead.
If I want to write a program that uses the X Window System in
interesting ways, it's often a choice between writing it in C
and being able to run it or writing it in Lisp and watching
it page.  (A possible compromise is to use C for the graphics
part.)  I often write little programs, and I'd like to write them 
in Lisp.  Buf if, for example, I want to write a Unix command,
I shouldn't write it in Common Lisp, because the runtime overheads 
are too great.  And so on.

Quite a bit can be accomplished by picking the right implementation,
but it's a pain to end up using several varieties of Scheme and Common
Lisp in order to get reasonable results.  Too many implementations of
Common Lisp seem to have decided that it hardly matters how big they
are, thus leaving many users with too little choice.

It's convenient to think that Lisp will survive as a development
tool while other languages are used for applications.  What may
happen instead is that (a) development tools for other languages
will improve so that Lisp's advanatges are less great, (b) Lisp's
reputation as too big and slow will cause many people to think
it will be faster to start in C rather than switch to it later
on, and (c) as Lisp is used less there will be less incentive to
learn it or teach it.  

A language can be high level without having such problems.  Prolog and
Scheme are examples.  However, in many quarters Lisp is being judged
by the performance of commercial Common Lisp systems, not by what can
be done with Elk or Scheme-to-C.

I will continue ot use Lisp whenever possible.  But I want to use Lisp
in more cases, more of the time, have greater choice and not pay so big 
a price.  I also want it to work better with C (and other languages)
so that I can mix and match.

-- jd

gregor@parc.xerox.com (Gregor Kiczales) (05/30/91)

In article <1991May28.033548.26907@cs.cmu.edu> ram+@cs.cmu.edu (Rob MacLachlan) writes:

   From: ram+@cs.cmu.edu (Rob MacLachlan)
   Newsgroups: comp.lang.clos
   Date: 28 May 91 03:35:48 GMT

   I am a Lisp implementor, and a Lisp advocate, but I think a lot of damage has
   been done by advocating Lisp as being:
       "The same as FORTRAN/C/Ada, only better". 

I agree with much of what has been said in this thread but would like to
add something as well.  I believe there is a chance for Lisp to succeed
as a commercial language, and moreover as a commercial language used in
delivered systems.  But, before this can happen a number of current
obstacles to using Lisp together with other languages must be resolved.

Here a simple analogy I use when thinking about this.  When you build a
car, or an airplane, or a building, you don't build it out of one single
material, nor do you use one single tool.  (Ford doesn't build cars out
of steel only with screwdrivers only.)  It just wouldn't make sense to
do that.  A car is a complex system, its various parts must satisfy a
variety of goals.  The simple fact is that different materials and
manufacturing techniques do a better job of meeting those different
goals.  While there are a few zealots who argue that everything should
be built out of plastic or ceramics or some other wonder-material, the
common practice is not to do so.

Similarly modern computational systems are large and complex and have
components which must meet a variety of goals.  It doesn't make sense to
try and build all of these parts out of the same substrate.

Take for example a modern photocopier.  The tasks which much be handled
include: real-time control (for the paper path and imaging system),
window-system like UI functionality (for the control panel), signal
processing (for copy quality adjustments) and data logging (for the
billing and fault-prediction system).  There is no reason to believe
that a single programming language, or even a single operating system,
is appropriate for all these tasks.

We need to understand what tasks Lisp is good for and do a better job of
characterizing them.  Then, in order to make it possible for Lisp to be
used as part of larger projects, our job, as technicians, is to try and
work out the technical obstacles to writing large systems using a
variety of languages and libraries.  The job of our marketing
organizations is to try and work out the financial and legal obstacles
to writing large systems this way.

Only when both of these jobs are done will users be free to write
systems in which each individual part can be done using the best tool
for the job.  Until then, users will continue to use a single tool for
the whole job.  As long as they are forced into that kind of situation,
I think its fair to say they will choose C more often than Lisp.

baechler@disuns2.epfl.ch (Emmanuel Baechler) (05/30/91)

In article <4846@skye.ed.ac.uk>, jeff@aiai.ed.ac.uk (Jeff Dalton) writes:
> 

> 
> For years, I have been hearing that it doesn't matter that Lisp
> requires vast amounts of memory, because menory is so cheap.  For
> years, I have been hearing that it doesn't matter that Lisp is
> so poor at delivering applications because it's so great at
> development.

  The amount of memory doesn't matter: memory *IS* really cheap today,
and SparcStations are cheap CL platforms. In addition, they are really
quick at running lisp. They are so quick, that I doubt more and more that
there is a provable speed difference with C (for applications of the same
style). Their environnment remain primitive, compared with a lisp machine,
however they are usable, and much better that the environnments of imperative
languages.

  All the Common Lisp implementations I know are now sold with CLIM, which
allow to generate user interfaces in a much more convenient way than directly
programming X11. And I do not see any reason why it should be necessary do
manipulate directly X11, while much higher level tools are available.

  Finally, Franz Inc (but I guess Lucid too) has a tool to generate standalone
applications, with a minimal lisp kernel, such that the customer do not even
see that its application has been built in Lisp.

> 
> Quite a bit can be accomplished by picking the right implementation,
> but it's a pain to end up using several varieties of Scheme and Common
> Lisp in order to get reasonable results.  Too many implementations of
> Common Lisp seem to have decided that it hardly matters how big they
> are, thus leaving many users with too little choice.
>

  How big is X11, Gnu Emacs, AutoCad, LaTeX? Everybody complain while CL 
looks big, while none does about all our other favorite tools, which are
frequenlty as big, and require quite a lot of memory too.

 
> It's convenient to think that Lisp will survive as a development
> tool while other languages are used for applications.  What may
> happen instead is that (a) development tools for other languages
> will improve so that Lisp's advanatges are less great, (b) Lisp's
> reputation as too big and slow will cause many people to think
> it will be faster to start in C rather than switch to it later
> on, and (c) as Lisp is used less there will be less incentive to
> learn it or teach it.  

Lisp will srurvive both as a research and a developpment langugage,
because its PRACTICAL power and extensibility make easier to do 
sophisticated things: they can be programmed at the level required
by the problem, instead of "putting down" the problem at the level
of the language. The "leading" applications in a few years will be
much more sophisticated than the current ones. They will deal with
diagnosis, scheduling, financial and economic analysis, ICAD and so
on, and these applications are *MUCH* more easily programmed in
a high level language like Common Lisp than C, which is just "the
power of assembly language with the flexiblity of assembly language"
as someone said.

Emmanuel Baechler
baechler@liasun4.epfl.ch
AI Lab.
Ecole polytechnique Federale de Lausanne
MA - Ecublens
1015 Lausane
Switzerland

jeff@aiai.ed.ac.uk (Jeff Dalton) (06/06/91)

In article <1991May30.082921@disuns2.epfl.ch> baechler@disuns2.epfl.ch (Emmanuel Baechler) writes:
>In article <4846@skye.ed.ac.uk>, jeff@aiai.ed.ac.uk (Jeff Dalton) writes:
>>
>> For years, I have been hearing that it doesn't matter that Lisp
>> requires vast amounts of memory, because menory is so cheap.  For
>> years, I have been hearing that it doesn't matter that Lisp is
>> so poor at delivering applications because it's so great at
>> development.
>
>  The amount of memory doesn't matter: memory *IS* really cheap today,
>and SparcStations are cheap CL platforms. In addition, they are really
>quick at running lisp. 

In the paragraph following the one you quote above, I wrote

   I still don't have a machine that's big enough to run the big
   Common Lisp implementations together with their programming
   environments ...

The machine on my desk is a SPARCstation.

The amount of memory does matter.  Still.

>  All the Common Lisp implementations I know are now sold with CLIM

Is CLIM available only commercially?  Or is there some public domain
or nearly public domain version as there was for CLOS, CLX, and CLUE?
If the former, it will be much less useful.  Theer are many people who
can afford KCL + CLX who can't afford one of the commercial Common
Lisps.

>> Quite a bit can be accomplished by picking the right implementation,
>> but it's a pain to end up using several varieties of Scheme and Common
>> Lisp in order to get reasonable results.  Too many implementations of
>> Common Lisp seem to have decided that it hardly matters how big they
>> are, thus leaving many users with too little choice.
>
>  How big is X11, Gnu Emacs, AutoCad, LaTeX? Everybody complain while CL 
>looks big, while none does about all our other favorite tools, which are
>frequenlty as big, and require quite a lot of memory too.

X11, GNU Emacs, and LaTeX all run reasonably well on the machine on
my desk.  I don't happen to use AutoCad.

-- jd

baechler@disuns2.epfl.ch (Emmanuel Baechler) (06/06/91)

 
> 
> In the paragraph following the one you quote above, I wrote
> 
>    I still don't have a machine that's big enough to run the big
>    Common Lisp implementations together with their programming
>    environments ...
> 
> The machine on my desk is a SPARCstation.
> 
> The amount of memory does matter.  Still.
 
  In my lab, we have lisp machines (Symbolics) and SparcStations. My desk
machine is a Symbolics. However, I use suns from time to time, and I read
my mail (and News) on a sun. Their environnment is more primitive than what
you can find on a lispm, but they are fast and I never encountered a
memory problem, neither did any of my colleages who use them for developpment.
All our machines are between 16 and 24 megs, and they work well.
 
 
>  All the Common Lisp implementations I know are now sold with CLIM
> 
> Is CLIM available only commercially?  Or is there some public domain
>
 
I don't know any public domain version, But I don't believe that this will
really harm people: Franz Inc (I guess that it's the same for lucid), has
really interesting academic prices, so I doubt that this is a problem, even
for people in the universities.

 Emmanuel Baechler
 baechler@liasun4.epfl.ch 
 

jeff@aiai.ed.ac.uk (Jeff Dalton) (06/07/91)

In article <1991Jun6.092905@disuns2.epfl.ch> baechler@disuns2.epfl.ch (Emmanuel Baechler) writes:
>> In the paragraph following the one you quote above, I wrote
>> 
>>    I still don't have a machine that's big enough to run the big
>>    Common Lisp implementations together with their programming
>>    environments ...
>> 
>> The machine on my desk is a SPARCstation.

>  In my lab, we have lisp machines (Symbolics) and SparcStations. My desk
>machine is a Symbolics. However, I use suns from time to time, and I read
>my mail (and News) on a sun. Their environnment is more primitive than what
>you can find on a lispm, but they are fast and I never encountered a
>memory problem, neither did any of my colleages who use them for develop-
>ment. All our machines are between 16 and 24 megs, and they work well.

I don't see why we have to disagree.  I am perfectly willing to
believe that one of the large commercial Common Lisps will run well
on a SPARC that has enough memory.  Indeed, that has been my
experience too.  What you could do in return is recognize that
some people don't have enough memory and aren't likely to get
enough more in the near future.  16 Meg is ok sometimes, but
certainly not always.  Using Common Lisp + CLOS + CLX + CLUE,
for example, more than 16 meg seemed to be needed; and that was
before trying anything like a large application.

The plain fact is that a number of people form their opinion of
Common Lisp by trying one of the big commercial CLs on machines
that aren't up to the job -- even though they are reasonably
powerful machines that work fine for a wide range of applications
written in C.  It would be nice if I could point them to a Common
Lisp that would work on their machine.  But I can't.  And, unlike
you, I can't even say "it works for me", because it doesn't.

>>  All the Common Lisp implementations I know are now sold with CLIM
>> 
>> Is CLIM available only commercially?  Or is there some public domain
> 
>I don't know any public domain version, But I don't believe that this will
>really harm people: Franz Inc (I guess that it's the same for lucid), has
>really interesting academic prices, so I doubt that this is a problem, even
>for people in the universities.

Well, it won't harm _some_ people.  I think it helps a lot that PCL
and CLX are free.  If to use CLIM one has to buy Franz Inc CL, that
will be a problem for some people at least in this University.  It
also does nothing for those who want to use some other CL such as
KCL or CMU CL.

-- jd