仓颉语言HelloWorld内测【仅需三步】
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等。
4. 参考资料
- 仓颉官网:https://developer.huawei.com/consumer/cn/cangjie
- 仓颉社区:https://gitcode.com/Cangjie/
- 仓颉编程语言白皮书:https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/cj-wp-abstract
仓颉语言HelloWorld内测【仅需三步】的更多相关文章
- 学会使用DNSPod,仅需三步
学会使用DNSPod,仅需三步 第一步:在DNSPod添加记录 1.访问 https://www.dnspod.cn网站,在DNSPod官网首页的右上角,有[注册],如下图所示,点击[注册]按钮 ...
- [转].NET程序破解仅需三步
近期开发公司商城,为了简化开发用了V5Shop网店程序.本来预计一个月完工,哪知道出现一堆问题大大增加了我的工作量(早知道还不如全部自己写了). 破V5Shop真不地道,说是免费的,结果程序一大堆问题 ...
- 只需三步--轻松反编译Android Apk文件
安卓程序是通过java语言进行编写的,可以很容易进行反编译.很多apk文件被反编译后再二次打包,就成了自己的产品,很是流氓.下面我们来看看如何进行apk的反编译,以及常用的防反编译手段. 一.反编译A ...
- 陈发树云南白药股权败诉真相 取胜仅差三步 z
22亿元现金,三年只拿到750多万元的利息.福建富豪陈发树的云南生意可谓失望之极.在漫长的官司中,曾经有绝处逢生之机的陈发树,连告状的主体都没有找准,岂能同强大的国企扳手腕?陈发树律师团距取胜只有三步 ...
- 仅需5步,轻松升级K3s集群!
Rancher 2.4是Rancher目前最新的版本,在这一版本中你可以通过Rancher UI对K3s集群进行升级管理. K3s是一个轻量级Kubernetes发行版,借助它你可以几分钟之内设置你的 ...
- 只需三步 快速完善网站Sitemap
越来越多的SEOer把优化的重点放在了站内优化上,细心的朋友应该查看一些前辈的robots.txt的时候不难发现,他们的robots中都加 入了一句Sitemap: http://www.dewang ...
- 仅需几步,EasyRecovery就能恢复RAID数据
RAID是什么?RAID是具有冗余能力的磁盘阵列,简单的来说就是把相同的数据存储在多个硬盘的不同的地方. 在了解了RAID之后就会知道,RAID中的数据也是有可能丢失的,虽然RAID数据丢失会引发一系 ...
- 超简单Windows安装Scrapy (仅需一步)
网上很多关于windows安装Scrapy的教程都非常的繁琐,请看我给大家分享的教程,非常简单 一步完成. 超简单的安装方法: 下载地址: https://www.continuum.io/downl ...
- iOS App转让、转移、迁移(App transfer) -- 仅需四步
当需要将某个 App 出售给其他开发人员,或想要将其移至其他 App Store Connect 组织,则您需要转让该 App.您无需将 App 从 App Store 下架,即可将其所有权转让给另一 ...
- MapReduce Service更换集群外部时钟源,仅需10步
摘要:MapReduce Service 集群使用NTP进行时钟同步.本文简要介绍了MapReduce Service集群NTP机制及NTP的配置方式. 本文分享自华为云社区<MapReduce ...
随机推荐
- Oracle和达梦:获取表是否被锁定
1.获取表是否被锁定 select "V$SESSIONS".SESS_ID,"V$SESSIONS".SQL_TEXT,"V$SESSIONS&qu ...
- 【python爬虫案例】用python爬豆瓣读书TOP250排行榜!
目录 一.爬虫对象-豆瓣读书TOP250 二.python爬虫代码讲解 三.讲解视频 四.完整源码 一.爬虫对象-豆瓣读书TOP250 今天我们分享一期python爬虫案例讲解.爬取对象是,豆瓣读书T ...
- fastposter v2.8.1 发布 电商海报生成器
fastposter v2.8.1 发布 电商海报生成器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.二维码海报,图片海报,分享海报,二维 ...
- 80x86汇编—汇编程序基本框架
文章目录 First Program 指令系统 伪指令 数值表达式 程序框架解释 int 21 中断 通过一个基本框架解释各个指令和用处,方便复习.所以我认为最好的学习顺序就是先看一段完整的汇编代码程 ...
- JDK源码阅读-------自学笔记(二十)(java.util.List初探)
List简介 List是有序.可重复的容器. 有序:List中每个元素都有索引标记.可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素. 可重复:List允许加入重复的元素.更 ...
- Android 13 - Media框架(2)- Demo App与MediaPlayer Api了解
关注公众号免费阅读全文,进入音视频开发技术分享群! 尝试用MediaPlayer写了一个播放demo,实现了网络流和本地流的播放.由于本人对app开发一窍不通,所以demo中很多内容是边查资料边写的, ...
- mysql存储地理信息的方法
MySQL 存储地理信息通常使用 GEOMETRY 数据类型或其子类型(如 POINT, LINESTRING, POLYGON 等).为了支持这些数据类型,MySQL 提供了 SPATIAL 索引, ...
- 003. git标签
git标签 标签用于记录详细修改内容,为后续使用提供帮助. 也方便快速的回滚. 每一次提交[commit]都可以打一个tag标签. 测试阶段标签规则: 以 0.01 0.02版本为主 正式上线标签规则 ...
- iOS 如何保持线程一直在运转
1.简单的可以想到,写一个while循环 while (TRUE) { } 但是这种方式存在缺陷,将导致CPU占用100%,两个核. p.p1 { margin: 0; font: 12px &quo ...
- 【Effective C++】设计与声明——成员变量和成员函数
将成员变量声明为private 为什么成员变量不该是public? (1)从语法一致性来说,如果成员变量不是public,就需要通过成员函数访问成员变量.public接口内的每样东西都是函数的话,客户 ...