随着数字化时代的发展,手机、平板、PC、电视、智能手表、车机等智能设备的普及率越来越高,但不同设备往往搭载了不同的操作系统。面对不同的操作系统与开发框架,应用开发难度大、成本高;同时,不同设备之间交互匮乏、体验割裂,难以为用户带来一致性的应用交互体验。HarmonyOS是一款面向全场景的分布式操作系统,能够兼容手机、平板、PC、智慧屏、智能手表、车机等智能设备。我们知道,HarmonyOS应用开发需要使用高级编程语言,包括TypeScript(以下简称“TS”)、JavaScript(以下简称“JS”)、基于TS增强的ArkTS等,还需要配套相应的工具链和运行时实现高效开发和运行。面对不同设备,开发者如何使用同一套应用框架开发应用,让用户获得统一的应用交互体验呢?基于此,方舟编译器(以下称“ArkCompiler”)应运而生。ArkCompiler支持ArkTS/TS应用预先编译优化机器码,带来高性能的运行体验;同时,ArkCompiler的并发实例启动更加轻快,并且提供混淆字节码能力,有效提升了源码的安全性。ArkCompiler助力开发者更加高效、便捷、安全地开发HarmonyOS应用。ArkCompiler作为HarmonyOS应用开发的统一编程平台,包含编译器、工具链、运行时等关键部件,支持ArkTS、TS、JS等高级编程语言的开发、调试调优、运行等业务。
接下来,我们来看一下ArkCompiler编译工具链与运行时的架构。ArkCompiler的编译工具链以ArkTS/TS/JS源码作为输入,将其编译生成为abc(ArkCompilerBytecode,即方舟字节码)文件。ArkCompiler运行时包含了执行引擎、内存管理器、语言内建标准库等部件,直接运行字节码文件,实现对应语言规范的语义逻辑。
动态类型语言由于运行前无法确定对象类型,需要等程序运行一段时间后,JIT Compiler(Just-In-Time Compiler,即时编译器)才能根据抓取到的运行信息明确对象类型并编译生成对应的优化机器码。
而静态类型语言则可以根据确定的对象类型,直接编译生成对应的优化机器码,启动即可获得高性能,二者的启动性能差异比较显著。编译优化视角主要区别
基于JS拓展出类型概念的TS已经成为了前十流行的语言,然而业界目前并没有直接运行TS的引擎,如需运行TS,要先将TS转换成JS,再通过JS引擎运行。那么,TS的类型信息也就在转换过程中丢弃了,运行时无法接收类型信息并作相应的优化。然而我们发现,大部分情况下,JS程序中的对象类型是单一固定的,这也表明JS的对象类型大部分情况下保持不变。TS的类型是不是也可以在代码运行前直接做编译优化呢?2.1 业界JS引擎方案
JS开发者直接把源码打到应用包里,当运行时,引擎解析JS源码需要先将JS源码编译成字节码,然后再执行字节码。引擎抓取剖析一些运行时的信息,再使用JIT Compiler在运行时编译生成优化机器码,最后才能执行优化机器码,这样才能以比较高的性能执行JS。2.2 ArkCompiler的优势
我们前面已经分析过,大部分情况下,JS的对象类型保持不变,而TS又会携带对象类型。因此,ArkCompiler让ArkTS/TS能够持平静态语言的启动性能,其实就是利用语言里的类型信息,让ArkTS/TS像静态语言一样可以直接编译生成优化机器码。Bytecode Compiler(字节码编译器)会生成带类型的字节码,AOT Compiler(Ahead-Of-Time Compiler,预先编译器)会根据类型字节码预生成相关的类型对象,结合PGO1的配置文件信息,进行编译优化最终生成对应的优化机器码。ArkCompiler支持应用运行前就编译出优化机器码和字节码。当应用在移动设备上首次运行时,就可以直接运行高性能优化机器码了。
3.1 业界JS引擎的Actor并发模型
上图左侧是业界并发实例的运行情况,由于JS是一门单线程语言,JS引擎在设计之初也没有考虑多线程运行的支持和优化。从Actor并发模型的示例图中,我们可以看出,每一个并发实例都创建了一个完整的引擎实例来支持运行。它的优势在于,类Actor的接口可以让开发者不需要关心共享状态和锁,容易维护和测试,而且非常容易把并发实例迁移成分布式的服务。不过在移动应用的场景中,这样的实现也是HTML规范把Web Worker描述成启动慢并且内存开销大的主要原因。3.2 ArkCompiler的Lite Actor并发优势
上图右侧是ArkCompiler实现并发的运行情况。ArkCompiler的Lite Actor的实现,实质还是Actor模型,但是通过共享进程内各并发实例之间的不可变对象,把基础设施分层和轻量化,在各实例之间重用了一些公共基础设施,让并发实例运行更轻快。ArkCompiler的实现中,新增一个并发实例只需要拉起相应独有的部分。基于此,我们和浏览器头部引擎做了一个对比,在一定负载下,我们的并发启动时间和启动内存取得了显著提升。根据实验数据表明,相较于业界的方案,Lite Actor并发实例启动时间和启动内存均优化了50%。
4.1 业界JS引擎的安全性
现行的JS引擎,往往采用只有名称混淆的UglifyJS2,应用包中的源码也是可见可调试,商业应用源码的安全性相对较差。4.2 ArkCompiler的安全性优势
在ArkCompiler中,Hap包包含了混淆后的字节码,相较于直接携带源码,提高了开发者代码的安全性。HarmonyOS的代码保护,打包的是二进制的ArkCompiler字节码。即使经过ArkCompiler编译运行时提供的Disassembler反编译,也只有字节码能被看到,无法直接修改调试运行。
目前,运行在ArkCompiler上的开发语言ArkTS,在TS的基础上主要拓展了声明式范式和状态模式的UI编程。往后我们会在静态模式、并发、安全等方面持续增强,让ArkTS成为更卓越的应用开发语言。面对IoT时代的发展,我们会结合HarmonyOS应用生态、开发体验和用户体验等方面的需求,让ArkCompiler与硬件、操作系统、开发框架、编程语言协同设计优化;同时,在多语言统一编译运行和多设备支持的基础上,ArkCompiler让HarmonyOS应用的开发和运行效率显著提升。未来,ArkCompiler在持续优化基础体验的同时,会更进一步结合HarmonyOS万物互联的需求,在跨端迁移、多端协同等创新场景,从编译器和运行时等方面提供底层的解决方案和优化机制,提升分布式应用的开发和运行体验。1. PGO即Profileguided optimization,是一种基于性能分析(profiling)的编译优化技术。2. UglifyJS是前端开发打包的最常用工具之一,包含JS解析器、代码最小化、压缩、美化的工具集。
点击下方链接,查看更多文章
DevEco Studio 3.1 Beta新特性知多少
DevEco Device Tool 3.1 Release新版本发布
全新适配鸿蒙生态,Cocos引擎助力3D应用开发
HarmonyOS Connect认证测试
欢迎点击|阅读原文|
进入了解更多ArkCompiler架构信息
原文标题:不同设备如何统一语言编程平台高效开发?本文为你揭秘
文章出处:【微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
原文标题:不同设备如何统一语言编程平台高效开发?本文为你揭秘
文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。
相关推荐
在人工智能领域,大语言模型(Large Language Models, LLMs)背后,离不开高效的开发语言和工具的支持。下面,AI部落小编为您介绍大
发表于 12-04 11:44
•79次阅读
步。 1. 确定目标和兴趣 在选择编程语言之前,首先要明确自己的目标和兴趣。这包括你想要开发什么类型的项目,以及你对哪些技术领域感兴趣。例如,如果你
发表于 11-15 09:37
•236次阅读
: 选择编程语言时,应考虑项目需求、个人兴趣以及语言的适用性。例如,如果你对Web开发感兴趣,那么学习JavaScript可能是
发表于 11-15 09:35
•237次阅读
串口屏作为一种常用的显示和交互设备,支持多种编程语言和开发环境。以下是对串口屏支持的编程
发表于 11-13 11:45
•202次阅读
随着物联网(IoT)和智能设备的发展,ARM开发板因其低功耗、高性能和灵活性而受到开发者的青睐。 C语言 C语言是
发表于 11-05 11:14
•309次阅读
MCU编程语言 MCU编程语言是用于编写MCU程序的高级编程语言,它们使得
发表于 11-01 11:51
•597次阅读
C语言作为一种历史悠久的编程语言,自其诞生以来,一直在软件开发领域扮演着重要角色。它以其
发表于 10-29 17:30
•232次阅读
Orin是一款高度集成、高性能的车载计算平台,由英伟达推出,并采用了英伟达自家的Volta架构GPU和其他高级处理器技术。关于Orin芯片的编程语言支持,可以从以下几个方面进行介绍:
发表于 10-27 16:45
•239次阅读
。 高效性:CLData语言具有高效的编程能力,可以快速完成数控机床的编程任务。 NCL(Numerical Control Langu
发表于 10-23 15:52
•258次阅读
的IT基础设施管理功能,帮助企业在日益复杂的云计算环境中实现高效管理和成本优化,Rak小编统一多云管理平台怎么用?
发表于 08-14 11:28
•216次阅读
在工业自动化领域,PLC(Programmable Logic Controller,可编程逻辑控制器)作为一种核心控制设备,其编程语言的选
发表于 06-14 16:58
•1359次阅读
。CNC系统广泛应用于机械制造、汽车制造、航空航天等领域。 CNC系统的编程语言是实现CNC系统控制功能的关键技术之一。以下是对CNC系统可用编程语
发表于 06-14 15:54
•1075次阅读
维护的上位机软件至关重要。本文将详细介绍几种常用的上位机软件开发编程语言,并分析它们的优缺点。 C/C++ C和C++是两种广泛使用的编程
发表于 06-06 10:44
•1613次阅读
FPGA(现场可编程门阵列)开发涉及多种编程语言和技术.
发表于 03-27 14:34
•1401次阅读
和VHDL都是用于逻辑设计的硬件描述语言,并且都已成为IEEE标准。它们能形式化地抽象表示电路的结构和行为,支持逻辑设计中层次与领域的描述,具有电路仿真与验证机制以保证设计的正确性,并便于文档管理和设计重用。 fpga用什么语言开发
发表于 03-14 17:09
•3424次阅读
评论