(Ref: 《Programming Language Pragmatics 3rd Edition》 Page19)
如图, 从上至下分别是编译型语言,解释型语言,Java的执行模型。
看上去陷入了一个困境,Java到底是编译型语言呢,还是解释型语言呢?
一种朴素的判定方式:
如果翻译器部分较为简单,我们说这个语言是“解释的”,反之如果翻译器部分很复杂,我们就说这个语言是“编译的”。“”
事实上这两者之间的界限是模糊的,因为“简单”和“复杂”都具有主观性。“解释型”和“编译型”并不是一个清晰的描述。故强行将某种具有混合形式的语言划入两者之一是不当的。
但实践中肯定还是有进行分类的需求的,所以这里有一条启发性原则用以判断语言的类型:
如果翻译器对程序进行了彻底的分析而非某种机械的变换,而且生成的中间程序与源程序之间没有很强的相似性,我们就认为这个语言是编译的。彻底的分析和非平凡的变换,是编译方式的标志性特征。
因此,Java应当被认作一种编译型语言。
——《PLP》1.4 Compilation and Interpretation
作者:冯若航
链接:https://www.zhihu.com/question/19608553/answer/34834354
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。