in reply to Re: How is a perl program processed ?
in thread How is a perl program processed ?

A teacher of mine said that an interpreter has a signature of:

(P × D) ⇀ D

Instead a compiler has a signature of:

P ⇀ D ⇀ D

Where P is the domain of programs, and D is the domain of data.

So perl has a signature of the first kind: you give it the source and the data at the same time. cc, on the other hand, has asignature of the second kind: you give it only the source, and it produces another program, which is a function from data to data.

So much for theory

In practice, traditionally an interpreter has worked in a "miopic" way, looking at a single line (or even less) of code at a time; a compiler instead has always looked "at the big picture", swallowing the entire source at once, looking for problems and inconsistencies.

So, in this way, Perl is a compiler.

And on a sidenote, C is compiled to machine language, not assembly. Assembly is compiled to machine language by an assembler...

        dakkar - Mobilis in mobile
  • Comment on Re: Re: How is a perl program processed ?

Replies are listed 'Best First'.
Re: How is a perl program processed ?
by Abigail-II (Bishop) on Apr 01, 2003 at 09:17 UTC
    There's no sharp border between a compiler and and an interpreter. As you said, we often think of a compiler that takes the entire source code, and produces something else (typically, before running it), while an interpreter just looks at a small chunk of the source at a time, and executes that before carrying on.

    But compilers typically produce output that's being "interpreted". Machine code is basically "interpreted". And a language that has the ability to use "eval", can defer most of its "compilation" to runtime, and have it compiled one chunk at a time.

    I usually call a program that takes data in one format and produces equivalent data in another format a compiler. That means that 'gcc' is a compiler. But also 'dvips'. And perhaps parts of 'perl' as well, although the other format is only used internally.