[net.ai] IQLisp for the IBM-PC

JeffShrager%CMU-CS-A@sri-unix.UUCP (08/02/83)

        A review of IQLisp (by Integral Quality, 1983).

                Compiled by Jeff Shrager
                    CMU Psychology
                      7/27/83

The following comments refer to IQLisp running on an IBM-PC XT/256K
(you tell IQLisp the host machine's memory size at startup).  I spent
two two-hour (approximately) sessions with IQLisp just going through
the manual and hacking various features.  Then I tried to implement a
small production system interpreter (which took another three hours).

I. Things that make IQLisp more attractive than other micro Lisp
   systems that I have seen.

  A. The general workspace size is much larger than most due to the
     IBM-PC XT's expanded capacity.  IQLisp can take advantage of the
     increased space and the manual explains in detail how memory
     can be rearranged to take advantage of different programming
     requirements.  (But, see II.G.) (See also, summary.)
  B. The Manual is complete and locally legible. (But see II.D.)
     The internal specifications manual is surprisingly clear and
     complete.
  C. There is a window package. (But the windows aren't implemented
     to scroll under one another so the feature is more-or-less
     useless.)
  D. There is a macro facility.  This feature is important to both
     speed and eventual implementation of a compiler. (But see II.B.)
     Note that the manual teaches the "correct" way to write
     fexprs -- i.e., with macros.
  E. It uses the 8087 FP coprocessor if one exists. (But see II.A.)
  F. Integer bignums are supported.
  G. Arrays are supported for various data types.
  H. It has good "simple" I/O facilities.
     1. Function key support.
     2. Single keystroke input.
     3. Read macros. (No print macros?)
     4. A (marginal) window facility.
     5. Multiple streams.
  I. The development package is a useful programming tool.
     1. Error recovery tools are well designed.
     2. A complete structure editor is provided. (But, see II.I.)
     3. Many useful macros are included (e.g, backquote).
  J. It seems to be reasonably fast.  (See summary.)
  K. Stack frame hacking functions are provided which permit error
     control and evaluations in different contexts. (But, see II.H.)
  L. There is a clean interface to DOS.  (The "DIR" function is
     especially useful and cleverly implemented.)


II. Negative aspects of IQLisp.  (* Things marked with a "*" indicate
    important deficiencies.)

**A. There is no compiler!
 *B. Floating point is not supported without the 8087.  One would
     think that some sort of even very slow FP would be provided.
 *C. Casing is completely backwards.  Uppercase is demanded by IQLisp
     which forces one to put on shift lock (in a bad place on the IBM
     PC).  If any case dependency is implemented it should be the
     opposite (i.e., demand lower case) but case sensitivity should
     be switch controllable -- and default OFF!
 *D. The manual is poorly organized.  It is very difficult to find
     a particular topic since there are no complete indexes and the
     topics are split over several different sections.
  E. Error recovery is sometimes poor.  I have had three or four
     occasions to reboot the PC because IQLisp had gone to lunch.
     Once this was because the 8087 was not present and I had told
     the system that it was.  I don't know what caused the other
     problems.
  F. The file system supports only sequential files.
  G. The stack is fixed at 64K maximum which isn't very much and
     permits only about 700 levels of binding-free recursion.
  H. No new features of larger Lisp systems are provided.  For
     example: closures, flavors, etc.  This is really not a
     reasonable complaint since we're talking 256K here.
  I. There is no screen editor for functions.


III. Summary.

I was disappointed by IQLisp but perhaps this is because I am still
dreaming of having a Lisp machine for under $5,000.  IQ has obviously
put a very large amount of effort into the system and its
documentation (the latter being at least as important as the former).

Although one does not have all the functionality of a Lisp machine in
IQLisp (or even nearly so) I think that they have done an admirable
job within the constraints of the IBM-PC.  Some of the features are
overkill (e.g, the window system which is pretty worthless in the way
provided and in a non-graphics environment.)

My production system was not the model of efficient PS hacking.  It
was not meant to be.  I wanted to see how IQLisp compared with our
Vax VMS Franz system.  I didn't use a RETE net or efficient memory
organization.  IQ didn't do very well against even a heavily loaded
Vax (also interpreted lisp code). The main problem was space, not
speed.  This is to be expected on a machine without virtual memory.
Since there are no indexed file capabilities in IQLisp, the user is
strictly limited by the available core memory. I think that it's
going to be some time before we can do interesting AI with a micro.
However, (1) I think that I could have rewritten my production system
to be much more efficient in both space and time.  It may have run
acceptably with some careful tuning (what do you want for three
hours!?). And (2) we are going to try to use the system in the near
future for some human-computer interaction experiments -- as a
single-subject workstation for learning Lisp.  I see no reason that
it should not perform acceptably in domains which are less
information intensive than AI.

The starred (*) items in section II above are major stumbling blocks
to using IQLisp in general.  Of these, it is the lack of a Lisp
compiler which stops me from recommending it to everyone.  I expect
that this will be corrected in the near future because they have all
the required underpinnings (macros, assembly interface, etc).  Why
don't people just write a simple little lisp system and a whizzy
compiler?