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. Oracle和达梦:获取表是否被锁定

    1.获取表是否被锁定 select "V$SESSIONS".SESS_ID,"V$SESSIONS".SQL_TEXT,"V$SESSIONS&qu ...

  2. 【python爬虫案例】用python爬豆瓣读书TOP250排行榜!

    目录 一.爬虫对象-豆瓣读书TOP250 二.python爬虫代码讲解 三.讲解视频 四.完整源码 一.爬虫对象-豆瓣读书TOP250 今天我们分享一期python爬虫案例讲解.爬取对象是,豆瓣读书T ...

  3. fastposter v2.8.1 发布 电商海报生成器

    fastposter v2.8.1 发布 电商海报生成器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.二维码海报,图片海报,分享海报,二维 ...

  4. 80x86汇编—汇编程序基本框架

    文章目录 First Program 指令系统 伪指令 数值表达式 程序框架解释 int 21 中断 通过一个基本框架解释各个指令和用处,方便复习.所以我认为最好的学习顺序就是先看一段完整的汇编代码程 ...

  5. JDK源码阅读-------自学笔记(二十)(java.util.List初探)

    List简介 List是有序.可重复的容器. 有序:List中每个元素都有索引标记.可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素. 可重复:List允许加入重复的元素.更 ...

  6. Android 13 - Media框架(2)- Demo App与MediaPlayer Api了解

    关注公众号免费阅读全文,进入音视频开发技术分享群! 尝试用MediaPlayer写了一个播放demo,实现了网络流和本地流的播放.由于本人对app开发一窍不通,所以demo中很多内容是边查资料边写的, ...

  7. mysql存储地理信息的方法

    MySQL 存储地理信息通常使用 GEOMETRY 数据类型或其子类型(如 POINT, LINESTRING, POLYGON 等).为了支持这些数据类型,MySQL 提供了 SPATIAL 索引, ...

  8. 003. git标签

    git标签 标签用于记录详细修改内容,为后续使用提供帮助. 也方便快速的回滚. 每一次提交[commit]都可以打一个tag标签. 测试阶段标签规则: 以 0.01 0.02版本为主 正式上线标签规则 ...

  9. iOS 如何保持线程一直在运转

    1.简单的可以想到,写一个while循环 while (TRUE) { } 但是这种方式存在缺陷,将导致CPU占用100%,两个核. p.p1 { margin: 0; font: 12px &quo ...

  10. 【Effective C++】设计与声明——成员变量和成员函数

    将成员变量声明为private 为什么成员变量不该是public? (1)从语法一致性来说,如果成员变量不是public,就需要通过成员函数访问成员变量.public接口内的每样东西都是函数的话,客户 ...