Newsgroups: comp.lang.dylan,comp.lang.java,comp.lang.lisp
Path: cantaloupe.srv.cs.cmu.edu!das-news2.harvard.edu!oitnews.harvard.edu!news.dfci.harvard.edu!camelot.ccs.neu.edu!chaos.dac.neu.edu!usenet.eel.ufl.edu!tank.news.pipex.net!pipex!howland.reston.ans.net!newsfeed.internetmci.com!chi-news.cic.net!news.midplains.net!gw2.att.com!nntpa!ssbunews!jwd
From: jwd@ihnns792.ATT.COM (nq8140700-Davison)
Subject: Re: GC, Java, etc.
In-Reply-To: Cyber Surfer's message of Thu, 19 Oct 95 08:20:03 GMT
Message-ID: <JWD.95Oct20083905@ihnns792.ATT.COM>
Sender: news@ssbunews.ih.att.com (Netnews Administration)
Nntp-Posting-Host: ihnns792.ih.att.com
Reply-To: Joseph_W_Davison@.ATT.COM
Organization: AT&T Bell Laboratories
References: <DGnB3F.Csp@cogsci.ed.ac.uk> <814090803snz@wildcard.demon.co.uk>
Date: Fri, 20 Oct 1995 13:39:05 GMT
Lines: 44
Xref: glinda.oz.cs.cmu.edu comp.lang.dylan:5511 comp.lang.java:2277 comp.lang.lisp:19637

Cyber Surfer > writes:

   In fact, (sorry mention him again), in Writing Interactive Compilers
   and Interpreters, PJ Brown calls both compilers and interpreters by the
   same word: compilers. That's so much simpler, esp when the differences
   may be rather complicated.

   > Did you actually compile anything, by the way?

   I'd argue that even tokenised Basic interpreters compile. Microsoft's
   QuickBasic used a very interesting compiler, and yet it was also
   interactive and incremental. Perhaps it should still be called an
   interpreter because it used threaded code (an "address interpreter")?
   Forth traditionally used threaded code, but some implementations use
   native code. I've used both kinds, but the distinction I'd make is
   between the interactive & incremental compilers, and the "batch" variety.

   You could make any argument you like, if you conveniently define
   enough of the terms you use to support it. That's why I like PJ Brown's
   terminology so much. Just call them _all_ compilers...


  Rather than call every thing compilers, I prefer to make the distinction
that an interpreter executes a set of instructions; a compiler translates
them into another language.  The hardware is an interpreter.  Some programs
are interpreters (that are themselves interpreted, usually by the
hardware).  Many other programs are compilers -- sometimes they translate
the program into the language that is directly interpreted by the hardware
(native code compilers), sometimes they translate the program into a
language that is interpreted by another program (or another part of the
same program).

  Using those definitions, things like ParcPlace's Smalltalk system is an
interesting beast: when a method is compiled it is translated into
byte-codes; when the method is invoked, it is translated into machine code
that is interpreted by the hardware (this translation is, presumably, only
done if it's not already in memory).  So, it is interactive, looking like
what people tend to call interpreters, but it's really a double edged
compiler  (I think they prefer "incremental compiler")!



--
Joe Davison 	joseph_w_davison@att.com
