众所周知现在的软件行业是解释型语言的天下,无论是开源轻量级语言Python/Perl/Ruby还是企业级应用Java甚至微软新搞出来的.Net系列/C#,都基于字节码+虚拟机模式。这么做毫无疑问比机器码+编译器更慢,而且机器码+编译器也并非不能实现高等语言,那么why?

Hacks and Painters里给出的解答是:字节码十分接近机器码,因此为字节码编写基于硬件的解释器比编写编译器更容易!

想象一下。接近自然语言的高等语言+编译器+机器码与接近机器语言的字节码+解释器+机器码。当然是后者更容易,但是后者就额外需要把源代码翻译成字节码的编译器,但这个编译器只要实现一次就够了!(最复杂的部分只要做一次就够),而针对不同的硬件编写解释器是相对十分容易的。

另外如Hacks and Painters所说的,增加软件中间层,会降低执行效率,但能使编程更灵活,开发出的东西更强大。换句话说,这是一个不断抽象,不断接近人类自然思维的过程。

字节码更通用,更灵活,更强大,不拘于平台限制。其唯一的缺点是降低代码运行效率,但是在硬件速度18个月翻一番的今天,这并不重要。