近日,刚刚召开的华为开发者大会(HDC 2024)上,华为内部研发已久的国产自主编程语言仓颉终于正式对外官宣!
仓颉语言(Cangjie Language)得名于中国古代的文字发明者仓颉,象征着创新和文化传承。当前在鸿蒙原生应用的开发中,支持声明式 UI 和一次开发、多端部署的 ArkTS 语言已经被广泛使用。
填补国产编程语言的空白
根据公开数据显示,中国开发者使用的编程语言主要是 Java、JavaScript、Python、C#、HTML、SQL、C++ 等。而这些主流编程语言均由国外厂商及科研机构把控。全球编程语言发展水平的高地主要集中在欧洲和美国。并且在当前复杂的国际形势下,多数主流编程语言可能存在断供风险。
考虑以上两方面因素,自研编程语言确有必要,但打造一门编程语言并不容易。计算机领域有许多学科分支,包括人工智能、计算机视觉、机器学习和自然语言处理等。除此之外,还有系统学科,涵盖计算机体系结构、网络、安全、数据库和编程语言。这其中,编程语言的研究人员非常少。例如,顶级会议 PLDI 每年只收录大约 77 篇论文,而人工智能领域的顶级会议则可以收录上千篇。
编程语言领域的课程难度极高,国内几乎没有相关书籍和课程,教材基本处于空白状态。从 1960 年代开始,编程语言作为计算机皇冠上的明珠,有 40% 图灵奖获得者来自编程语言学科。可见这个领域难度非常大,难度大得只要有一定的突破,就能够拿到图灵奖。总的来说,设计和开发一门编程语言是一个复杂的系统性工程,需要长期投入。
当前国内尚无规模商用的自研编程语言。国产编程语言本身也非常稀缺,仅有 Go 语言爱好者发起的凹语言、基于 Go 语言扩展而来 Go+ 语言、用中文来编写程序的易语言,以及目前比较热的 MoonBit。
正因为存在软件产业发展基础薄弱问题,工信部在十四五规划中将程序设计语言自主可控列为提升产业基础保障水平的一项重点工作。
基于构建开发者生态和编程语言自主可控的诉求,华为于 2019 年启动了仓颉编程语言的开发计划,经过五年不断打磨,完善语言和生态及其基础设施的完美度,如今终于正式对外公布。
仓颉编程语言的定位和竞争力
仓颉被设计为一款面向全场景应用开发的现代编程语言,主打高效编程、安全可靠、轻松并发、卓越性能、敏捷扩展。
在设计时,仓颉团队在安全性、易用性和性能之间进行了权衡。
设计语言时我们无法同时完美满足所有要求,例如,C、Rust、C++ 这类的系统编程语言性能极佳,但开发效率没那么高。JS 这类动态脚本语言开发效率高,但性能略差。Kotlin、Java、Go、Swift 这样的语言居于前两者之间,属于重业务开发的静态类型语言。
仓颉也选择了这种居中的定位,被设计为了具备自动内存管理功能、静态类型、面向应用开发的语言。在效率上,仓颉注重“语法简洁低噪音,且能面向领域易扩展”。在性能上,仓颉注重“垂直整合、性能可伸缩、稳定可预期”。在安全上,仓颉注重“缺省模式安全、强化编译期安全约束”。
目前 Android 和 iOS 操作系统都有首选语言。我们知道 Android 是一个由谷歌主导的适用于移动设备的开源操作系统,2019 年,谷歌宣布 Kotlin 成为 Android 应用程序开发者的首选语言。
而 Swift 则是 iOS 应用程序开发的首选语言。在移动操作系统领域,苹果公司面临着来自 Android 的激烈竞争。Swift 的出现降低了 iOS 开发的门槛,使更多开发者能够更容易地加入 iOS 生态系统。对于苹果公司而言,这意味着可以获得更庞大的开发者群体,从而推动 iOS 平台的繁荣发展。
这两种语言的定位和仓颉一样,居于动态脚本语言和系统编程语言之间。因此大胆推测仓颉也非常适合用于鸿蒙应用开发。
原生智能化:仓颉编程语言内嵌了 AgentDSL 的编程框架,实现了自然语言与编程语言有机融合。多 Agent 协同,简化符号表达,模式可以自由组合,支持各类智能应用开发。
天生全场景:仓颉编程语言采用轻量化可缩放运行时和模块化分层设计,即使在资源受限的设备上也能流畅运行。同时,它支持全场景领域扩展,元编程和 eDSL 技术,可助力面向领域声明式开发。
高性能:仓颉编程语言采用全并发 GC,应用线程运行更加流畅,响应速度更快。轻量化线程设计进一步提升了并发性能,降低了开发成本。
强安全:仓颉编程语言将安全理念融入语言设计,帮助开发者专注于业务逻辑,减少安全漏洞的产生,实现“编码即安全”的愿景。
仓颉语言特性
目前,仓颉语言特性基本完备,可满足大多数开发场景。
仓颉编程语言通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。
高效编程:面向应用开发,我们希望语言能够易学易用,降低开发者入门门槛和开发过程中的心智负担,支持各种常见的开发范式和编程模式,让开发者简洁高效地表达各种业务逻辑。
安全可靠:作为现代编程语言,仓颉追求编码即安全,通过静态类型系统和自动内存管理,确保程序的类型安全和null safety等内存安全;同时,仓颉还提供各种运行时检查,包括数组下标越界检查、类型转换检查、数值计算溢出检查、以及字符串编码合法性检查等,能够及时发现程序运行中的错误;此外,还通过代码扫描工具、混淆工具以及消毒器,进一步提供跨语言互操作安全和代码资产保护等支持。
轻松并发:
仓颉线程采用的是 M:N 线程模型,因此本质上它是一种用户态的轻量级线程,支持抢占,且相比操作系统线程内存资源占用更小。
这种轻量化线程设计不仅降低系统的负担,而且使得开发者能够在不增加编程复杂度的前提下,轻松实现数千甚至数万个并发任务。其核心优势包括:
- 简单的并发编程:不对开发者编写并发代码做过多语法约束,使其方便地使用仓颉线程并专注业务处理。
- 轻量级的开销:由于创建和切换用户态线程的开销远远小于传统的内核线程,仓颉语言可以快速地创建和销毁大量用户态线程,使得开发高并发应用变得轻而易举。
- 更高的并发能力:仓颉语言通过用户态线程模型,可以实现非常高的并发数,这使得它特别适合于 I/O 密集型和高并发的网络服务场景。
- 减少上下文切换成本:在轻量化线程模型中,上下文切换发生在用户空间,避免了传统线程切换需要经过内核态和用户态之间频繁转换的高成本。在仓颉语言中,实现高效并发不再是一项复杂且耗时的任务。开发者可以通过简单的语法构造大量的用户态线程,无需担心传统并发模型中常见的性能瓶颈。假设我们有一个需求:需要同时处理多个网络请求。
卓越性能:仓颉编译器及运行时从全栈对编译进行优化,包括编译器前端基于CHIR(Cangjie HighLevel IR)高层编译优化(比如语义感知的循环优化、语义感知的后端协同优化等),基于后端的编译优化(比如:SLP向量化、Intrinsic优化、InlineCache、过程间指针优化、Barrier优化等),基于运行时的优化(比如轻量锁、分布式标记、并发Tracing优化等),一系列的优化让仓颉充分发挥处理器能力,为应用提供卓越的性能支持。另外仓颉语言对运行时进行原生的轻量化设计,通过对运行时模块化分层设计,定义仓颉公共对象模型和运行时公共基础组件,基于公共对象模型,实现运行时的内存管理、回栈、异常处理、跨语言调用等基础能力,大幅减少多个能力间的冗余对象设计,精简运行时体积。同时通过包的按需加载技术,减少仓颉应用启动的冗余包内存开销,因此对于资源敏感设备,占用资源更少,支持更友好。
除此之外,仓颉还支持面向应用开发的一系列工具链,包括语言服务(高亮、联想)、调试(跨语言调试、线程级可视化调试)、静态检查、性能分析、包管理、文档生成、Mock工具、测试框架、覆盖率工具、Fuzz工具以及智能辅助编程工具,进一步提升软件开发体验以及效率。以下我们将围绕上述几个方面介绍仓颉语言的主要特性,让读者能够快速了解仓颉语言的定位和主要技术特色。
图文来源:信创新态势
声明:我们尊重“真实原创”,转载仅供学习交流,旨在传播有益信息,如有侵权,请联系我们,谢谢!