From: Jacob Seligmann
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <34pfea$6ee@belfort.daimi.aau.dk>
Lenny Gray (········@netcom.com) wrote:

> Bruno Haible (······@ma2s2.mathematik.uni-karlsruhe.de) wrote:
>
> : ...
> :    some integer array hacking
> :          C            4.2 sec
> :          Mjolner    111 sec
> :          GCL        288 sec
> :          CLISP      415 sec
> :    (All timings on a 486/33.)
> : ...

Ouch!

> Are these numbers right?  I've seriously used GCL and CLISP myself and
> had some arguments with a "true believer Lisper" who thought "Lisp _does_
> compete reasonably with C for numeric stuff", but I never bothered to do
> the timing tests, and always assumed it wasn't this bad.  Is it, really?

I don't know what Bruno's "some integer array hacking" program does, 
but the performance ratios shown do not reflect my personal experience. 
For example, here's a very simple "some integer array hacking" program 
I wrote for the occasion:

   /* siah.c - some integer array hacking in C */
   void main(void)
   {
    int a[10000], i, j;
    for (j=0; j<1000; j++)
      for (i=0; i<10000; i++)
        a[i] = i*4;
   }

   (* siah.bet - some integer array hacking in BETA *)
   ORIGIN '~beta/basiclib/v1.4/betaenv'
   --program:descriptor--
   (#
      a: [10000]@integer;
   do 
      (for j:1000 repeat
           (for i:a.range repeat i*4 -> a[i] for);
      for);
   #)

And here's the run-times (486/66; BETA compiler v5.0(1); gcc v2.5.8):

   BETA      4.41
   gcc       3.10
   gcc -O6   1.24

In this case, the ratio between BETA and unoptimized C was 1.4, while 
the ratio between BETA and optimized C was 3.6.

Bear in mind that the BETA compiler does not currently perform nearly 
as much optimization as gcc does. Also, the code generated by the BETA 
compiler contained an index check (which could have been removed, had 
the optimizer been smarter) at each assignment, while the C code 
obviously did not.

> Also, I was interested in Beta until one minute ago, because of this.

Hopefully, your interest has been reawakened.

/Jacob Seligmann
------------------------------------------------------------------------
Mjolner Informatics ApS             Phone:   (+45) 86 20 20 00 ext. 2754
Science Park Aarhus                 Direct:  (+45) 86 20 20 11 - 2754
Gustav Wieds Vej 10                 Fax:     (+45) 86 20 12 22
DK-8000 Aarhus C, Denmark           Email:   ·······@mjolner.dk       
------------------------------------------------------------------------
                             BETA is better                             
------------------------------------------------------------------------

From: Jacob Seligmann
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <354q47$60i@belfort.daimi.aau.dk>
Jacob Seligmann (·······@daimi.aau.dk) wrote:

> Lenny Gray (········@netcom.com) wrote:
> 
> > Bruno Haible (······@ma2s2.mathematik.uni-karlsruhe.de) wrote:
> >
> > >    some integer array hacking
> > >          C          4.2 sec
> > >          Mjolner    111 sec
> > >          GCL        288 sec
> > >          CLISP      415 sec
> 
> > Are these numbers right?  I've seriously used GCL and CLISP myself and
> > had some arguments with a "true believer Lisper" who thought "Lisp _does_
> > compete reasonably with C for numeric stuff", but I never bothered to do
> > the timing tests, and always assumed it wasn't this bad.  Is it, really?
> 
> I don't know what Bruno's "some integer array hacking" program does [...]

Mr. Bruno Haible was friendly enough to send me the C and LISP programs 
used. Unfortunately, he had deleted the BETA program, so I had to do 
the port from scratch. All three programs are listed at the end of this 
post. The benchmark is the program run with n=9.

[As you can see below, the C implementation uses a lot of tricks I did 
not care or was unable to use in the BETA port: in-lining (#define's), 
hard-wired variable liveliness information (loads of blocks with local 
variables, making the code very hard to read), code generation hints 
(register ...), array pointers (*d++ = *s++), unstructured gotos, etc.]

Here's my results (486/66; BETA compiler v5.0(2); gcc v2.5.8):

   gcc -O6 -fomit-frame-pointer   2.08
   BETA -no-range-check          11.00

[Actually, the compiler currently do not have a -no-range-check option.
The BETA figure was obtained by removing all boundl-instructions from 
the code by hand, and reassembling; this is the only way I could 
achieve a fair comparison.]

As you can see, the ratio between state-of-the-art optimized C and BETA 
was 5.3, not 26.4 as above.

> > Also, I was interested in Beta until one minute ago, because of this.
> > Are there intrinsic reasons for this that will prevent it from ever
> > improving?

I looked at the generated code, and it seems that the increase in 
execution time can be attributed to two factors:

  (1) The BETA code allocates its variables on the heap, while the C 
      code uses registers almost exclusively.

  (2) The BETA code performs a regular lookup calculation at each array 
      access, while the C code simply increases a dedicated register 
      during the linear sweep.

With a little bit of effort, there is absolutely no reason why the BETA 
compiler should not be able to perform the variable liveliness analysis 
itself (although currently it does not, and therefore pays the heavy 
price of using heap space instead of registers). Also, the linear array 
sweeps are simple enough that the compiler could recognize them and 
avoid the index calculations (again, it currently does not, and 
therefore pays the price at each lookup).

"Some integer array hacking"-type programs are *exactly* what highly 
sophisticated C compilers excel at, but there are no intrinsic reasons 
why the BETA compiler should not to be able to produce comparable code. 
We're constantly working on it...

Sincerely,

/Jacob Seligmann
------------------------------------------------------------------------
Mjolner Informatics ApS             Phone:   (+45) 86 20 20 00 ext. 2754
Science Park Aarhus                 Direct:  (+45) 86 20 20 11 - 2754
Gustav Wieds Vej 10                 Fax:     (+45) 86 20 12 22
DK-8000 Aarhus C, Denmark           Email:   ·······@mjolner.dk       
------------------------------------------------------------------------
                             BETA is better                             
------------------------------------------------------------------------

============================== fannkuch.c ==============================

/* Programm zur Simulation des Pfannkuchenspiels */
/* Bruno Haible 10.06.1990 */

#include <stdio.h>

#define PermLength 100
#define PermCopy(Source,Dest,n)                                              \
  {register int h = n; register int *s = Source; register int *d = Dest;     \
   while (h) {*d++ = *s++; h--;};                                               \
  }

void main()
{ int n;
  int Perm[PermLength];
  int Perm1[PermLength];
  int Zaehl[PermLength];
  int PermMax[PermLength];
  int BishMax; /* bisheriges Maximum aller Spiegelungsanzahlen */
  printf("n = ?");
  scanf("%d",&n); if (!((n>0)&&(n<=PermLength))) goto Ende;

  BishMax=-1;
  /* Erzeugung aller Permutationen */
  /* Erzeuge die Permutationen nach dem Algorithmus:
     PERM1[0..n-1] := (0,...,n-1]
     t:=n
   # if t=1 then standardroutine, goto $
     Z_hl[t-1]:=t
     t:=t-1, goto #
   $ if t<n then goto &, if t=n then fertig.
   & rotiere PERM1[0..t], dec Z_hl[t], if >0 then goto #
     t:=t+1, goto $
  */
  { register int i;
    for (i=0; i<n; i++) { Perm1[i]=i; };
  };
  { register int t;
    t=n;
    Kreuz:  if (t==1) goto standardroutine;
            Zaehl[t-1]=t;
            t=t-1; goto Kreuz; /* rekursiver Aufruf */
    Dollar: /* R_cksprung aus dem rekursiven Aufruf */
            if (t==n) goto Fertig;
            /* Rotieren: Perm1[0] <- Perm1[1] <- ... <- Perm1[n-1] <- Perm1[0] */
            { register int Perm0; register int i;
              Perm0=Perm1[0];
              for (i=0; i<t; i++) {Perm1[i]=Perm1[i+1];};
              Perm1[t]=Perm0;
            };
            if (--Zaehl[t]) goto Kreuz;
            t=t+1; goto Dollar;

    standardroutine:
      PermCopy(Perm1,Perm,n); /* Perm := Perm1 */
      { int Spiegelungsanzahl;
        Spiegelungsanzahl=0;
        { unsigned int k;
          while (!((k=Perm[0]) == 0))
           {/* Spiegle Perm[0..k] */
            unsigned int k2=(k+1)/2;
            register int *up = &Perm[0]; register int *down = &Perm[k];
            { register int i;
              i=k2; while (i) {int h; h=*up; *up++=*down; *down--=h; i--;};
            }
            Spiegelungsanzahl++;
           };
        };
        if (Spiegelungsanzahl>BishMax)
          {BishMax=Spiegelungsanzahl; PermCopy(Perm1,PermMax,n);};
      }
      goto Dollar;
  }
  Fertig: printf("Das Maximum betrug %d.\n bei ",BishMax);
          {register unsigned int i;
           printf("(");
           for (i=0; i<n; i++)
            {if (i>0) printf(" ");
             printf("%d",PermMax[i]+1);
            };
           printf(")");
          };
          printf("\n");
  Ende: ;
}

============================= fannkuch.lsp =============================

(defun fannkuch (&optional (n (progn
                                (format *query-io* "n = ?")
                                (parse-integer (read-line *query-io*))
                )          )  )
  (unless (and (> n 0) (<= n 100)) (return-from fannkuch))
  (let ((n n))
    (declare (fixnum n))
    (let ((perm (make-array n :element-type 'fixnum))
          (perm1 (make-array n :element-type 'fixnum))
          (zaehl (make-array n :element-type 'fixnum))
          (permmax (make-array n :element-type 'fixnum))
          (bishmax -1))
      (declare (type (simple-array fixnum (*)) perm perm1 zaehl permmax))
      (declare (fixnum bishmax))
      (dotimes (i n) (setf (svref perm1 i) i))
      (prog ((\t n))
        (declare (fixnum \t))
        Kreuz
          (when (= \t 1) (go standardroutine))
          (setf (svref zaehl (- \t 1)) \t)
          (decf \t)
          (go Kreuz)
        Dollar
          (when (= \t n) (go fertig))
          (let ((perm0 (svref perm1 0)))
            (dotimes (i \t) (setf (svref perm1 i) (svref perm1 (+ i 1))))
            (setf (svref perm1 \t) perm0)
          )
          (when (plusp (decf (svref zaehl \t))) (go Kreuz))
          (incf \t)
          (go Dollar)
        standardroutine
          (dotimes (i n) (setf (svref perm i) (svref perm1 i)))
          (let ((Spiegelungsanzahl 0) (k 0))
            (declare (fixnum Spiegelungsanzahl k))
            (loop
              (when (= (setq k (svref perm 0)) 0) (return))
              (let ((k2 (ceiling k 2)))
                (declare (fixnum k2))
                (dotimes (i k2) (rotatef (svref perm i) (svref perm (- k i))))
              )
              (incf Spiegelungsanzahl)
            )
            (when (> Spiegelungsanzahl bishmax)
              (setq bishmax Spiegelungsanzahl)
              (dotimes (i n) (setf (svref permmax i) (svref perm1 i)))
          ) )
          (go Dollar)
        fertig
      )
      (format t "Das Maximum betrug ~D.~% bei " bishmax)
      (format t "(")
      (dotimes (i n)
        (when (> i 0) (format t " "))
        (format t "~D" (+ (svref permmax i) 1))
      )
      (format t ")")
      (terpri)
      (values)
) ) )

============================= fannkuch.bet =============================

ORIGIN '~beta/basiclib/v1.4/betaenv'
--program:descriptor--
(#
   PermLength: (# exit 100 #);
   Perm, Perm1, PermMax, Zaehl: [PermLength]@integer;
   h, i, k, n, t, up, down, BishMax, Spiegelungsanzahl: @integer;
do
   'n = ?' -> putText;
   getInt -> n;
   (if (n < 1) or (n > PermLength) then stop if);
   
   -1 -> BishMax;
   (for i:n repeat i-1 -> Perm1[i] for);
   n -> t;
   
   again: 
     (# 
     do (for i:t repeat i -> Zaehl[i] for); 1 -> t;
        (for i:n repeat Perm1[i] -> Perm[i] for);
        0 -> Spiegelungsanzahl;
        
        while1: 
          (# 
          do (if Perm[1]->k // 0 then leave while1 if);
             1 -> up; k+1 -> down; down/2 -> i;
             while2:
               (# 
               do (if i // 0 then leave while2 if);
                  Perm[up] -> h; Perm[down] -> Perm[up]; h -> Perm[down];
                  up+1 -> up; down-1 -> down; i-1 -> i;
                  restart while2;
               #);
             Spiegelungsanzahl+1 -> Spiegelungsanzahl;
             restart while1;
          #);

        (if Spiegelungsanzahl > BishMax then
            Spiegelungsanzahl -> BishMax; 
            (for i:n repeat Perm1[i] -> PermMax[i] for)
        if);
        
        while3:
          (# 
          do (if t // n then leave while3 if);
             Perm1[1] -> h; 
             (for i:t repeat Perm1[i+1] -> Perm1[i] for);
             h -> Perm1[t+1];
             (if (Zaehl[t+1]-1 -> Zaehl[t+1]) <> 0 then restart again if);
             t+1 -> t;
             restart while3;
          #);
     #);
   
   'Das Maximum betrug ' -> putText; 
   BishMax -> putInt; 
   '.\n bei (' -> putText;
   (for i:n repeat 
        (if i > 1 then ' ' -> put if); 
        PermMax[i]+1 -> putInt; 
   for);
   ')' -> putLine;
#)

========================================================================
From: Erik Naggum
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <19940914T000228Z.erik@naggum.no>
[Jacob Seligmann]

|   [As you can see below, the C implementation uses a lot of tricks I did 
|   not care or was unable to use in the BETA port: in-lining (#define's), 
|   hard-wired variable liveliness information (loads of blocks with local 
|   variables, making the code very hard to read), code generation hints 
|   (register ...), array pointers (*d++ = *s++), unstructured gotos, etc.]

this is not benchmarking execution speeds of C or LISP or anything.  this
is benchmarking a programmer's willingness to write assembly language and
to see how well his assembly language coding style fits various languages.
I'll bet gcc -O6 does a better job on reasonably-written C than it does on
this spaghetti code.  I mean, writing your own version of memcpy because
you think memcpy won't be fast enough is rather pathetic when there are
CPU's out that have block move instruction idioms and good compilers that
open-code them when calls to memcpy are requested.

to paraphrase Richard Stallman from a response to a bug report for Emacs
with a horribly convoluted fix:

    Unfortunately, the code you wrote looks like the intermediate stage of
    scheme compilation, and it's too hard for me to read.  I can't even
    figure out what [it] does.

and what's this about a semicolon _after_ the closing brace in blocks?
such things worry me when I read other people's C code, because it tells me
that they don't really program in C, but translate from something else into
C.  that's the feeling I got from the LISP code, too.  is this really a
good way to compare languages?  I think not.

are there any good ways to compare _languages_?  I think programmer time
spent and number of compilation runs required to solve a particular problem
is a better indication.  then, later, we can benchmark the compilers.

I don't use LISP because of its outstanding speed, anyway.  I use it
because _I_ am faster in LISP than in anything else I know well enough to
compare to.  two days of my time translates to the cost of a CPU upgrade to
my clients.  so what if it runs five times slower and takes 100 instead of
20 milliseconds?  with the upgraded CPU it'll only take 3 times more time,
and if I need to come back to enhance the functionality, they can buy an
even _faster_ CPU.  we're not talking about more than constant factors in
difference between these benchmarks here, right?

BETA and LISP probably have a lot to tell us about optimal program design
in their respective mind-sets and a comparison of their relative strengths
and idiomatic expressiveness would be instructive.  onwards, folks!

#<Erik>
--
Microsoft is not the answer.  Microsoft is the question.  NO is the answer.
From: Jacob Seligmann
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <356ckc$kki@belfort.daimi.aau.dk>
Thus spake Erik Naggum <····@naggum.no>:

> > [Description of C spaghetti code deleted]
> 
> this is not benchmarking execution speeds of C or LISP or anything.  this
> is benchmarking a programmer's willingness to write assembly language and
> to see how well his assembly language coding style fits various languages.

I couldn't agree more! I was simply answering to a post which could be 
misinterpreted as saying that BETA is inherent 25 times slower than C.
This did not reflect my personal impression, so I retrieved the C 
benchmark program from the original poster, did a simple rewrite in 
BETA, gained a factor 5, and posted this result along with the programs 
used for you all to verify.

That is, I did not write the spaghetti code in the first place, neither 
do I feel this is the way to program in BETA, or C, or LISP, or 
whatever.

> are there any good ways to compare _languages_?  I think programmer time
> spent and number of compilation runs required to solve a particular problem
> is a better indication.  then, later, we can benchmark the compilers.

Again, I agree, as long as your programs are not orders of magnitude 
slower than what is achievable, and as long as there are no inherent 
barriers in the language design to ever achieving better performance.

> BETA and LISP probably have a lot to tell us about optimal program design
> in their respective mind-sets and a comparison of their relative strengths
> and idiomatic expressiveness would be instructive.  onwards, folks!

Actually I was quite surprised to see a BETA-LISP comparison thread in 
the first place. Sure, BETA strongly supports a functional programming 
paradigm, but it is still an object-oriented language at heart - it 
never ceases to amaze me just how versatile and expressive the BETA 
pattern concept is! Keep the comparisons coming.

Cheers, 

/Jacob Seligmann
------------------------------------------------------------------------
Mjolner Informatics ApS             Phone:   (+45) 86 20 20 00 ext. 2754
Science Park Aarhus                 Direct:  (+45) 86 20 20 11 - 2754
Gustav Wieds Vej 10                 Fax:     (+45) 86 20 12 22
DK-8000 Aarhus C, Denmark           Email:   ·······@mjolner.dk       
------------------------------------------------------------------------
                             BETA is better                             
------------------------------------------------------------------------
From: Matthew McDonald
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <MAFM.94Sep16133030@wambenger.cs.uwa.edu.au>
	I know this is about beta rather than lisp, but what Jacob is
saying about beta sounds a lot like what many people have been saying
about lisp.

·······@daimi.aau.dk (Jacob Seligmann) writes:
[...]
   Here's my results (486/66; BETA compiler v5.0(2); gcc v2.5.8):

      gcc -O6 -fomit-frame-pointer   2.08
      BETA -no-range-check          11.00

   [Actually, the compiler currently do not have a -no-range-check option.
   The BETA figure was obtained by removing all boundl-instructions from 
   the code by hand, and reassembling; this is the only way I could 
   achieve a fair comparison.]

   As you can see, the ratio between state-of-the-art optimized C and BETA 
   was 5.3, not 26.4 as above.

[...]
   With a little bit of effort, there is absolutely no reason why the BETA 
   compiler should not be able to perform the variable liveliness analysis 
   itself (although currently it does not, and therefore pays the heavy 
   price of using heap space instead of registers). Also, the linear array 
   sweeps are simple enough that the compiler could recognize them and 
   avoid the index calculations (again, it currently does not, and 
   therefore pays the price at each lookup).

   "Some integer array hacking"-type programs are *exactly* what highly 
   sophisticated C compilers excel at, but there are no intrinsic reasons 
   why the BETA compiler should not to be able to produce comparable code. 
   We're constantly working on it...

What Jacob's saying is 
	(a) Typical code written in c performs more than 5 times
	    better than code in his favourite language using available
	    implementations, and
	(b) there's no reason why his favourite language couldn't be
	    implemented so it was competive.

What lisp (and beta) advocates seem to often ignore is that quality of
code generation really matters to most people.

Telling people that a factor of 5 difference in run-time doesn't
really matter doesn't encourage them to use your language.  Neither
does telling them that *in principle* or *some day in the future*,
your language could be competitive.

Unless you have competitive ports to x86, Sparc, Alpha, DEC & SG Mips,
PA-RISC, and RS6k, few people are going to use a language. Not many
people are going to bother explaining that performance matters to
them, they're just going to ignore you when you try to tell them
otherwise.

Which is a pity, because competive compilers for sane languages like
beta and lisp are obviously feasible. Paul Wilson was proposing a
compiler for scheme+objects that would compete with C, CMU CL was
great (although it now seems to be largely unsupported) and the ETH
Oberon compilers are also wonderful (although the systems they're in
don't co-operate with the rest of the universe.)

At least Jacob's actually working on improving the beta
implementation. As far as I can tell, the usual lisp advocate response
to performance complaints is to either:
	(a) deny there's a problem,
	(b) say one day there won't be a problem, or
	(c) suggest you write code that looks like FORTRAN and
        manually weigh expression trees and other insanity.

Perhaps Gwydion or Paul Wilson's scheme+objects compiler will save the
world.

--
  	Matthew McDonald ····@cs.uwa.edu.au
Nim's longest recorded utterance was the sixteen-sign declarative
pronouncement, "Give orange me give eat orange me eat orange give me
eat orange give me you."
From: Naresh Sharma
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <Cw7t7v.E1p@news.tudelft.nl>
Matthew McDonald (····@cs.uwa.edu.au) wrote:

: What Jacob's saying is 
: 	(a) Typical code written in c performs more than 5 times
            ^^^^^^^^^^^^^^^^^^^^^^^^^
A small correction: It should be the-state-of-the-art spaghetti code in c

: 	    better than code in his favourite language using available
: 	    implementations, and

Naresh
--
_______________________________________________________________________________
Naresh Sharma [········@LR.TUDelft.NL]  Herenpad 28            __|__
Faculty of Aerospace Engineering        2628 AG Delft   \_______(_)_______/
T U Delft               Optimists designed the aeroplane,     !  !  !  
Ph(Work) (+31)15-783992 pessimists designed the parachute!
Ph(Home) (+31)15-569636 Plan:Design Airplanes on Linux the best OS on Earth!
------------------------------PGP-KEY-AVAILABLE--------------------------------
From: Simon Brooke
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <CwFyD2.2nC@rheged.dircon.co.uk>
In article <··········@info.epfl.ch> ·······@di.epfl.ch (Stefan Monnier) writes:

   In article <··················@wambenger.cs.uwa.edu.au>,
   Matthew McDonald <····@cs.uwa.edu.au> wrote:
   > Unless you have competitive ports to x86, Sparc, Alpha, DEC & SG Mips,
   > PA-RISC, and RS6k, few people are going to use a language. Not many
   > people are going to bother explaining that performance matters to
   > them, they're just going to ignore you when you try to tell them
   > otherwise.

   So true !
   The best example is probably Visual Basic, right ?

Out there in the real world, there are n (where n > 20, probably)
people sitting in front of a Windows box for every one person sitting
in front of a real computer. So if you write a program in Visual
BASIC, you'll be able to sell it. You won't be able to maintain it, of
course, but that's the customer's problem.

If you write a program in a real language for a real computer, *unless
you can port it to Windows (or windows NT, or Windows 95, or whatever
other dreck Bill Gates decides to unload on the uneducated next)* you
are not going to sell it. I know. I set up a company in 1988 to
develop knowledge engineering tools. I said to myself 'the PC isn't
powerful enough to do what I want to do, so I'll develop tools for
real computers'. There were other mistakes I made, but I think it was
that one that cost me the company...
-- 
    .::;====r==\              ·····@rheged.dircon.co.uk (Simon Brooke)
   /  /____||___\____         
  //==\-   ||-  |  /__\(      MS Windows IS an operating environment.
 //____\___||___|_//  \|:     C++ IS an object oriented programming language. 
   \__/ ~~~~~~~~~~ \__/       Citroen 2cv6 IS a four door family saloon.
From: Scott McLoughlin
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <NuqZsc1w165w@sytex.com>
·····@rheged.dircon.co.uk (Simon Brooke) writes:

> Out there in the real world, there are n (where n > 20, probably)
> people sitting in front of a Windows box for every one person sitting
> in front of a real computer. So if you write a program in Visual
> BASIC, you'll be able to sell it. You won't be able to maintain it, of
> course, but that's the customer's problem.
> 
> If you write a program in a real language for a real computer, *unless
> you can port it to Windows (or windows NT, or Windows 95, or whatever
> other dreck Bill Gates decides to unload on the uneducated next)* you
> are not going to sell it. I know. I set up a company in 1988 to
> develop knowledge engineering tools. I said to myself 'the PC isn't
> powerful enough to do what I want to do, so I'll develop tools for
> real computers'. There were other mistakes I made, but I think it was
> that one that cost me the company...

Howdy,
        Exactly. I suspect that N is much > 20 if you don't count
bank machines ;-)  Now, how do we get the "real languages" in use
on not so real Windows boxes?  What exactly _is_ the "political
economy" of commercial dynamic language implementations.
        We've got a $49 "Personal Eiffel". Is anyone out there
working in a "Personal Lisp" or "Personal Scheme" or "Personal
Dylan" or "Personal ML"????  If not -- Why Not?  Were all the
venture capitalists "burned" in the 80's AI hyped up binge? Do
the implementors have a comfy niche with Govt contracts and
research grants, so why bother?  Are these languages so hard
to implement (well) that the economics simply won't bear a
low cost implementation (with CL it's imaginable!) to price
conscious consumers?  Is the marketing channel blocked by
MS and Borland and Watcom and a few others, so product just
can't get out the door?
        Anyway, with FrameMaker selling cheap on PC's and
Interleaf coming to a Windows box near you and Intergraph
running on NT and ... All the $$ workstation software is
(1) coming to PC's and then fairly quickly thereafter
(2) dropping in price.  What about languages? If not,
why not?

ps. Sorry to hear about your company.

=============================================
Scott McLoughlin
Conscious Computing
=============================================
From: Cyber Surfer
Subject: Re: Comparison: Beta - Lisp
Date: 
Message-ID: <780156066snz@wildcard.demon.co.uk>
In article <··········@cogsci.ed.ac.uk> ····@aiai.ed.ac.uk "Jeff Dalton" writes:

> I hope we don't add a misleading "Lisp advocate" stereotype
> to the already misleading "Lisp" stereotype.

Is that a reference to the thread about a newsgroup for Lisp advocacy?
I'm not sure, but this looks like you've misunderstood the issue,
which was about the need, or not, for a comp.lang.lisp.advocacy
newsgroup, and not the nature and/or worth of Lisp advocacy, which
is another matter. My point was merely that at the moment, there's
no choice, except to add such advocacy threads to a killfile, which
is not ideal.

I hope I've misunderstood your comment, in which case I apologise.
However, I'm not aware of any stereotype being the problem. Perhaps
you're refering to some other thread, perhaps in another newsgroup,
but I don't know. So I'll just add that _my_ thread (the one I started)
was about the location of such advocacy threads, bot about their
worth. I'd like to have a choice about what I read, which is a purely
personal thing.

It just happens that we see these threads in comp.lang.lisp, and I'm
not aware of a Lisp newsgroup that might cover the same subjects but
without the advocacy threads. If you can suggest one, then I'll happily
leave comp.lang.lisp and go and read it.

Meanwhile, I've been enjoying this particular thread, as I felt it
had some interesting things to say about implementation and design
of languages. I hadn't thought of it in the same way as "C vs Lisp"
threads. Should I?

As I said above, if I've misunderstood your comment, then I'm sorry.
I wish well with your Lisp advocacy, whether I read it or not. If
I've ever suggested or implied that you _shouldn't_ advocate Lisp,
then I'm sorry for that, too. It could only have been because of
an misunderstanding. I've seen some extreme advocacy of Pascal
vs C, and itwas ugly. That rather colours my feelings! I didn't
mean to imply that you were included in that group of advocates,
as I've always found your posts worth reading.

The comp.lang.visual newsgroup is in need of another kind of advocacy,
simply because so many users of VB and VC++ have yet to discover the
wider world of "visual" programming that Microsoft have yet to support.
That goes way beyond "X vs Y" debates, and into the power of marketing
over the power (or lack of it) of other media, such as UseNet. You
can read the comp.lang.visual FAQ for the details, if you want to
know more about that problem. It'll explain why some people believe
that c.l.v should become a moderated newsgroup.

I'm glad that Lisp hasn't reached that point, and I hope that it
never will. After all, the name Lisp still refers to Lisp, and not
a Microsoft product that looks nothing like Lisp. Ouch.

Well, ok. That's my c.l.v advocacy over with for today. ;-)

> (I have seen Lisp code that looked like FORTRAN, BTW.  Imagine
> lots of PROGs and GOs.  But not for many years.)

Yeah, me too. I used to write Basic code like that. Then I switched
to Forth, and never used an exlicit GOTO again. Now I just write
compilers and macros that can do it for me. ;-)

Martin Rodgers
-- 
Future generations are relying on us
It's a world we've made - Incubus	
We're living on a knife edge, looking for the ground -- Hawkwind