方舟编译器与MIUI编辑器的区别
小米最新推出的MIUI 12 新增了MIUI编辑器,小米官方宣称,MIUI编辑器能使手机使用不再卡顿。
那么编译器和编辑器,一字之差,它们到底有什么区别呢?
华为方舟编译器的产生背景
因为处理器只能识别最低级的机器语言,也就是00100101010101.......这种完全由0和1组成的语句,然而安卓系统却是用高级语言编写出来的,所以软件必须通过编译,将高级语言编译成最低级的机器语言,才能被机器识别,从而实现运行,编译器就是用来干这项工作的。安卓系统作为被谷歌买来的操作系统,自面世之初就被乔布斯嗤之以鼻,一方面是Android曾抄袭iOS,另一方面则是安卓系统糟糕的运行机制。安卓系统最初采用的就是完完全全的“边解释边执行”的方式,运行效率只能用惨不忍睹来形容。
好在google意识到了问题的严重性,及时进行改良。Android5.0~Android6.0,系统会在安装时把所有代码全部编译成机器码。但是实际上软件在运行时,被人们用到的只有一小部分功能,所以Android7.0之后,安卓系统在安装时不再编译代码,这显著提升了软件安装速度。但是软件初次使用时只能边解释边执行。之后,系统通过收集经常被运行的那部分代码信息。在空闲的时候,再将这些常用代码编译成机器码。这种方法虽然一定程度上提高了系统运行效率,但却始终绕不开虚拟机的桎梏,安卓系统在长时间使用后,仍然无法避免卡顿问题。
为了彻底解决安卓系统的缺陷,同时为了自研操作系统能够早日顺利上位,华为在p30pro发布会上正式发布方舟编译器。
方舟编译器的独特之处
在应用程序中,有一些公共代码是需要反复使用的,方便起见,就将这些代码单独组成一个共享函数库,在程序运行到相关部分时,通过链接调用这些库文件,类似于子程序的作用。传统的编译器采用的都是动态编译的方式,可执行文件需要附带一个体积较小的动态链接库。编译过的软件在运行时,动态库由系统动态加载到内存中供程序调用。系统载入一次动态库,不同的程序就可以得到内存中相同的动态库的副本,这种方式减少了内存占用,而且编译工作量较小。但是动态编译,即使是很简单的程序也必须附带一个相对庞大的链接库,且在程序运行时会频繁地通过链接调用动态库中的文件,需要动态库实时响应,一同工作。
华为方舟编译器则是采取了静态编译的方式,是首个取代了安卓虚拟机模式的静态编译器。其在编译可执行文件的时候,将可执行文件需要调用的对应静态库中的部分提取出来,链接到可执行文件中去。也就是说,静态库,在编译中的链接阶段,被直接复制到程序中。可执行文件在运行的时候不依赖于动态链接库,客观来讲,这将增大可执行文件的体积,但在程序运行时省去了繁琐的调用过程,程序可摆脱静态库,独立运行。除此之外,方舟编译器对高级语言一视同仁,全部编译成机器语言,绕开虚拟机,使程序能够在手机上直接运行,实现了架构级优化,大大提高了系统运行效率。
用华为官方的介绍来讲,编译器是连接人类世界与机器世界的一座桥梁,起着翻译官的重要作用,它是在应用打包成apk的时候,直接把Java代码编译成机器码,使得用户下载到的安装包就是被最优化的机器指令,系统可以直接执行,cpu直接运行被编译好的命令。从根本上解决了现有安卓系统边解释边执行带来的卡顿和低效,使得安卓的运行流畅度大幅度提升,后台内存占有率也随之下降,方舟编译器就这样从底层技术上,革命性地提升了用户体验。
从客观角度来讲,方舟编译器的初衷是非常棒的,但是真的要实现起来,仍然是路漫漫其修远兮,华为从2009创建编译组开始,到2013年华为方舟编译器架构构想正式提出,再到2019年方舟编译器的正式应用,这其间花了整整十年。而前方等待方舟的仍然是无尽的征程,方舟编译器的未来必然还要投入巨量的财力和人力,方舟的前途如何,我们只能拭目以待。
MIUI编辑器又是何方神圣?
MIUI编辑器悄然上架,着实有些让人摸不到头脑。MIUI负责人在小米10青春版发布会上,对过渡动画做了将近40分钟的讲解,但对MIUI编辑器却只字未提。我不知道是不值一提,还是像有些网友说的那样“小米是在憋大招”,如果真是如此的话,小米隐藏的实在太深了。
但是细心的网友可能还记得,小米之前曾经推出过MIUI主题编辑器,不知道这两者是否有异曲同工之妙
总而言之,编辑器和编译器完全是两码事。华为的方舟编译器十年磨一剑,尚且前途未卜。编译器的开发不但需要大量的技术储备,人才资源和研发投入,更需要拿出板凳敢做十年冷的韧劲,以奋斗者为本,长期艰苦奋斗。小米的规模虽然赶不上华为,但也在不断努力,MIUI12就给我们带来了很多惊喜。小伙伴们不要盲目跟风沸腾,戒骄戒躁,国产需要时间,请相信中国品牌会越来越好!