2024年6月21日,华为仓颉正式公开发布。还记的19年和王学智的团队做过接触,他们反馈说16年我出版的《自己动手构造编译系统》一书对他们的研发很有帮助,身为作者听到这个消息还是很开心的。那时他们还在组建华为编程语言实验室,南大冯新宇教授任首架,方舟编译器也是刚刚发布,版本各种不稳定,记得社区Meetup上有同学反馈说方舟第一个版本连HelloWorld构建流程都不能走完......
五年时光,稍纵即逝。一眨眼,仓颉正式发布了,我也第一时间翻阅了他们的白皮书,好奇华为会把PL设计成什么样子。花了半个下午的时间过完仓颉语言的特性,看到了很多熟悉的编程语言的影子,也看到不少有意思的创意设计。编程语言的好坏本身就是仁者见仁的事情,所以我只给出我自己主观的感受:整体还是加分项更多些,按照100分制,我给85+吧,没给到90是因为有不少好玩的特性还在规划中,希望早一天能看到完整版本的发布。
不少同学看到仓颉白皮书后,都在找SDK从哪写下载,HelloWorld怎么跑。仓颉公众号也及时发布了内测的方式,我也亲自走了一遍整个流程,给大家整理为如下三步。
1. 申请内测
关注"仓颉编程语言 "微信公众号,回复"SDK "关键词,填写内测申请问卷(姓名、邮箱、gitcode地址等)。【建议提前注册gitcode,github可直接授权登录】
接下来就是等待邮件回复,虽然说是2-3个工作日,实际上当天(若干小时)就能收到邮件。下载邮件里的保密函文件,打印、签字、扫描成pdf,按照邮件要求回复即可。
再次收到邮件回复(若干小时),点击"申请加入仓颉编程语言官方社区 ",等待管理员审核。
管理审核成功后,即可访问仓颉社区:https://gitcode.com/Cangjie 。仓颉支持VSCode开发环境,社区提供了VSCode插件CangjieVSCodePlugin
,以及Linux/Windows/MacOS版本的SDK(CangjieSDK是Linux版本)。
2. 准备环境
首先是安装SDK。因为我是在Mac上测试,需要下载CangjieSDK-Mac
项目,选择所需的版本包,解压到你喜欢的目录,如/usr/local/cangjie
。另外文件包cangjie-0.51.4-docs-html.tar.gz
提供了完整的语言规范、开发指南、工具文档等资料,对开发很有帮助。
Intel芯片的Mac版本SDK文件(Cangjie-0.51.4-darwin_x64.tar.gz
)内容如下:
$ pwd
/usr/local/cangjie
$ ls
bin envsetup.sh lib modules runtime third_party tools
安装VSCode(略),下载仓颉VSCode插件解压,使用VSIX方式安装插件,建议重启VSCode保证生效。
配置仓颉VSCode插件,填写SDK地址/usr/local/cangjie
,SDK类型默认CJNative(CJVM只有Linux系统支持)。
3. 开发测试
使用"Command+Shift+P "快捷键创建仓颉项目,目前支持快捷引导创建和可视化创建两种方式,根据自己的喜好自行选择。
工程创建完后的目录结构很简单,只有main.cj
源码文件和cjpm.toml
打包配置两个文件。编译构建完后,会生成cjpm.lock
文件和target
目录(内含构建好的可执行文件)。
最后,使用如下示例代码验证我们自己的仓颉HelloWorld。
extend String {
public func map(mapper: (String) -> String): String {
mapper(this)
}
}
main() {
var str = "Hello World !"
str = str.map() {
s => "Cangjie: " + s
}
println(str)
}
这段代码使用了仓颉语言两个有意思的特性:
- 类型扩展:使用
extend
可以对任意类型进行API扩展。这里我们给系统的String
类型增加了一个map
函数,它接收一个lambda表达式参数。 - 尾随Lambda:一种语法糖,如果lambda表达式是函数的最后一个参数,则可以直接追加lambda语句块到函数调用尾部。这里调用
str.map()
时直接将lambda表达式逻辑写在map()
调用之后,而非括号内。
最后,直接运行测试即可。
仓颉的语言设计上融合了不少主流编程语言的特点,如python、go、js等。另外有几个待发布的特性比较有趣,可以稍微期待一下,如eDSL、模板宏、跨语言调试和内置AI DSL等。