[comp.sys.next] Allegro CL on NeXT

grant@gouche.UUCP (Grant Munsey) (03/20/91)

I am about to start working on a project that will use Soar5 from CMU.
Soar is ~44k lines of Common Lisp code. I would like to use a NeXT
slab w/20mb of memory for this work. Is anybody out there using
NeXT and Allegro under NeXT OS 2.0? Is the complete version of
Allegro 3.1 for Next 2.0 shipping? Does it have any hooks into
NIB/Objective C. Just looking for some confirming evidence that I
would be able to use the NeXT/Allegro combo effectivly. Thanks,
-- 
Grant Munsey, Mainticore, Inc. (408) 733-3838
grant@gouche.portal.com  or  {uunet!opusys,decwrl!apple!portal}!gouche!grant

layer@Franz.COM (Kevin Layer) (03/22/91)

In article <210@gouche.UUCP> grant@gouche.UUCP (Grant Munsey) writes:

   Is the complete version of
   Allegro 3.1 for Next 2.0 shipping? Does it have any hooks into
   NIB/Objective C.

While you want a user's testimony of Allegro CL on the NeXT, I can add
that ACL on the NeXT is complete with respect to ACL 3.1 available on
other machines.  In addition to being complete, there are some nice
additional features of ACL on the NeXT:

1. Due to Mach, running an image created dumplisp (saving the running
   image to disk for later execution in the "same" state) is
   particularly efficient at start because we use the memory mapping
   features of the Mach-O (object) file format.  On non-Mach systems
   we must "shuffle" parts of the heap to their final location instead
   of having them mapped there from the object file itself.

2. Also due to Mach, a foreign file can be reloaded without removing
   the entry points that clash.  So,

	(load "foo.o")
	(load "foo.o")

   will "unmap" foo.o before the second load.

