继续遥遥领先?华为全新编程语言【仓颉】,前端学习它有多简单?

22,382 阅读6分钟

Hello,大家好,我是 Sunday。

2024年6月21日下午,在华为开发者大会中向全球开发者介绍了华为自研编程语言 “仓颉”,算是补全了鸿蒙生态中的 “最后一环”。

根据 仓颉编程语言白皮书 描述:仓颉编程语言是一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。特别是在物联网(IoT)、人工智能(AI)和分布式系统方面。

一堆让人看不懂得行业术语(黑话)。不过既然是鸿蒙生态,那么对我们这些开发者而言仓颉的核心场景还是用来去完成 鸿蒙系统开发的

那么今天,咱们先不聊所谓的鸿蒙生态,仅以前端开发者的身份来看看仓颉与现有前端开发语言的差异!

仓颉编程语言的特性

根据白皮书所述,仓颉的特性主要由 4 个,分别是:

  1. 学习门槛低:仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,包括值类型、类和接口、泛型、代数数据类型、模式匹配、以及高阶函数等特性。此外,仓颉还支持类型推断(类似 TS),能够减轻开发者类型标注的负担;通过一系列简明高效的语法,能够减少冗余书写、提升开发效率;语言内置的各种语法糖和宏(macro)的能力,支持开发者基于仓颉快速开发领域专用语言(DSL),构建领域抽象。
  2. 安全:通过静态类型系统和自动内存管理,确保程序的类型安全和null safety等内存安全;同时,仓颉还提供各种运行时检查,包括数组下标越界检查、类型转换检查、数值计算溢出检查、以及字符串编码合法性检查等,能够及时发现程序运行中的错误;此外,还通过代码扫描工具、混淆工具以及消毒器,进一步提供跨语言互操作安全和代码资产保护等支持。
  3. 支持并发:仓颉语言实现了轻量化用户态线程和并发对象库,让高效并发变得轻松。对开发者来说,用户态线程的使用和传统的系统线程的使用方式保持一致,没有带来额外负担;而从运行态视角看,线程的管理由运行时完成,不依赖操作系统的线程管理,因此线程的创建、调度和销毁等操作更加高效,且资源占用比系统线程更少。为了避免数据竞争,仓颉语言提供了并发对象库,并发对象的方法是线程安全的,因此在多线程中调用这些方法和串行编程没有区别,应用逻辑的开发者无需额外关心并发管理。对于一些核心库,仓颉还提供了无锁或者细粒度锁的算法实现,能够进一步减少线程的阻塞,提升并发度。
  4. 性能更强:仓颉语言通过值类型、多层级静态分析优化和超轻量运行时,在计算机语言基准测试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:数据类型

仓颉的数据类型,大致也可以被分为三类:

  1. 简单类型:整数类型(有符号整数Int8、Int16、Int64...。无符号整数UInt8、UInt16、UInt32...)、浮点类型(Float...)、布尔类型(Bool)、字符类型(Rune)、字符串类型(String)
  2. 复杂类型:元组类型(Tuple 不可变)、数组类型(Array<泛型>)、区间类型(Range)
  3. 特殊类型:Nothing(break、continue、return 和 throw 表达式)

04:枚举

熟悉 TS 的同学应该并不陌生。所谓枚举(enum)指的是:通过列举一个类型的所有可能取值来定义此类型的方式。

05:类和接口

仓颉中原生提供了类和接口的概念。熟悉 TS 的同学看到下面的代码应该会非常亲切了:

类(支持继承)

接口

06:异常类型

仓颉提供了ExceptionError两个类型,用于描述程序运行时的异常行为

07:并发处理

并发的概念,很多同学可能会比较陌生。因为 js 天生是单线程的,所以并不支持并发处理。

但是仓颉是支持并发,并且支持线程模型的

08:跨语言通讯

如果有做过 webview 渲染 H5 应用的同学,那么必然使用过 JSBirdge 的概念。了解这个概念的同学对跨语音通讯应该并不陌生。

对于仓颉来说,默认也支持跨语言通讯的方式

09:宏

"宏" 很多同学可能会比较陌生。所谓的"宏"指的是:一种用于文本替换和代码生成的预处理器指令或工具。它可以在代码编译之前进行文本替换或生成新的代码片段

总结

根据以上描述,我们可以发现:仓颉和现有 TS || JS 中有比较多的类似概念。所以,目前的前端开发者,如果想要上手使用仓颉的话,学习成本并不会很高

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer 已帮助数百位同学拿到了中大厂 offer