1)简述编译程序与翻译程序、汇编程序的联系与区别。
答:联系:从功能上看,一个编译程序就是一个语言翻译程序。语言翻译程序把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。
区别:翻译程序是把源语言翻译成目标语言的等价程序。编译程序是把高级语言翻译成像汇编语言或机器语言那样的低级语言的程序。而汇编程序是把汇编语言程序翻译成机器语言程序。
2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
答:编译过程包括了六个主要阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。
- 词法分析:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(一些场合下也称单词符号或符号)。
- 语法分析:在词法分析的基础上将单词序列分解成各类语法短语。
- 语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息。
- 中间代码生成:一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式。
- 代码优化:对前一阶段产生的中间代码进行变换或进行改造,使生成的目标代码更为高效,即省时间和省空间。
- 目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码
3)简述解释程序与编译程序的区别。
答:编译程序是一个语言处理系统,它把一个高级语言程序翻译成某个机器的汇编语言程序或二进制代码程序,这个二进制代码程序在机器上运行以生成结果。
解释程序,它不需要再运行前先把源程序翻译成目标代码,也可以实现在某台机器上运行程序并生产结果。解释程序的输入包括源程序和源程序的初始数据(输入数据),它不生成目标代码,直接输出结果。
4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解并谈谈它的基本思想与采用的技术路线,以及它对安卓软件生态会有什么影响。
答:基本思想:方舟编译器是为支持多种编译语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包括编译器、工具链、运行时等关键部件。
采用的技术路线:编译器输入支持Java/Kotlin程序或者是其他编程语言。编译器处理是IR转换器将前端输入转换成方舟IR,并输送给后端的优化器,最终生成二进制文件,从而实现语言特性、优化及代码生成。编译器输出是将二进制文件通过编译器运行时库编程可执行文件。
对安卓软件生态的影响:方舟编译器支持多语言联合,对安卓开发来说能降低开发者的优化成本;方舟编译器的语言实现能力和优化能力增强,使应用运行时开销更小;编译器与芯片实现软硬件协同优化,对安卓软件而言应用体验更佳;方舟编译器支持多平台合作,为安卓软件开发大大提高了开发效率。