编译型语言和解释型语言

编译型:

第一次运行程序时,程序语言先将代码编译成机器语言的文件(机器能看懂的语言,如.exe,.erp…),此后每次都可直接运行编译的结果;

优点是只需编译一次、效率高,程序执行速度快,同等条件下对系统的要求低,缺点则是跨平台性不强(比如win编译成.exe,linux编译成.erp,移植后需重新编译),依赖编译器;

好比语言翻译过程中先直接将语言翻译成了对应的语言(中文 to 英文、中文 to 法文),再把翻译好的内容给对方阅读,对方理解起来很方便,所以效率高,但将翻译的结果给其它语种的人看则没法读懂(英语者看法文)。

 

解释型:

以文本的方式储存代码,没有预先编译的过程,程序在运行时需由机器先解释再运行,且每次运行都要解释一次;

优点是跨平台性强,只要具备了相应的解释器就可以在各个平台运行,缺点则是每次运行都需要解释执行、效率低;

就像写了一篇中文文献,不同语种的人具有一个翻译中文的软件,把论文给他它需要先用软件翻译成自己对应的语言再阅读,且每次拿到这篇中文论文时都需要先用翻译软件翻译成自己的语言才能阅读。

 

对于Java:

具备编译解释性,即在首次运行程序时将代码编译成字节码文件,再解释执行,以后运行时即可直接对字节码进行解释执行;

这样看似既有编译过程,但每次运行还都增加对编译的结果进行执行额外的解释执行步骤,但实际上我认为这是该语言对性能和跨平台的一种平衡(既可以说是为了跨平台性牺牲了性能、也可以是为了跨平台语言的性能增加了复杂性),这样在任何平台写的源代码(.java文件,可以视为以文本的方式存储的解释型语言的代码)都可以被编译成各个平台的解释器都能读懂的字节码(.class文件),这些字节码文件在各个平台都可以用该平台对应的解释器(如果有的话…没有不行)解释执行;运行时仅解释执行第一次编译通过后的字节码、性能优于单纯的解释型语言,但相较于编译型语言增加了每次解释执行字节码的过程、牺牲了性能,所以Java增加了跨平台性能牺牲了单一平台情况下的性能,或者说java增加了复杂性但在保证跨平台特性的前提下提升了跨平台情况下的性能;

这样好比一篇中文文献先译成了学术界通用的英语,再由翻译软件将英文译成阅读者对应的语言再阅读(姑且也将英文译成英文包括在内…毕竟各地英语的标准也不同,手动狗头),所以每次阅读这篇文献时只需将这篇文献的英文版译成对应语言即可阅读,这样降低了翻译的难度。

 

对于java的jdk和jre:jdk是java的核心,包含了java运行环境(Java Runtime Environment)以及一些Java工具和Java的核心类库(Java API);Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(JAVA Runtime Environment),JRE是支持Java程序运行的标准环境。JRE是个运行环境,JDK是个开发环境。因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。但由于JDK包含了许多与运行无关的内容,占用的空间较大,因此运行普通的Java程序无须安装JDK,而只需要安装JRE即可。

 

编译型语言由于其性能强的特征适用于操作系统、大型应用、数据库等系统的开发,解释型语言则因为其跨平台的优势适用于网页脚本、服务器脚本、辅助开发接口等这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序。

 

一些疑问:对于编译型语言代码的编译结果(如.exe)对应系统的执行过程和解释型语言的解释执行过程差异(步骤、性能…差异在哪);java对字节码解释执行的优化的部分在哪;普通解释型语言的“解释执行过程”同编译型语言“先编译后执行”的具体差异。

 

posted on 2020-06-08 00:15  Zimsky  阅读(167)  评论(0编辑  收藏  举报