Hello,大家好,我是 Sunday。
2024年6月21日下午,在华为开发者大会中向全球开发者介绍了华为自研编程语言 “仓颉”,算是补全了鸿蒙生态中的 “最后一环”。
根据 仓颉编程语言白皮书 描述:仓颉编程语言是一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。特别是在物联网(IoT)、人工智能(AI)和分布式系统方面。
一堆让人看不懂得行业术语(黑话)。不过既然是鸿蒙生态,那么对我们这些开发者而言仓颉的核心场景还是用来去完成 鸿蒙系统开发的。
那么今天,咱们先不聊所谓的鸿蒙生态,仅以前端开发者的身份来看看仓颉与现有前端开发语言的差异!
仓颉编程语言的特性
根据白皮书所述,仓颉的特性主要由 4 个,分别是:
- 学习门槛低:仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,包括值类型、类和接口、泛型、代数数据类型、模式匹配、以及高阶函数等特性。此外,仓颉还支持类型推断(
类似 TS
),能够减轻开发者类型标注的负担;通过一系列简明高效的语法,能够减少冗余书写、提升开发效率;语言内置的各种语法糖和宏(macro)的能力,支持开发者基于仓颉快速开发领域专用语言(DSL),构建领域抽象。 - 安全:通过静态类型系统和自动内存管理,确保程序的类型安全和null safety等内存安全;同时,仓颉还提供各种运行时检查,包括数组下标越界检查、类型转换检查、数值计算溢出检查、以及字符串编码合法性检查等,能够及时发现程序运行中的错误;此外,还通过代码扫描工具、混淆工具以及消毒器,进一步提供跨语言互操作安全和代码资产保护等支持。
- 支持并发:仓颉语言实现了轻量化用户态线程和并发对象库,让高效并发变得轻松。对开发者来说,用户态线程的使用和传统的系统线程的使用方式保持一致,没有带来额外负担;而从运行态视角看,线程的管理由运行时完成,不依赖操作系统的线程管理,因此线程的创建、调度和销毁等操作更加高效,且资源占用比系统线程更少。为了避免数据竞争,仓颉语言提供了并发对象库,并发对象的方法是线程安全的,因此在多线程中调用这些方法和串行编程没有区别,应用逻辑的开发者无需额外关心并发管理。对于一些核心库,仓颉还提供了无锁或者细粒度锁的算法实现,能够进一步减少线程的阻塞,提升并发度。
- 性能更强:仓颉语言通过值类型、多层级静态分析优化和超轻量运行时,在计算机语言基准测试Benchmarks Game上,相比业界同类语言取得了较为明显的性能优势。以下是对比数据
看起来好像很厉害的样子,不愧是“遥遥领先”。
不过以上内容在其他很多编程语言的发布中均有类似描述。所以实际体验如何,还需要等待实际开发者进行长时间的真实开发之后,才能得出具体结论。
仓颉开发实际体验
其实在仓颉之前,鸿蒙生态之中一直是通过 ArkTS
进行应用开发:
ArkTS
语法与 TS
非常类似。所以也有很多同学说 前端学习鸿蒙 so easy!
那么这次所谓的 “全新开发,没有借鉴” 的仓颉 又是什么样的语法表现呢?
咱们一起来看看!
目前仓颉已经公布了开发文档:
文档中很详细的描述了 仓颉语法 的日常应用。
01:声明变量
在仓颉中,声明变量有三种方式,分别是 var、let、const
对于这三个关键字,前端的同学应该非常熟悉了。这里就不去多说了。
02:函数
在仓颉中声明函数,需要使用 func
关键字,前端的同学可以理解为 function
的缩写
func add(a: Int64, b: Int64): Int64 {
return a + b
}
在这个代码中涉及到 Int64
的数据类型,那么仓颉中都有什么数据类型呢?
03:数据类型
仓颉的数据类型,大致也可以被分为三类:
- 简单类型:整数类型(有符号整数Int8、Int16、Int64...。无符号整数UInt8、UInt16、UInt32...)、浮点类型(Float...)、布尔类型(Bool)、字符类型(Rune)、字符串类型(String)
- 复杂类型:元组类型(Tuple 不可变)、数组类型(Array<泛型>)、区间类型(Range)
- 特殊类型:Nothing(break、continue、return 和 throw 表达式)
04:枚举
熟悉 TS 的同学应该并不陌生。所谓枚举(enum
)指的是:通过列举一个类型的所有可能取值来定义此类型的方式。
05:类和接口
仓颉中原生提供了类和接口的概念。熟悉 TS
的同学看到下面的代码应该会非常亲切了:
06:异常类型
仓颉提供了Exception
和Error
两个类型,用于描述程序运行时的异常行为
07:并发处理
并发的概念,很多同学可能会比较陌生。因为 js
天生是单线程的,所以并不支持并发处理。
但是仓颉是支持并发,并且支持线程模型的
08:跨语言通讯
如果有做过 webview
渲染 H5
应用的同学,那么必然使用过 JSBirdge
的概念。了解这个概念的同学对跨语音通讯应该并不陌生。
对于仓颉来说,默认也支持跨语言通讯的方式
09:宏
"宏" 很多同学可能会比较陌生。所谓的"宏"指的是:一种用于文本替换和代码生成的预处理器指令或工具。它可以在代码编译之前进行文本替换或生成新的代码片段
总结
根据以上描述,我们可以发现:仓颉和现有 TS || JS
中有比较多的类似概念。所以,目前的前端开发者,如果想要上手使用仓颉的话,学习成本并不会很高
前端训练营:1v1私教,终身辅导计划,帮你拿到满意的
offer
。 已帮助数百位同学拿到了中大厂offer