作业:
(1)简述编译程序与翻译程序、汇编程序的联系与区别。
答:编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一种高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序;编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程;从功能上看,一个编译程序就是一个语言翻译程序。汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN、Pascal或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。
(2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
答:编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段;词法分析是编译过程的第一阶段。主要功能是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。语法分析是编译过程的第二阶段。主要功能是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。中间代码是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。代码优化是对前一阶段产生的中间代码进行变换进行改造, 目的是使生成的目标代码更为高效,即省时间和省空间。最后一个阶段,目标代码生成是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
(3)简述解释程序与编译程序的区别。
答:编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编语言程序或二进制代码程序,这个二进制代码程序在机器上运行以生成结构。应此通过编译程序使得程序员可先准备个一个在该机器上运行的程序,然后这个程序便会以机器的速度运行。但是在不把整个程序全部翻译完成之后,这个程序是不能开始运行,也不能产生任何结果的。编译和运行是两个独立分开的阶段。但在一个交互环境中, 并不需要将这两个阶段分隔开。另一种语言处理程序叫解释程序,它不需要在运行前先把源程序翻译成目标代码,也可以实现在某台机器上运行程序并生成结果。解释程序接受某个语言的程序并立即运行这个源程序。它的工作模式是一个个的获取、分析、并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员以交互方式工作的情况,即希望在获取下一个语句之前了解每个语句的执行结果,雨欣执行时修改程序。
(4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解并谈谈它的基本思想与采用的技术路线,以及它对安卓软件生态会有什么影响。
答:基本思想:方舟编译器则是在开发的时候就已经完成了静态编译,不需要依赖手机本身编译。同时,方舟编译器还提供了更高效的内存回收机制。方舟编译器对代码进行优化,为程序带来更高的性能。采用的技术路线:支持多语言联合优化的编译,在面对采用混合语言开发的安卓应用,方舟编译器可以在开发环境中编译成统一的流程,通过统一的程序表示和优化来执行,效率更高。影响:安卓生态圈被华为方舟编译器打破了原有传统,突破手机机能限制,根据不同的应用采用不同的编译和优化算法,提高了应用执行效率,为广大的用户提供更加愉快的体验。