0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

不同设备如何统一语言编程平台高效开发?本文为你揭秘

HarmonyOS开发者 来源:未知 2023-05-11 20:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

随着数字化时代的发展,手机、平板、PC、电视、智能手表、车机等智能设备的普及率越来越高,但不同设备往往搭载了不同的操作系统。面对不同的操作系统与开发框架,应用开发难度大、成本高;同时,不同设备之间交互匮乏、体验割裂,难以为用户带来一致性的应用交互体验。
HarmonyOS是一款面向全场景的分布式操作系统,能够兼容手机、平板、PC、智慧屏、智能手表、车机等智能设备。我们知道,HarmonyOS应用开发需要使用高级编程语言,包括TypeScript(以下简称“TS”)、JavaScript(以下简称“JS”)、基于TS增强的ArkTS等,还需要配套相应的工具链和运行时实现高效开发和运行。面对不同设备,开发者如何使用同一套应用框架开发应用,让用户获得统一的应用交互体验呢?

基于此,方舟编译器(以下称“ArkCompiler”)应运而生。ArkCompiler支持ArkTS/TS应用预先编译优化机器码,带来高性能的运行体验;同时,ArkCompiler的并发实例启动更加轻快,并且提供混淆字节码能力,有效提升了源码的安全性。ArkCompiler助力开发者更加高效、便捷、安全地开发HarmonyOS应用。


什么是ArkCompiler


ArkCompiler作为HarmonyOS应用开发的统一编程平台,包含编译器、工具链、运行时等关键部件,支持ArkTS、TS、JS等高级编程语言的开发、调试调优、运行等业务。

接下来,我们来看一下ArkCompiler编译工具链与运行时的架构。

编译工具链架构

ArkCompiler的编译工具链以ArkTS/TS/JS源码作为输入,将其编译生成为abc(ArkCompilerBytecode,即方舟字节码)文件。

运行时架构

ArkCompiler运行时包含了执行引擎、内存管理器、语言内建标准库等部件,直接运行字节码文件,实现对应语言规范的语义逻辑。



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。

业界JS引擎方案

2.2 ArkCompiler的优势

高性能ArkTS引擎—AOT编译

我们前面已经分析过,大部分情况下,JS的对象类型保持不变,而TS又会携带对象类型。因此,ArkCompiler让ArkTS/TS能够持平静态语言的启动性能,其实就是利用语言里的类型信息,让ArkTS/TS像静态语言一样可以直接编译生成优化机器码。

Bytecode Compiler(字节码编译器)会生成带类型的字节码,AOT Compiler(Ahead-Of-Time Compiler,预先编译器)会根据类型字节码预生成相关的类型对象,结合PGO1的配置文件信息,进行编译优化最终生成对应的优化机器码。

ArkCompiler支持应用运行前就编译出优化机器码和字节码。当应用在移动设备上首次运行时,就可以直接运行高性能优化机器码了。



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%。



ArkCompiler的安全性亮点


字节码混淆对比

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
    +关注

    关注

    80

    文章

    2147

    浏览量

    35624

原文标题:不同设备如何统一语言编程平台高效开发?本文为你揭秘

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    《京东API揭秘:如何让的商品在京东平台快速曝光?》

    在竞争激烈的电商环境中,商品能否快速获得曝光是商家成功的关键因素之。京东作为国内领先的电商平台,其开放平台提供了丰富的API接口,商家提供了强大的技术工具来实现精准、
    的头像 发表于 12-08 17:55 1042次阅读

    个面向单片机、事件驱动的嵌入式开发平台介绍

    核心,打造统一的嵌入式技术生态,广大企业用户和嵌入式开发者们,提供搞可靠性的、高性能的、现代且高
    发表于 12-05 06:26

    C语言编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用C语言的灵活性
    发表于 11-27 06:46

    C语言特性

    1、高效性:直接操作硬件 C 语言代码的执行效率极高,这是其最为显著的优势之。它能够直接访问硬件资源,与底层硬件进行紧密交互,充分发挥硬件的性能潜力。在嵌入式开发中,硬件资源往往十分
    发表于 11-24 07:01

    C语言在嵌入式开发中的应用

    稳定性控制系统(VSC)等关键部件的开发,C 语言都发挥着至关重要的作用。 以工业自动化生产线中的运动控制系统例,C 语言可以编写高效可靠
    发表于 11-21 08:09

    文了解Mojo编程语言

    Mojo 是种由 Modular AI 公司开发编程语言,旨在将 Python 的易用性与 C 语言的高性能相结合,特别适合人工智能(A
    发表于 11-07 05:59

    发布元服务配置本地化基础信息(应用名称、图标)

    满足如下条件: 元服务名称必须与软件包中的名称致,且需符合元服务信息审核规范。 元服务名称不能与本账号下、同一语言、同设备类型的在架元服务的名称相同。当前,
    发表于 10-24 17:42

    物联网平台应用环境监控:低代码零编程简化开发,组态应用

    复杂开发转化为“拖拽组件、关联设备”的简单操作,让企业无需编程也能快速搭建、灵活调整监控系统,适配工业、园区、农业等多场景环境监控需求。 、低代码零
    的头像 发表于 08-29 15:33 624次阅读

    低代码物联网云平台是什么?看完这篇,就领先

    降低物联网应用的开发门槛,让企业能以更高效、更低成本的方式实现设备智能化与业务数字化。 、核心定义:技术融合催生的新型开发范式 低代码物联
    的头像 发表于 08-14 15:16 560次阅读

    【HZ-T536开发板免费体验】2 - 交叉编译仓颉编程语言程序到开发板运行

    感谢电子发烧友和合众恒跃提供的试用机会。 引言 上篇介绍了开箱的结果,接下来测试下华为仓颉编程语言开发板上运行的效果。最近对华为仓颉
    发表于 07-16 21:27

    匠芯创发布新版GUI开发工具 新增多国语言设置等功能

    近日,匠芯创自主研发的GUI开发工具AiUIBuilder推出全新V1.3.0版本。作为款基于LVGL的UI设计工具,AiUIBuilder致力于嵌入式平台的图形应用
    发表于 07-16 13:54

    新品| LLM630 Compute Kit,AI 大语言模型推理开发平台

    LLM630LLM推理,视觉识别,可开发,灵活扩展···LLM630ComputeKit是款AI大语言模型推理开发平台,专为边缘计算和智能
    的头像 发表于 01-17 18:48 1222次阅读
    新品| LLM630 Compute Kit,AI 大<b class='flag-5'>语言</b>模型推理<b class='flag-5'>开发</b><b class='flag-5'>平台</b>

    gitee 支持的编程语言有哪些

    Gitee(码云)是个基于 Git 的代码托管和研发协作平台,类似于 GitHub 和 GitLab。它支持多种编程语言,允许开发者托管和
    的头像 发表于 01-06 09:50 1124次阅读

    Triton编译器支持的编程语言

    编写和优化深度学习代码。Python是种广泛使用的高级编程语言,具有简洁易读、易于上手、库丰富等特点,非常适合用于深度学习应用的开发。 二、领域特定
    的头像 发表于 12-24 17:33 1502次阅读

    工业网络管理新纪元:揭秘五大“利器”,化繁为简的智慧转型

    亟需解决的难题。本文揭秘五大“秘密武器”, 助力工业网络管理化繁为简,迈向智能化、高效化 的新纪元。 秘密武器 统一
    的头像 发表于 12-21 17:51 793次阅读
    工业网络管理新纪元:<b class='flag-5'>揭秘</b>五大“利器”,化繁为简的智慧转型