编程语言和我们制造的物理机器都是图灵机。 python是两层图灵机,而java是三层图灵机。
数学家证明图灵机是可以运行在图灵机上的。
Python > 翻译 > 物理机器
java > 翻译 > jvm虚拟机 > 翻译 > 物理机器
如果是两层图灵机,中间的翻译这个步骤,按照正常考虑,要么一次性全翻译好,扔到物理机器上运行,这就是可执行文件,像exe之流。要么从一个语言翻译一句,然后扔到另一个机器上执行一句,或者翻译一段,执行一段,这是解释器。
一次性翻译的这种情况,翻译过后,产出一个结果,这个翻译的中间人就不需要了。
而逐句翻译的,这个中间人需要一直运行。
看java到jvm这前半段来,和Python一样,关键在于这个jvm,它也是个图灵机,jvm造了一堆指令集,实现了图灵完备。jvm到物理机器也需要翻译。最后,jvm把前后翻译的功能都集中在了jvm里。
对比python和java中间翻译过程,可以看出jvm比python解释器多了指令集及指令集到物理机器的翻译过程,仅此而已。但是由于功能都集中到了jvm里,看起来和解释器好像没什么区别。
如果我们将两端的图灵机的中间部分只是看成一个翻译的过程,jvm和python解释器好像确实也没什么本质的区别。图灵机就是俄罗斯套娃!