1)简述编译程序与翻译程序、汇编程序的联系与区别。
编译程序是先完整编译后运行的程序,翻译程序是指把高级语言源程序翻译成机器语言源程序的软件,汇编程序是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。
编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。
2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
编译过程通常分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个主要阶段。各个阶段的主要功能如下:
词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出一个个单词,并表示成计算机内部的形式。
语法分析阶段:在词法分析的基础上,将单词序列分解成各类语法短语,确定整个输入串是否构成语法上正确的程序。
语义分析阶段:审查源程序有无语义错误,为代码生成阶段收集类型信息。
中间代码生成阶段:将源程序翻译成一种复杂性介于源程序与目标程序之间的内部形式(中间代码)。
代码优化:对前阶段产生的中间代码进行等价交换,目的是使将来生成的目标代码更为高效。
目标代码生成:把中间代码变换成待定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
3)简述解释程序与编译程序的区别。
编译程序能生成目标程序,而解释程序不能。
编译程序是整体编译完了,再一次性执行。
而解释程序是一边解释,一边执行。 解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快。
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解它的基本思想与采用的技术路线,谈谈它对安卓软件生态会有什么影响。
编译器是一种将“高级语言”翻译为能直接被计算机或虚拟机执行目标代码的程序,编译器的效率直接影响程序运行性能和效率。
谷歌此前多次调整过安卓的编译器模式,从Dalvik虚拟机、到JIT、再到ART,在Android 7.0版本,谷歌采用了AOT+ JIT+解释执行的混合模式,为了达到一个安装时间、空间占用和性能之间的平衡。
但熊军民认为目前Android依然存在边解释边执行的代码运行方式,Google也多次调整编译代码的模式,但是相比iOS依然有性能差距。
而方舟编译器则解决了这一问题。
方舟编译器最大的优势在于它绕过了VM。方舟编译器是首家完全替代语言虚拟机的静态编译器,完全不需要解释器。兼顾Java开发效率和C语言运行效率的编译器。
相比安卓现有的编译机制,方舟编译器拥有3大优点:
1.方舟编译器是一种静态的编译方式,而现有的安卓系统,运行一个应用程序首先启动虚拟机,然后读入应用程序代码,逐条解释执行。会占用较多的处理资源,影响程序执行的效率。当然,也有包括AOT或JIT等提前或运行时的编译技术,把部 分程序转换成机器码直接在CPU上执行。但是,仍就无法做到100%做到摆脱虚拟机的执行,这也是当前安卓阵营不如IOS阵营的关键。
2.华为方舟编译器的静态编译方式可将语言里的动态特性直接翻译成机器码,手机安装应用程序后可全速运行程序,彻底消除虚拟机的弊病,带来效率上的极大提升。
3.方舟编译器是在开发环境部署的编译器,而现有编译过程,主要发生在手机上,带来额外的资源消耗。
有鉴于此,华为方舟编译器能带来系统性能的显著提升。
1.EMUI 9.1对系统主要服务System Server进行静态编译化。带来了系统流畅度提升24%,系统响应性能提升44%以上的收益。
2.微博极速版实现了静态化编译后,流畅度提升高达60%。