Re: Why is compiled basic slower than C? (Basic is the future)

macrakis@osf.org (Stavros Macrakis)
Mon, 17 Aug 1992 17:53:11 GMT

          From comp.compilers

Related articles
[4 earlier articles]
Re: Why is compiled basic slower than C? (Basic is the future) macrakis@osf.org (1992-08-12)
Re: Why is compiled basic slower than C? (Basic is the future) scott@bbx.basis.com (1992-08-13)
Re: Why is compiled basic slower than C? (Basic is the future) macrakis@osf.org (1992-08-14)
Re: Why is compiled basic slower than C? (Basic is the future) burley@geech.gnu.ai.mit.edu (1992-08-14)
Re: Why is compiled basic slower than C? (Basic is the future) dbenn@leven.appcomp.utas.edu.au (1992-08-15)
Re: Why is compiled basic slower than C? (Basic is the future) pardo@cs.washington.edu (1992-08-15)
Re: Why is compiled basic slower than C? (Basic is the future) macrakis@osf.org (1992-08-17)
Re: Why is compiled basic slower than C? (Basic is the future) fjh@munta.cs.mu.OZ.AU (1992-08-18)
Re: Why is compiled basic slower than C? (Basic is the future) imp@Solbourne.COM (1992-08-18)
Re: Why is compiled basic slower than C? (Basic is the future) burley@geech.gnu.ai.mit.edu (1992-08-18)
Re: Why is compiled basic slower than C? (Basic is the future) pdg@crosfield.co.uk (1992-08-19)
Re: Why is compiled basic slower than C? (Basic is the future) pk@cs.tut.fi (1992-08-21)
Re: Why is compiled basic slower than C? (Basic is the future) robert@metropolis.com (1992-08-25)
| List of all articles for this month |

Newsgroups: comp.compilers
From: macrakis@osf.org (Stavros Macrakis)
Organization: OSF Research Institute
Date: Mon, 17 Aug 1992 17:53:11 GMT
References: 92-08-042 92-08-073
Keywords: interpreter, performance

burley@geech.gnu.ai.mit.edu (Craig Burley) writes:


      I think interpreted languages _could_ compile well if _lots_ of effort
      were expended. However, that kind of effort probably isn't worth it --


Could you please define `interpreted language'? Is it anything more than
`a language whose first implementation was interpretive'? In the present
discussion, the language under question is Basic, whose first (and only
for a long time) implementation was in fact compiled. Other languages you
might call `interpreted', like Lisp, Prolog, ML, and Snobol, in fact have
very good compilers, which make major differences in runtime.


      the performance gains compared to the effort, that is -- when contrasted
      to the effort expended in buying new, faster processors,


The compiler speedup is complementary to the hardware speedup.


      making the interpreters run faster (often quite easy),


Interpreters can, of course, be bummed (and often are). But in many
cases, this still leaves you far from the compiled speed.


                                                                                              translating programs to
      maintenable code in a language designed for compilation, and so on.


This is a possible approach. However, you lose whatever advantages the
`interpreted' language had, e.g. more appropriate abstractions, easier
debugging, fast turnaround, etc. There are of course compiler-based
systems that provide easy debugging and fast turnaround e.g. most Lisp
compilers, but also the CenterLine C (formerly Saber C) system.


      I remember a discussion with rms (GNU EMACS author) regarding TECO, the
      language in which he first wrote EMACS. TECO was (and still is,
      primarily) an interpreted language (well, it's an editor, kind of like the
      MS-DOS DEBUG program is a partition editor :-).


Teco is a weird language. Most commands are single-character, and the
main loop of the interpreter essentially dispatches directly to the
relevant routine. So it is a sort of human-readable (well, this is
debatable, too) byte-compiled form.


      He told me about how someone we both knew had developed (or help
      develop) a compiler for TECO and was prepared to demonstrate its
      superiority in benchmarks. But submitting one simple case
      (something like deleting every other line in the file) proved the
      opposite.


Teco is an extreme case, but even so, you could probably _slightly_ reduce
runtime by compiling to machine code. I certainly agree that in most
cases, it would not be worthwhile to try to compile Teco code....


(Of course, TECO is probably like APL in that the time
      it takes to read in source code and figure out what it means is
      minimal, as compared to C, FORTRAN, and COBOL. So the penalty for
      being an interpreter could be seen as significantly lower for terse
      languages like TECO and APL,


Teco is not just terse, it requires no lexing or parsing. Like APL, many
of its operators are bulk operators and so most runtime is within their
inner loops. But even APL has been compiled with good results....


higher for verbose languages like
      BASIC, FORTRAN, and COBOL.)




      ...There is another major issue regarding interpretation which puts
      both BASIC and C in the "compiled" camp: whether the running
      program has a means to modify itself at run time. LISP, for
      example, belongs in the "interpreted" camp.


This is not really a problem. The amount of Lisp code which actually
modifies the program written by the programmer is just minuscule. Much
more code _generates_ pieces of Lisp, typically using the `macro' feature.
But almost all cases of macro usage are handled straightforwardly in Lisp
compilers. There are a few cases where Lisp code generates code on the
fly, then executes it. This is handled by having an interpreter loaded
along with the compiled code, and assuring that code can work correctly in
such a mixed environment. In fact, most Lisp implementations _assume_ a
mixed environment....


-s
--


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.