2002.11.09 ~13 Compiled vs Interpreted I actually started on a long-winded entry on my thoughts about criteria for "compiled" or "interpreted" for a language, when a google trip turned up this link that is pretty much a superset of my ideas: http://www.oche.de/~akupries/ics_lang.html I had pondered over compiled vs interpreted as I mulled over the Q3VM specs and the way it makes a distinction between code space and memory space (JUMP to address 0 is vmMain(); a LOAD from address 0 does not return the bit-level representation of vmMain()). I decided the dividing line comes down to observing how the Program Counter (or Instruction Pointer, et al.) acts, whether it branches into newly created code (compiled) or stays within already pre-existing code (interpreted). Since a VM has its own (emulated/simulated) PC, this would mean bytecode would technically be compilation (from the point of view of the VM), but still interpreted by the host machine (as the host machine does not branch directly to the byte sequence). I had considered bytecode to be a middle ground between compiled and interpreted, but then I wondered if there may be other categories as well -- echoes of the zero-one-infinity principle. As the mentioned url illustrates, the whole gig is a matter of how many layers you need to tear through; "compiled" and "interpreted" are relative terms. Java is "more compiled" than Bash, Perl is "more interpreted" than C, and so on.