摘要:
文章摘要图/表:
研究背景 随着移动应用和微服务等应用软件的快速发展,开发人员需要一种现代应用级编程语言,能够兼顾开发效率、安全性、可扩展性与性能,以提升开发者体验并保障应用运行效果。同时,移动设备等场景的资源约束(有限CPU、内存)对语言的低延迟、低内存占用提出了更高要求。现有编程语言在适配鸿蒙生态的特定需求(如移动设备资源约束、低UI卡顿、高效跨语言互操作)方面存在不足,难以满足应用开发的综合诉求。
目的 本文工作设计并实现一款适用于移动应用开发、微服务等场景的现代应用级编程语言——仓颉(Cangjie),实现简洁性、安全性、可扩展性与性能的平衡,为开发者提供优异的编程体验和卓越的应用性能,推动鸿蒙操作系统开发者生态建设。
方法 本文研究主要聚焦于仓颉语言的设计、编译器前端与后端实现、运行时系统构建及性能验证。1)语言设计:采用静态类型、静态编译模式,支持多范式编程(过程式、面向对象、函数式);引入类型扩展机制实现现有类型的功能扩展与接口实现,支持宏编程、注解、反射等元编程机制,原生支持C语言互操作(通过@C注解与unsafe上下文)。2)编译器实现:前端设计双向类型推断算法,通过迭代执行类型检查与类型参数求解来解决泛型类型实参推断问题;引入仓颉特定的高层中间表示(CHIR),保留嵌套控制流、类层次等高层语义,支持精准的语义感知优化(如去虚拟化、边界检查消除);后端基于LLVM扩展GC相关内在函数与自定义编译通道,优化堆内存操作追踪与栈映射生成。3)运行时系统:实现轻量级用户态线程管理,支持用户态上下文切换、抢占式调度与栈扩展;设计并发压缩式GC,采用半STW屏障减少暂停时间,通过线程本地内存块与碰撞指针分配器提升内存分配效率。4)性能验证:基于计算机语言基准测试套件(Benchmarks Game)实现测试用例,与Java和Golang等语言对比执行时间;设计观察者线程法评估GC尾延迟;构建含80个测试用例的套件评估内存占用;针对C语言互操作设计循环迭代测试评估性能。
结果 本文主要结果包括:1)实用的加强双向类型推断算法,相比现有工作支持能力更强的泛型参数推断和高效重载解析;2)高层中间表示CHIR支持更多语义感知优化;3)语言设计、编译前后端优化以及高性能语言运行时三者有机结合,实现高性能、低时延,包括在Benchmarks Game等测试集上平均执行时间优于Java和Golang等主流应用编程语言,GC时延大多数情况下低于1ms,内存占用相较Java降低约20%等。后续有待持续评测语言在更多测试集以及实际应用场景下的性能表现,并对开发效率、工具可用性和成熟度、编译器易维护性等方面持续开展深入分析和评测。
结论 仓颉语言通过支持多范式编程、增强型双向类型推断、CHIR中间表示、LLVM扩展后端与并发压缩式GC的协同设计,实现了简洁性、安全性、可扩展性与性能的平衡,在执行性能、GC延迟、内存占用及跨语言互操作效率上较现有主流应用级语言呈现出一定优势,面向移动应用开发所面临的资源约束、低延迟需求等核心问题取得了较大进展。当前仓颉已成功应用于鸿蒙OS移动应用、UI框架、微服务等多个场景。除了支持鸿蒙生态全场景应用开发,仓颉语言编译器与运行时的优化方案也可为其他资源受限场景的编程语言设计提供借鉴。