您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[华为终端有限公司]:鸿蒙编程语言白皮书 - 发现报告

鸿蒙编程语言白皮书

2025-06-20华为终端有限公司惊***
AI智能总结
查看更多
鸿蒙编程语言白皮书

2版权所有©华为终端有限公司2025。保留一切权利。本材料所载内容受著作权法的保护,著作权由华为公司或其许可人拥有,但注明引用其他方的内容除外。未经华为公司或其许可人事先书面许可,任何人不得将本材料中的任何内容以任何方式进行复制、经销、翻印、播放、以超级链路连接或传送、存储于信息检索系统或者其他任何商业目的的使用。商标声明华为,以上为华为公司的商标(非详尽清单),未经华为公司书面事先明示许可,任何第三方不得以任何形式使用。注意华为会不定期对本文档的内容进行更新。本文档仅作为使用指导,文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。华为终端有限公司地址:广东省东莞市松山湖园区新城路2号网址:https://consumer.huawei.com 31)高效开发····································鸿蒙编程语言整体框架CONTENT鸿蒙编程语言适用场景1)ArkTS概述······································2)仓颉概述···································3)C/C++概述·································4)语言互操作介绍······························3)安全········································4)跨平台·········································5)技术资产保护································2)高性能················································ O1O2 18678925434748 O3 4鸿蒙编程语言演进策略1)语言演进整体策略······························2)智能化演进策略································3)未来一年语言演进策略························ 545658 51第一章:鸿蒙编程语言整体框架鸿蒙是多语言生态,ArkTS、仓颉和C/C++充分互补。ArkTS是动态类型编程语言,主打易学易用、生态丰富、极简开发、持续创新四大特征;仓颉是静态类型编程语言,主打高性能、强安全、跨平台、智能化等特性。为满足不同业务场景诉求及不同开发者编程习惯,两者长期协同发展和长期演进,并保持生态兼容。ArkTS和仓颉均通过垃圾回收机制自动管理内存,C/C++支持Native开发,需开发者手动管理内存,三种语言相互配合,共同支撑鸿蒙应用生态构图1-1:鸿蒙APP架构示意图 建。 ArkTS概述ArkTS是鸿蒙应用开发高级语言。ArkTS基于TypeScript(简称TS),保持了TS的基本语法和风格,同时通过引入静态类型校验模式和类型推断增强规则,强化开发期静态检查和分析能力,提升代码健壮性,并实现更好的程序执行稳定性和性能。ArkTS同时也支持与TS/JavaScript(简称JS)高效互操作,可以完全复用TS/JS生态,已广泛应用于鸿蒙应用生态。在标准TS的基础上,ArkTS结合鸿蒙应用开发的诉求进行了创新和能力扩展,主要新增四大特性如下:并发编程模型:ArkTS新增提供TaskPool和Worker两种并发编程API供开发者使用。同时,ArkTS进一步提出了Sendable对象模型的机制来支持对象在并发任务间的引用传递,极大提升ArkTS对象在并发实例间的通信性能。声明式语法:ArkTS结合ArkUI提供声明式UI描述、状态管理、渲染控制等强大的UI开发能力,拥有简洁且富有表达力的语法,通过简洁的语法和实时预览功能,大大提高了UI开发的效率,使得代码更易于编写和阅读。强大的标准库:ArkTS拥有一个功能丰富的标准库,涵盖了从数据结构、算法到输入输出等方方面面,例如:高精度浮点运算、二进制Buffer、XML生成解析转换和多种容器库等丰富的操作方法,帮助开发者简化开发工作,提升开发效率。模块化管理:ArkTS支持应用模块化开发、编译、打包和运行,例如:应用模块化按需加载能力,方便大型复杂应用的多模块业务场景,高性能启动运行,提高了代码的模块化管理和重用性。 6 7方舟编译运行时(ArkCompiler)支持ArkTS、TS、JS的编译运行,目前它主要分为ArkTS编译工具链和ArkTS运行时两部分。其中ArkTS编译工具链负责在开发侧将高级语言编译为方舟字节码文件(*.abc),而ArkTS运行时则负责在设备侧运行字节码文件执行程序逻辑。ArkTS会结合鸿蒙应用开发的需求持续创新,平滑演进。进一步丰富并发编程、完善类型系统、现代化语法等显著改进和新特性,使开发者能够更快速地构建稳定且性能优越的应用。仓颉概述仓颉是鸿蒙应用开发高级语言。仓颉作为一款面向鸿蒙应用开发的现代编程语言,是一款静态类型、静态编译的编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的DevEco Studio工具链支持,为鸿蒙应用开发者打造友好开发体验和卓越程序性能。其具体特性表现为:高性能:仓颉基于静态类型和静态编译优化技术,具有“编译前端+编译后端+运行时”的全栈垂直优化能力,为鸿蒙应用提供卓越的性能支持。仓颉采用内存共享的并发模型,提供轻量用户态线程和易用的无锁并发数据结构让并发编程变得轻松高效;提供了低时延高效率的自动内存管理,支持鸿蒙应用以更高帧率、更少内存流畅运行,从而降低设备功耗,延长续航。仓颉运行时采用轻量化设计,使仓颉应用具有较低的基础开销。通过仓颉包按需动态加载技术,仓颉应用启动/运行占用资源更少。 8强安全:仓颉通过静态类型系统和自动内存管理,确保程序内存安全;同时,仓颉提供多种编译时和运行时检查,包括数组下标越界检查、类型转换检查、数值计算溢出检查、以及字符串编码合法性检查等,能够及时发现程序运行中的错误。跨平台:仓颉支持基于静态编译至机器码的跨OS平台执行能力,允许开发者实现“同构开发、异构运行”的跨OS平台代码共享,支持OpenHarmony、Android、iOS、Windows、Linux、MacOS等OS平台。智能化:仓颉通过元编程扩展出面向LLM智能体编程的Agent DSL,该语言提供多种特性有效简化Agent编写复杂度,包括Agent声明式配置、提示词模式、多Agent协同、多轮对话等;同时,该语言兼容MCP生态,能够让开发者快速开发智能体应用。C/C++概述鸿蒙应用开发全面支持C/C++语言开发能力,为开发者提供开发套件(NDK)及配套工具链。基于C/C++实现的功能模块,可通过跨语言互操作封装为ArkTS和仓颉扩展模块,提供给ArkTS和仓颉高效使用。C/C++在应用开发中的适用场景高性能计算场景:游戏引擎、物理仿真等计算密集型任务。硬件加速场景:需要深度优化CPU指令集的专用算法库。生态复用场景:复用存量代码。 C/C++支持组件为构建符合鸿蒙技术标准的应用开发能力,提供了一套完整的C/C++开发组件体系,具体包括:NDK(Native Development Kit):作为鸿蒙应用开发的核心工具套件,NDK对外发布提供完整的编译工具链、系统C API接口、C++运行时环境支持。libc标准运行时库:基于开源MUSL库作优化,鸿蒙系统实现了标准C语言运行时支持、功能扩展、系统级性能的提升。标准C++运行时库:采用LLVM项目的libc++作为基础,提供完整的C++标准库实现,支持C++11、C++14、C++17和C++20标准。编译工具链:选用毕昇编译器作为官方指定的C/C++编译器,确保符合最新语言标准规范、支持特有的编译优化、提供稳定的工具链支持。这套组件体系共同构成了鸿蒙系统对开发能力的完整支持,为开发者提供了高效、稳定的C/C++开发环境。语言互操作介绍ArkTS与C/C++互操作为了更好复用TS/JS的生态,ArkTS语言提供Node-API的兼容实现,提供ArkTS与C/C++的跨语言操作;Node-API是基于Node.js 12.x的Node-API规范扩展开发的机制,为开发者提供了ArkTS与C/C++模块之间的交互能力。它提供了一组稳定的、跨平台的API,可以在不同的操作系统上使用。涉及到互操作的主要场景如下: 9 10系统可以将框架层丰富的模块功能通过ArkTS接口开放给上层应用。应用开发者也可以选择将一些对性能、底层系统调用有要求的核心功能用C/C++封装实现,再通过ArkTS接口使用,提高应用本身的执行效率。Node-API的组成架构图1-2:Node-API的组成架构Native Module:开发者使用Node-API开发的模块,用于在ArkTS侧导入使用。Node-API:实现ArkTS与C/C++交互的逻辑。ModuleManager:Native模块管理,包括加载、查找等。ScopeManager:管理napi_value的生命周期。ReferenceManager:管理napi_ref的生命周期。NativeEngine:ArkTS引擎抽象层,统一ArkTS引擎在Node-API层的接口行为。 11Node-API的关键交互流程图1-3:Node-API的关键交互流程ArkTS和C++之间的交互流程,主要分为以下两步:初始化阶段:当ArkTS侧在import一个Native模块时,ArkTS引擎会调用ModuleManager加载模块对应的so及其依赖。首次加载时会触发模块的注册,将模块定义的方法属性挂载到exports对象上并返回该对象;调用阶段:当ArkTS侧通过上述import返回的对象调用方法时,ArkTS引擎会找到并调用对应的C/C++方法。仓颉与C/C++互操作仓颉支持与C互操作,即支持仓颉函数与C语言函数的互相调用以及跨语言数据转换。对于C++代码,开发者首先需要把C++接口封装成C接口,再由仓颉通过互操作调用。 12仓颉与C互操作机制考虑兼顾互操作语法的简洁性,以及低互操作开销,主要提供以下能力:声明式接口描述:支持@C注解和foreign关键字,允许在仓颉代码中声明被调用的C函数接口;低互操作开销:在仓颉侧使用@C和foreign标注的结构体和函数,其实现与C在二进制层面保持兼容;提供inout关键字,可将仓颉栈上的变量引用传递到C侧,减少跨语言拷贝;提供@FastNative注解标注foreign函数,减少调用被标注函数的运行时开销;支持将仓颉Array<T>中数据的原始指针实例传递到C侧访问,避免大块内存拷贝;以上特性合理使用,可帮助开发者降低跨语言开销。以下是一个示例,假设C侧有如下函数,会被仓颉代码调用:1.#include <math.h>2.3.typedefstruct{4.doublex;5.doubley;6.} Point;7.8.Point rotate(Point input,doublet) {9.Point output;10.output.x = input.x * cos(t) - input.y * sin(t);11.output.y = input.x * sin(t) + input.y * cos(t);12.returnoutput;13.}对应的,仓颉侧可以通过编写如下代码来调用该C函数:1.@C2.structPoint { //用仓颉结构体语法声明C结构体3.Point(var x: Float64, var y: Float64) {}4.}5. 6.//用仓颉函数语法声明C函数7.@FastNative8.foreign func rotate(point: Point, alpha: Float64): Point9.10.func callInterop