1.2 程序的编译与解释
程序开发人员编写的高级语言程序应该让他人读懂,更重要的是使计算机(硬件)理解和执行。执行的过程就是解决问题的过程。
高级语言程序按照执行方式分为静态语言和脚本语言。静态语言程序采用编译方法执行,脚本语言采用解释方法执行。
编译是将高级语言程序(称为源程序)通过编译程序(针对某种静态语言的系统序)转换为目标代码(又称目标程序,还不是最终的计算机可执行的代码,代码的件保存形式一般是.OBJ)的过程。执行编译的程序称为编译程序或编译器。为了让算机直接执行(完成)程序的功能,还需通过连接程序将目标代码转换为执行代码执行程序),执行代码的文件保存形式一般是.EXE。计算机直接执行的程序就是.EXE件。图1-2给出了程序的编译、连接、执行过程。
解释是将高级语言程序通过解释程序(针对某种脚本语言的系统程序)转换为可执行代码并同时逐条执行的过程。执行解释的程序称为解释器。图1-3给出了程序的解释过程。
图1-2 程序的编译、连接、执行过程
图1-3 程序的解释过程
编译与解释的区别在于编译是一次性的工作,一旦程序被编译,不再需要编译程序和源程序代码了,而解释则在程序的每次执行过程中都需要解释程序和源程序代码。
编译过程是一次性的,因此,编译过程的执行速度并不重要,重要的是目标程序的质量,目标程序代码量与执行速度直接决定了后面生成的执行程序的代码量与执行速度,所以,目标程序的质量才是编译过程的关键。为此,现在的编译程序在不断地优化,目的是提高执行效率。而在解释程序中,因为优化技术会消耗运行时间,使得整个程序的执行速度会受到影响,不能过多地集成优化技术。解释执行方法尽管牺牲了一定的执行速度,但可以支持跨平台(硬件或操作系统)、对保留和维护源程序代码十分方便,适合非实时等运行场合。理论上说,编译后程序比解释后程序执行速度要快。
现在随着编译器和解释器工具的进步,解释器中也吸收了编译器的功能,在程序执行的过程中,解释器也会产生一个完整的目标代码,这种新型解释器会对现代脚本语言执行性能的提高起到重要作用。Python语言就是一个典型的脚本语言,采用解释执行的方式,但它的解释器中包含了编译器的功能。
采用编译方法的好处:
(1)对于相同的源程序代码,编译所产生的目标程序代码执行速度快。
(2)编译所产生的目标程序代码可以脱离编译器独立运行。
采用解释方法的好处:
(1)程序调试执行时,程序纠错、维护方便、灵活。而编译后程序如果有错,需要修改程序后再次编译、连接。
(2)源程序虽然不能脱离解释器独立运行,但源程序代码可以在不同操作系统上运行,可移植性好,这是编译方法没有的特点。