先举个例子,如果一个美国人想看《西游记》但他不懂中文,这时候他会有这几种办法:
-
找西游记的英文翻译版,然后再读。这时候有一个缺点就是,如果说有一处翻译错了,那就得等这本书再版,而且还要去买一本新书,总不能只买翻译错误的那几页吧,而且如果他有个法国的朋友,也想要看《西游记》,但是既不会中文也不会英语,所以他不能直接把这本直接送给这个法国的朋友,只能买一个法语翻译版的《西游记》送给他。
-
直接找一个人当翻译,让这个人翻译给他听。这时候如果出现错误,那个翻译就可以直接更正,但是,边翻译边读效率很低,而且费钱。
这就类似于我们编程语言的运行机制:
编译型
定义:程序在执行之前需要一个专门的编译过程,把程序编译成 为二进制文件,运行时不需要重新翻译,直接使用编译的结果就行了。
缺点:只能在特定的平台。
优点:程序运行更快,性能更好,效率高。
编译型语言有:C、C++等
解释型
定义:程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。
缺点:效率较低,依赖解释器、无法脱离开发环境。
优点:跨平台
解释型语言:python、Ruby、js等
编译型+解释型
也有一些语言既是编译型也是解释型。比如java,Java源代码经过编译之后成为一种源文件和机器语言之间的.class字节码文件,然后通过jvm(java虚拟机)可以实现跨平台。这里可能就有人问了,那不还是用解释器吗,还费劲把它编译成.class字节码文件干嘛,但是,有一点可以肯定的是.class字节码文件解释起来一定比源文件要快,所以java通过这种形式在编译型和解释型之间取了个折中,既能跨平台,性能也还不错。