1)简述编译程序与翻译程序、汇编程序的联系与区别。
编译程序完成从源码到可执行程序的工作,是一个完整的过程。翻译程序将高级语言翻译至低级语言。汇编程序将汇编代码翻译成二进制的机器码。
2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
词法分析:以字符串形式读入源代码,提取保留字、标识符和运算符。
语法分析:将提取出的词列表分解成语法树。
语义分析:检查语义错误,例如运算符的作用对象是否合法。
中间代码生成:将源程序变成一种内部表示形式,便于翻译成目标代码。
代码优化:对中间代码进行变换,例如源码中含有常量运算,则事先计算好运算结果以提高目标程序运行效率。
目标代码生成:将优化后的中间代码翻译为特定机器上的二进制的机器码或汇编代码。
3)简述解释程序与编译程序的区别。
编译程序将源码翻译为二进制可执行程序或字节码文件,可直接在特定机器上执行或依赖虚拟机运行,例如gcc和javac。解释程序逐个获取语句并执行,直接输出运行结果,例如cpython和Linux Bash
4)了解新开源的华为方舟编译器,理解并谈谈它的基本思想与采用的技术路线,以及它对安卓软件生态会有什么影响。
基本思想:支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。
技术路线:Java/Kotlin字节码-->IR转换器-->方舟中间表示-->优化-->二进制文件+编译器RT-->可执行文件
影响:原生支持Java/Kotlin,对开发者而言改动小,不需要重新学习,只是换一个编译器。应用程序不再需要JRE,和ios一样直接运行二进制机器码,没有虚拟机的性能损耗,用户体验提升。打破西方的技术垄断。