Gundars: Pirmo reizi kautko dzirdu par virtuālu mašīnkodu. Vienmēr esmu dzirdējis un redzējis to saucam par bait-kodu: http://en.wikipedia.org/wiki/Bytecode (iz: http://en.wikipedia.org/wiki/Java_virtual_machine - A Java Virtual Machine (JVM), ... is a virtual machine that executes Java bytecode.)
Un linkošana ir pavisam cita opera. To tu nejauc te iekšā. No sources mašīnkodu ģenerē kompilators (vispārīgā gadījumā tas var ģenerēt arī starp-kodu, kuru kompilē vēlāk). Bet linkeris vāc kopā moduļus, kurus ir sakompilējis kompilators, lai izveidotu izpildāmas programmas kodu (exe/dll/...)
Piekasoties sīkumeim - php interpretators ir php5ts.dll/php4ts.dll nevis php.exe :)
Java jau ir divas lietas - kompilators, kas kompilē Javas source uz tās baitkodu. Un Java VM, kas ir tā izveidotā baitkoda interpretators. Tā man tas sanāk vienkāršoti skaidrojot, neņemot vērā JIT, kas ir arī kompilators.
C un Delfi nav nekādi kompilatori, bet valodas. Kompilators pēc būtības vispār ir kautkas, kas pārveido vienas valodas programmu uz kautkādu citas valodas programmu (vai tas būtu asm/mašīkodi/baitkodi/C-kods).