3. There is an interface to Objective-C, which offers the ability to
   dynamically load Objective-C object files into ACL and to define
   Objective-C classes and methods.  Below is an example application,
   which creates a window that reads expressions from the users,
   evaluates the results and prints the *Lisp* results.  There is a
   `nib' file which is not included here (it is on the Allegro CL
   distribution, however).

;; Evaluator
;; A very simple class and set of method definitions which demonstrates
;; the high interactiveness between lisp and an interface built by the
;; interface builder.
;; Written by Charley Cox, Franz Inc. Aug, 1989
;;
;; When this file is loaded into lisp, a window with two text forms,
;; a button, and a sample form cell is brought up.  One can type
;; forms into the input form, and see what lisp returns through the
;; output form.  The output form is not bound to *standard-output*.
;; Thus, *standard-output* will, by default, be the terminal running lisp.
;;
;; Hitting return in the input form is equivalent to clicking on the
;; button (this example is heavily inspired by the sample
;; project in the NeXT chapter on using the interface builder).
;;
;; Some things to play with are to see what happens when you type the
;; following things into lisp:
;; self
;; (break)	;; This enters a lisp break loop--to continue with the
;;		;; application, type `:cont' to the lisp.  Do not type
;;		;; `:res' or (reset) since that throws you out of the
;;		;; application.
;;
;; The following (print-* ...) functions will print to standard output
;; and not to the display window.
;;
;; (print-class-ivars (send self "class"))
;;		;; This should print out the three outlets that were designed
;;		;; by the interface builder.  They are outputForm, inputForm,
;;		;; and testForm.  testForm is for the TestForm Cell.
;; (print-class-methods (send (iv "testForm") "class"))
;;		;; This prints the methods available to the TestForm Cell.
;;		;; One of these methods should be `setEnabled:'.
;; (send (iv "testForm") "setEnabled=" 0)
;;		;; This `dims' the test form cell.  Calling "setEnabled="
;;		;; with argument 1, restores it.
;; (send (iv "testForm") "setStringValue=" (string-to-char* "Hello, There"))
;;		;; This displays the string in TestForm's window.

;; $aclHeader: Evaluator.cl,v 1.1 89/08/28 18:51:30 layer Exp Locker: layer $

(in-package :evaluator)

(require :objc)

(require :foreign)
 
(use-package :excl)
(use-package :objc)
(use-package :appkit)
(use-package :foreign-functions)

(def-objc-class Evaluator (Object)
  ((outputForm :type :id)
   (inputForm :type :id)
   (testForm :type :id)))

(def-objc-method (setOutputForm= Evaluator :id) ((anObject :id))
  (setf (iv "outputForm") anObject)
  self)

(def-objc-method (setInputForm= Evaluator :id) ((anObject :id))
  (setf (iv "inputForm") anObject)
  self)

(def-objc-method (setTestForm= Evaluator :id) ((anObject :id))
  (setf (iv "testForm") anObject)
  self)

(def-objc-method (eval= Evaluator :id) ((sender :id))
  (let* ((raw-input-string (send (iv "inputForm") "stringValue"))
	 (input-string (char*-to-string raw-input-string)))    
    
    (send (iv "inputForm") "selectText=" sender)
    (send (iv "outputForm") 
	  "setStringValue="
	  (string-to-char*
	   (write-to-string
	    (eval
	     (read-from-string input-string)))))))

(format t "Starting application...~%")

(format t "making application...") (force-output)
(make-application "eval")

(format t "loading nib file...") (force-output)
(send NXApp "loadNibFile=owner="
      (namestring (merge-pathnames "objc/Evaluator.nib"
				   excl::*library-pathname*))
      NXApp)

(format t "running...")
(run-application)

(format t "done~%")
--
Kevin Layer, Franz Inc.         1995 University Avenue, Suite 275
layer@Franz.COM (internet)      Berkeley, CA  94704
uunet!franz!layer (uucp)        Phone: (415) 548-3600; FAX: (415) 548-8253

isbell@ucscf.UCSC.EDU (Art Isbell) (03/22/91)

In article <LAYER.91Mar21101508@vapor.Franz.COM> layer@Franz.COM (Kevin Layer) writes:
>[3 plusses for running ACL on NeXT]

I would be interested in having Kevin's objective opinion on how the NeXT
platform compares with other platforms that run ACL.  Kevin has provided a few
nice plusses, but what about negatives?  How is ACL's performance on NeXT?
What is the minimum RAM configuration recommended?
-- 
                                          _____   ____
Art Isbell                 |\   |         |    |  |   \   315 Moon Meadow Lane
NeXT Registered Developer  | \  |   ___   |____|  |    |  Felton, CA
isbell@ucscf.UCSC.EDU      |  \ |  |___|  |  \    |    |  95018-9442
(408)438-4736(B)           |   \|  |___   |   \   |___/   (408)335-1154(H)

mikel@Apple.COM (Mikel Evins) (03/23/91)

In article <13720@darkstar.ucsc.edu> isbell@ucscf.UCSC.EDU (Art Isbell) writes:
>
>In article <LAYER.91Mar21101508@vapor.Franz.COM> layer@Franz.COM (Kevin Layer) writes:
>>[3 plusses for running ACL on NeXT]
>
>I would be interested in having Kevin's objective opinion on how the NeXT
>platform compares with other platforms that run ACL.  Kevin has provided a few
>nice plusses, but what about negatives?  How is ACL's performance on NeXT?
>What is the minimum RAM configuration recommended?

My dealings with Franz suggest that Kevin cannot comment
on your question. Franz has a policy of not comparing
their performance on various hardware, because such comparisons
could be construed as constituting endorsements of particular
vendors, and so could be seen as conflict of interest issues,
or at least piss off some of the vendors they support.

I have benchmarks for various lisps on various platforms, but
I got some of them on the condition that I not distribute them
publicly. On the basis of what I know, I would describe
ACL on the NeXT as adequate, but not stellar. The fastest
Lisp I know of right now is Lucid on the SPARCStation 2
(actually, Lucid on the Apollo DN 10000 is probably faster,
but the price range is different, and the future of the
hardware is unclear). (This is assuming stock hardware,
not Lisp machines). 

If you like, I can run the Gabriels myself if I ever get
my upgrade copy of ACL for my 040 cube, and mail you
the results.

mikel@Apple.COM (Mikel Evins) (03/23/91)

In article <CNH5730.91Mar22172650@maraba.tamu.edu> cnh5730@maraba.tamu.edu writes:
>In article <50632@apple.Apple.COM> mikel@Apple.COM (Mikel Evins) writes:
>   [... stuff deleted ...]
>   ACL on the NeXT as adequate, but not stellar. The fastest
>   Lisp I know of right now is Lucid on the SPARCStation 2
>   [... stuff deleted ...]
>
>This is a comparison of a 28 MIPS machine with a 15 MIPS machine.

Sorry, I didn't mean to imply that the comparisons were
absolute. You are, of course, correct. ACL still doesn't
look stellar to me for a machine of the NeXTStation's class.
It's okay, though, and the alternatives are relatively
few.

layer@Franz.COM (Kevin Layer) (03/29/91)

It is true that we have a policy of not comparing machines for the
reasons given by mikel@Apple.COM.  I will say, however, that the
virtual memory system on the NeXT is quite sophisticated and I believe
it utilizes memory and it pages quite efficiently.  So, 16mb has been
quite adequate in my use.

Below are results of running the Stanford Lisp Timing Project
benchmarks on an 040 NeXTstation machine with 16mb of memory and local
disk.  They were not run in single-user mode, but there wasn't much
going on at the time.

                       Non-GC            GC                Total             
Name               User      Sys     User      Sys     User      Sys     Real
boyer              2.17     0.02     0.33     0.00     2.50     0.02     2.51
browse             3.37     0.08     0.17     0.00     3.53     0.08     3.61
dderiv             0.68     0.02     0.02     0.00     0.70     0.02     0.73
deriv              0.62     0.02     0.02     0.00     0.63     0.02     0.68
destru             0.23     0.00     0.00     0.00     0.23     0.00     0.24
traverse-init      1.20     0.00     0.00     0.00     1.20     0.00     1.22
traverse-run       8.28     0.03     0.00     0.00     8.28     0.03     8.33
div2-iter          0.18     0.00     0.00     0.00     0.18     0.00     0.19
div2-recur         0.38     0.02     0.00     0.00     0.38     0.02     0.40
triang            25.72     0.05     0.00     0.00    25.72     0.05    25.84
tak                0.10     0.00     0.00     0.00     0.10     0.00     0.10
takl               0.55     0.00     0.00     0.00     0.55     0.00     0.57
takr               0.23     0.00     0.00     0.00     0.23     0.00     0.24
ctak               0.30     0.00     0.00     0.00     0.30     0.00     0.30
stak               0.55     0.00     0.00     0.00     0.55     0.00     0.57
fft                0.68     0.00     0.00     0.00     0.68     0.00     0.68
frpoly-r2-10       0.35     0.02     0.00     0.00     0.35     0.02     0.37
frpoly-r3-10       0.27     0.02     0.00     0.00     0.27     0.02     0.28
frpoly-r-15        0.80     0.02     0.00     0.00     0.80     0.02     0.85
frpoly-r3-15       1.92     0.02     0.05     0.00     1.97     0.02     2.00
frpoly-r2-15       3.33     0.03     0.05     0.00     3.38     0.03     3.41
puzzle             1.40     0.00     0.00     0.00     1.40     0.00     1.40
fprint             0.20     0.03     0.00     0.00     0.20     0.03     0.30
fread              0.73     0.02     0.00     0.00     0.73     0.02     0.77
tprint             0.30     0.02     0.00     0.00     0.30     0.02     0.32
--
Kevin Layer, Franz Inc.         1995 University Avenue, Suite 275
layer@Franz.COM (internet)      Berkeley, CA  94704
uunet!franz!layer (uucp)        Phone: (415) 548-3600; FAX: (415) 548-8253