一.编译型语言与解释型语言( 二 )


解释性语言例如java语言,java程序首先通过编译器编译成class文件,如果在平台上运行,则通过平台上的java虚拟机(VM)进行解释 。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行 。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机 。如果没有java虚拟机,则不能进行跨平台 。
实际上,就像人没有绝对的好人与坏人,对于语言是编译型还是解释型的区分往往不是非黑即白的 。一般是某个语言满足某一种类型的特点,他就可以被当作其中的一份子 。一个明显的例证就是Java语言 。
Java的一些特性:
Java和其他的语言不太一样 。因为java针对不同的平台有不同的JVM,实现了跨平台 。所以Java语言有一次编译到处运行的说法 。
1.你可以说它是编译型的:因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有 。
2.你可以说它是解释型的:因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了 。
3.但是,现在的JVM为了效率,都有一些JIT优化 。它又会把.class的二进制代码编译为本地的代码直接运行,所以,又是编译的 。
作为人带有主观的偏向性来看,我认为java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因 。所以可是说java即是编译型的,也是解释型,但是假如非要归类的话,从概念上的定义,恐怕java应该归到解释型的语言中 。
编译型与解释型的共同点
都要弄成二进制代码,才能执行 。两类编程语言,你手写的源代码 都是那些if,else之类的英文单词,计算机并不认识这些单词,所以都会要转化成二进制才能运行 。区别就在于“转化的方式” 。
编译型与解释型的不同点
1.从效果上来比编译型语言要全部写完之后,然后通过某个编译器,去生成一个类似*.exe的二进制文件,然后手工双击这个文件才看的到效果;解释型语言则没生成你看的到的那种.exe文件,而是直接发出效果 。那么区别之一就是:是否显性的生成二进制文件供你去双击 。
2.运行的时候是否需要编译器编译型语言运行的是最终的二进制代码了,所以不在需要编译器在身边守护 。但解释型语言则不然,它是边解释、边运行,所以运行的时候很可能还有部分代码没有解释好,所以需要编译器守护(解释型语言把该工具叫:解释器) 。那么编译器在哪里?就在浏览器里,所以你要看html效果,必须是用浏览器这种工具,或者有编译工具在内的其他工具,如:模拟浏览器的工具 。
3.执行速度对比编译型语言由于运行的已经是完全的二进制内容了,所以运行起来很干净利落,自然速度快 。但解释型语言,运行的不一定是完全的二进制内容,因为它是边解释(成二进制),边运行 。所以当它执行看出效果的时候,程序后半部分还不一定解释成二进制呢 。所以它是“三心二意”的做事,速度没有前者快,但是CPU的运行速度如果很快,你可能看不出来,偶尔会看到“有点卡”的效果 。原因就是:它边解释、边运行,你看到效果了,可能还有一少半的代码没解释成二进制呢,所以你看到的效果会是残缺的,这就是为什么查看网页的时候,很容易就看到这样的情况:先是出现一堆没有布局的文字,然后才出现那种布局好的效果 。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、/ ()等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、、、Perl、、Ruby、 等等 。