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

Reply via email to