-
上篇介绍到高级语言需要转换成机器语言才能被计算机硬件识别并执行。而转换方式有编译和解释两种,由此将高级语言分为编译型语言和解释型语言。
-
简单理解,前者是先编译后执行,后者是边执行边编译。这里举个例子,前者如C语言在执行前要先编译,如果发现语法错误,就会发出编译不通过的提示,只有编译通过了才能执行。而后者如JavaScript可以直接运行, 如果有代码错误,程序执行到那一句才会停下来报错。
-
来看下定义。编译型语言是针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成平台对应的可执行程序后直接运行;解释型语言以文本方式储存程序代码,在执行时动态逐行解释成特定平台的机器码并立即执行。
-
来看下区别。
-
1.编码上的区别:编译语言比解释语言难写,前者提示较少且定位异常较耗时,而后者更容易实现,并且提供了极佳的调试支持,另外可执行的编译型代码要比相同的解释型代码大许多。
-
2.执行上的区别:编译语言执行前要先编译生成类似*.exe文件,运行时直接使用编译结果(字符码到机器码),运行速度快,一次编译终身有效,运行效率高;解释语言发布程序时看起来省了编译的工序,但在运行程序的时候,边运行边解释,运行速度慢,执行效率低。编译器像是翻译社,而解释器更像是同声传译。前者可直接出版翻译作品,而后者要随身带个翻译,而翻译复杂且智能的,势必占用更多的内存和CPU资源。
-
3.应用上的区别:编译语言与特定平台相关,一般无法移植到其他平台。因为不同的操作系统识别的二进制文件是不同的,如c语言windows编译成ext文件,linux编译成erp文件,所以可移植性、平台兼容性比较差。而解释语言只要平台提供相应的解释器,就可以运行,方便移植,如java在windows平台上用windowsJVM进行解释,在linux上用linuxJVM进行解释执行。解释语言可以跨平台,前提是平台上必须要有相匹配的解释器。扩展一下,前端框架实现跨平台的原理是一样的。另外,编译型程序不支持代码中实现安全性,它几乎可以对PC做它想做的任何事情(大部分病毒就是使用编译型语言编写的)而解释型语言也可以保证高度的安全性,还有解释语言升级要比编译语言容易些。这些特点决定二者在应用上的区别,前者通常是操作系统、安装软件,而后者通常是互联网、网站等。
-
那么编译器(解释器)在哪里呢?其实就是我们安装的环境。了解了软件,下节我们讲下硬件的原理。