原文:不同设备如何统一语言编程平台高效开发?本文为你揭秘,点击链接查看更多技术内容。

随着数字化时代的发展,手机、平板、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(ArkCompiler Bytecode,即方舟字节码)文件。

运行时架构

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即Profile guided optimization,是一种基于性能分析(profiling)的编译优化技术。

2. UglifyJS是前端开发打包的最常用工具之一,包含JS解析器、代码最小化、压缩、美化的工具集。

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

  1. 易语言可以写鸿蒙系统,华为王成录:鸿蒙 OS 系统是不同设备的统一语言

    IT 之家 4 月 7 日消息 华为消费者业务软件部总裁.AI 与智慧全场景业务部部长王成录受邀在近日举办的 " 压力下前行 "TEDxHouHai 大会上发表了 " 联 ...

  2. R语言编程的高效方法

    R语言编程的高效方法 R语言编程的高效方法 高效编程之细节知识点 并行计算 1.查看核数 2.可以使用并行计算的场景 3.Parellel 包 R语言编程的高效方法 学习资料来源: datacamp ...

  3. 使C#语言编程更加高效的伎俩

    介入或许尽管使用接口来编程 .NET框架包罗类和接口.当你写程序的时辰,你或许懂得你正在用.NET的哪个类.但是,在这类状况下介入你用.NET撑持的接口而不是它的类来编程时,你的代码会变得更加不乱.可 ...

  4. 四自由度机械手c语言编程设计,stm32开发:一种四自由度机械臂的简单算法

    最近在做一个四自由度的机械臂,要实现的功能是,通过输入XYZ三轴的坐标值,让机械臂自动导航到坐标位置. 原理一句话可以概括:输入三个坐标值,通过计算得到底部步进电机的旋转角度和剩余三个舵机的旋转角度. ...

  5. 李白打酒c语言编程,c/c++开发分享蓝桥杯-李白喝酒

    更多精彩文章请关注 问题 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒两斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇 ...

  6. C/C++语言编程的隐患!

    C/C++语言编程的隐患! 本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内.内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决 ...

  7. 基于Go语言的Web服务器开发

    基于Go语言的Web服务器开发 本文将介绍使用Go语言来开发一个简单的Web服务器,其中将包括文件上传和下载功能. 必备条件 Go语言环境 一个文本编辑器 网络服务器 步骤一:编写server.go文 ...

  8. 如何在云计算平台使用R语言编程的快速入门指南

    前言 云计算正逐步成为适用于超出笔记本或台式机处理能力的问题或数据的一种自然延伸.然而,对于完全没有基础的初学者来说,学习使用云计算平台会显得比实际更难. 在本文中,我们用信息图的方式向大家介绍云计算 ...

  9. python语言支持苹果系统吗_Mac系统上的一款Python编程平台

    原标题:Mac系统上的一款Python编程平台 Python for Mac是Mac系统上的一款Python编程平台,由IDLE与Python Launcher两部分组成.Python支持多种编程技术 ...

最新文章

  1. HDOJ 1016 HDU 1016 Prime Ring Problem ACM 1016 IN HDU
  2. cursor_sharing='SIMILAR'将被废弃
  3. C#:对txt文件的读写
  4. 如何重新安装 Linux 的操作管理套件 (OMS) 代理
  5. mysql table keys_MySQL Explain详解
  6. 【Java】浅析Math类
  7. TCP、UDP(网络协议:传输层协议)
  8. python: numpy--函数 shape用法
  9. python教程输入_输入/输出
  10. nginx 各种配置
  11. 微信小程序支付返回信息为空
  12. T-SQL数据类型的细微差别(四)
  13. 探索App保活黑科技
  14. LDAP ObjectClass 详解
  15. 昆石VOS2009/VOS3000 2.1.6.00 Web接口说明书
  16. 35 岁程序员,年后第一天被辞退
  17. 《程序员的思维修炼》读书笔记(思维的重生)
  18. 游戏服务器生成全局唯一ID的几种方法
  19. optics hecht pdf 5_干货分享:这些PDF文件压缩工具都是你不容错过的!
  20. 69节入门python_小渣渣学习笔记 python day69 【Django】

热门文章

  1. 基于 NXP iMX8X 测试 GPU FFT 运算
  2. 【MAC】DELL 3543 黑苹果 10.14.3 安装记录
  3. UG NX二次开发(C#)-导出-导出Parasolid文件(.x_t文件)
  4. 项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)
  5. 异地恋程序员的表白代码:手掌地图
  6. 淘宝账号注销的条件是什么
  7. 计算机设计色彩ppt课件,《多媒体技术》PPT课件.ppt
  8. 地图可视化技术的应用现状
  9. 可穿戴技术发展阶段_可穿戴技术如何改变我们与身体的关系
  10. 【转】IE8与Visual Studio“打架