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. 参考资料

  1. 仓颉官网:https://developer.huawei.com/consumer/cn/cangjie
  2. 仓颉社区:https://gitcode.com/Cangjie/
  3. 仓颉编程语言白皮书:https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/cj-wp-abstract

仓颉语言HelloWorld内测【仅需三步】的更多相关文章

  1. 学会使用DNSPod,仅需三步

    学会使用DNSPod,仅需三步   第一步:在DNSPod添加记录 1.访问 https://www.dnspod.cn网站,在DNSPod官网首页的右上角,有[注册],如下图所示,点击[注册]按钮 ...

  2. [转].NET程序破解仅需三步

    近期开发公司商城,为了简化开发用了V5Shop网店程序.本来预计一个月完工,哪知道出现一堆问题大大增加了我的工作量(早知道还不如全部自己写了). 破V5Shop真不地道,说是免费的,结果程序一大堆问题 ...

  3. 只需三步--轻松反编译Android Apk文件

    安卓程序是通过java语言进行编写的,可以很容易进行反编译.很多apk文件被反编译后再二次打包,就成了自己的产品,很是流氓.下面我们来看看如何进行apk的反编译,以及常用的防反编译手段. 一.反编译A ...

  4. 陈发树云南白药股权败诉真相 取胜仅差三步 z

    22亿元现金,三年只拿到750多万元的利息.福建富豪陈发树的云南生意可谓失望之极.在漫长的官司中,曾经有绝处逢生之机的陈发树,连告状的主体都没有找准,岂能同强大的国企扳手腕?陈发树律师团距取胜只有三步 ...

  5. 仅需5步,轻松升级K3s集群!

    Rancher 2.4是Rancher目前最新的版本,在这一版本中你可以通过Rancher UI对K3s集群进行升级管理. K3s是一个轻量级Kubernetes发行版,借助它你可以几分钟之内设置你的 ...

  6. 只需三步 快速完善网站Sitemap

    越来越多的SEOer把优化的重点放在了站内优化上,细心的朋友应该查看一些前辈的robots.txt的时候不难发现,他们的robots中都加 入了一句Sitemap: http://www.dewang ...

  7. 仅需几步,EasyRecovery就能恢复RAID数据

    RAID是什么?RAID是具有冗余能力的磁盘阵列,简单的来说就是把相同的数据存储在多个硬盘的不同的地方. 在了解了RAID之后就会知道,RAID中的数据也是有可能丢失的,虽然RAID数据丢失会引发一系 ...

  8. 超简单Windows安装Scrapy (仅需一步)

    网上很多关于windows安装Scrapy的教程都非常的繁琐,请看我给大家分享的教程,非常简单 一步完成. 超简单的安装方法: 下载地址: https://www.continuum.io/downl ...

  9. iOS App转让、转移、迁移(App transfer) -- 仅需四步

    当需要将某个 App 出售给其他开发人员,或想要将其移至其他 App Store Connect 组织,则您需要转让该 App.您无需将 App 从 App Store 下架,即可将其所有权转让给另一 ...

  10. MapReduce Service更换集群外部时钟源,仅需10步

    摘要:MapReduce Service 集群使用NTP进行时钟同步.本文简要介绍了MapReduce Service集群NTP机制及NTP的配置方式. 本文分享自华为云社区<MapReduce ...

随机推荐

  1. OLAP系列之分析型数据库clickhouse权限控制(六)

    一.clickhouse权限管理 users.xml默认配置文件: <?xml version="1.0"?> <clickhouse> <profi ...

  2. 使用 @NoRepositoryBean 简化数据库访问

    在 Spring Data JPA 应用程序中管理跨多个存储库接口的数据库访问逻辑可能会变得乏味且容易出错.开发人员经常发现自己为常见查询和方法重复代码,从而导致维护挑战和代码冗余.幸运的是,Spri ...

  3. 一个随时更新的js库

    1.src同级建commFunction=>timer.js 2.main.js引入 import time from '../commonFunction/time' Vue.prototyp ...

  4. python生成随机汉字

    python 随机生成汉字 第一种方法:Unicode码 在unicode码中,汉字的范围是(0x4E00, 9FBF) 这个方法比较简单,但是有个小问题,unicode码中收录了2万多个汉字,包含很 ...

  5. SpringBoot3.1.5对应新版本SpringCloud开发(2)-Eureka的负载均衡

    Eureka的负载均衡 负载均衡原理 负载均衡流程 老版本流程介绍 当order-servic发起的请求进入Ribbon后会被LoadBalancerInterceptor负载均衡拦截器拦截,拦截器获 ...

  6. 【深度学习】基础--NumPy

    因为深度学习会应用到我们大学时候学习的数学知识---线性代数.(矩阵当年想起来还是挺有意思的,有考研的经历都有感觉) 而在计算机里面如何展示矩阵的计算和应用,就需要运用到NumPy,是Python的一 ...

  7. Mac Docker 挂载数据卷失败

    问题描述: docker: Error response from daemon: Mounts denied: The path /srv/docker/bind is not shared fro ...

  8. docker-compose 安装 mysql:5.7.31

    目录 一.新建一个启动服务的目录 二.新建文件docker-compose.yml 三.新建角本文件 init-mysql.sh 四.实使化目录和配置文件 启动服务 登陆mysql 其它操作 参考文档 ...

  9. 复杂模式的两个List与Map合并为一个Map的拼接;笛卡尔乘积处理数据问题

    简介 (Introduction): 背景 数据从多个表中获取,每个表的数据条数不是唯一的,最后结果要拼接成一个Map<String,Object>的模式封装所有数据,每个数据是一条. 结 ...

  10. 经验分享:春招零Offer,5月份还有机会吗?

    先说答案:5 月份依然有拿到 Offer 的机会. 5月份春招结束了吗? 对于应届大学生来说(也就是今年暑假毕业的学生),5 月中旬春招就陆续结束了,但是 5 月份会有很多补录的机会. 对于非应届的大 ...