第一次作业:了解 编译原理
2.作业
1)简述编译程序与翻译程序、汇编程序的联系与区别。
翻译程序:把高级语言源程序翻译成目标代码的软件。
编译程序:先完整编译后运行的程序,比如有C、C++之类的;解释程序是一句一句翻译且边翻译边执行的程序,例如有JavaScript和Python。
汇编程序:是把汇编语言源程序翻译成机器语言程序。
编译程序与汇编程序的区别:将一段“高级语言”编译成目标语言是诸如汇编语言或机器语言之类的“低级语言”,这个过程的翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这个过程翻译程序称为汇编程序。
2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
编译过程主要四个阶段:预编译处理、编译优化程序、汇编程序、 链接程序。
预编译处理:把.c 文件转化成.i文件。
编译优化程序:把.c/.h文件转换成.s文件。
汇编程序:把.s 文件转化成.o文件 。
链接程序:把.o文件转化成可执行程序。
3)简述解释程序与编译程序的区别。
编译程序是把高级语言转化为低级语言,而解释程序是把某高级语言进行解释并控制计算机执行,然后会出现的执行结果,然后再解释下一句。
4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解并谈谈它的基本思想与采用的技术路线,以及它对安卓软件生态会有什么影响?
基本思想:
方舟编译器首次在Java领域将虚拟机干掉了,也是软件史上首次将Java/C/C++等混合代码一次编译成机器码直接在手机上运行,彻底告别Java的JNI额外开销,也彻底告别了虚拟机GC内存回收带来的应用进程掉线,使操作流畅度大幅提升。如果说目前最新的安卓系统是和谐号动车,那么经方舟编译的安卓系统便是高铁,是“复兴号”。
华为手机直接通过方舟编译器替换了Android system-server的所有后台服务,这一项就已经足够让华为EMUI比其他安卓系统更快一步。
技术路线:
该编译器将java和C(JNI)编译成一套可执行文件
输入用户源代码,先将其中java语言进行优化,之后将它转换为C语言(JNI),从而提高执行效率。
影响:
做到混合语言的统一中间表示和完全静态编译,它干掉了虚拟机,消除了JNI开销,告别了GC内存回收的“间歇性”卡顿,以及其他很多开销。同时,为开发者进行代码优化提供了一个更广阔的舞台。