Martin P. Hellwig wrote:
<div class="moz-text-flowed" style="font-family: -moz-fixed">Dave
Angel wrote:
<cut definition/interpretation of compiling>
Ah yes, we thread on the territory of word definition and difference
in interpretation. Any argument is doomed to fail if not agreed or at
least taken in perspective of the terminology used by users.
I could be (well it is quite likely) wrong in my interpretation of the
terminology, but here goes it anyway:
Machine Code:
Whatever the machine executes, it could be that the CPU uses an
abstraction of microcode to do this but from the perspective of the
user, this is all done in the same 'black box'
Compiling:
Translate words/symbols/mnemonics to machine code, which than can be
either loaded, linked and executed by an OS or read and executed by
the BIOS.
Interpreted:
Instructions which can be fed to a previous compiled program that is
able to dynamically change its execution and flow without the need to
recompile itself.
Depending on the level of understanding of the user, plus his history
and his biases, he will include more or less in his "black box." In the
old days, microcode was not "on-chip" but stored separately in control
memory. And on many machines, it was changeable at will.
To many users these days, the entire system including software is a
black box, which gradually breaks down (gets slow, runs out of space,
crashes a lot) and must be replaced. They don't distinguish operating
system from application, real memory from virtual, or viruses from
bugs. But of course those users wouldn't be participating in this
discussion.
My background includes specifying hardware instruction sets and
architecture. And writing microcode for multiple machines. And writing
parts of compilers, interpreters, assemblers, and so on. And
microcoding interpreters. And hooking into compilers to modify how they
would generate code. And hooking into runtimes to test running code in
realtime.
So I tend to have very flexible definition of compiler and interpreter.
Probably the only reason I jumped in here was the unmentioned bias that
somehow a compiler is superior to an interpreter.
I think I'd better extend my definition of compilation. It's a step
that's statically taken over a series of instructions (not necessarily
text source), that transforms it into a form closer to the targeted
enviromment, real or virtual. Most C++ compilers have two compilers
operating serially, the first to turn the source code into an
intermediate form (like byte code), and the second to generate what is
commonly called "machine code." The second part of course is duplicated
for each different target processor.
So Java is compiled into byte code, and the typical java VM then
compiles that piecewise into machine code (so called JIT compiling, for
just in time).
BTW, interpreters don't have to be written in a compiled language.
Anyway, I don't object to your definitions. We all have different
perspectives.
DaveA
--
http://mail.python.org/mailman/listinfo/python-list