说到编译和解释,软件语言有好多分类。编译型语言和解释型语言也是其中一个分类。
编译型语言:编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成机器语言文件;比如,exe文件,以后运行的话就不用重新编译了,直接使用 编译的结果就行了;因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高!(专门编译,然后执行直接用)(效率高)
解释型语言:解释型语言的程序不需要编译,省了道工序,解释型语言在运行程序的时候才翻译,比如解释型basic语言,专门有一个解释器能够直接执行 basic程序,每个语句都是执行的时候才翻译;这样解释型语言每执行一次就要翻译一次,效率比较低;(运行程序时才翻译,每执行一次,就要翻译一次) (效率低)。但是解释型语言跨平台性比较好,因为他依赖解释器,只要装解释器程序配好环境程序就好用。当然跨平台性和编译解释并没有直接的联系。比如java是通过JVM来实现跨平台,所有的java程序不需要再编译就可跨平台运行;C程序也可以跨平台,但是需要各种平台的开发包和编译器来支持;PHP、Python、Perl等脚本语言不需要各平台的编译器,但是需要先安装在各个平台上的运行环境以及相应的package才能保证程序的跨平台特性等等。
java并不是严格的编译型语言或是解释型语言,我倒是更愿意说他是编译解释型语言。java语言既要编译,又要解释;编译只有一次,程序执行时解释执行;通过编译器,把java程序翻译成一种中间代码——字节码(不是机器码),然后通过JVM解释成相应平台的语言;所以java的跨平台性我感觉相对于c或c++的“源码级”跨平台。(本来就是存在针对linux、windows的不同的编译器。)是更加可行的,因为很难去把握。如果你的程序只使用C标准的输入输出,那么源代码也是跨平台的,只要用对应平台的编译器编译就可以运行,如果你使用 了平台专有的API,那么就不能跨平台,比如WINDOWS窗口程序,就调用了WINDOWS的创建窗口,显示窗口等API(这些调用并不一定在你自己的 代码中),linux是没有这些API的,所以就无法编译运行。
当然了我并没有说哪种语言更加好或是哪种语言差。对于我们使用者来说语言只是工具,我们更有必要做的只是了解这些语言然后看我们具体的需求,包括我们本身掌握的技能或是我们团队对所选用的语言的掌握程度。然后在一个具体的业务需求下我们才可以说哪种语言更加合适。