仓颉语言HelloWorld内测【仅需三步】

helloworld · 浏览次数 : 6

小编点评

2024年6月21日,华为仓颉正式公开发布。这标志着华为在编程语言领域迈出了重要的一步,为开发者带来了一种全新的编程语言体验。 在研发过程中,我有幸与南大光电冯新宇教授团队有过接触。他们曾表示,我在2016年出版的《自己动手构造编译系统》一书对他们的工作有很大帮助。作为作者,听到这个消息后,我感到非常开心。 五年时间飞逝,仓颉编程语言终于正式发布了。我仔细阅读了仓颉的白皮书,发现其中有很多熟悉的编程语言影子,也有很多有趣的创意设计。编程语言的好坏因人而异,但就我个人而言,我认为仓颉整体表现还是加分项较多,我会给它85分的评价(满分100分),主要是因为还有一些有趣的功能仍在规划中,希望能早日看到完整版本的发布。 仓颉编程语言支持多种操作系统,包括Linux、Windows和macOS。此外,它还提供了VSCode插件CangjieVSCodePlugin,方便开发者使用。在开发测试方面,仓颉提供了简洁的工程创建和编译构建流程。同时,它还支持跨平台开发,有助于降低开发成本。 值得一提的是,仓颉编程语言融合了许多主流编程语言的特点,如Python、Go和JavaScript等。此外,还有一些待发布的特性值得期待,如eDSL、模板宏、跨语言调试和内置AI DSL等。 总之,华为仓颉编程语言的发布为开发者带来了新的机遇和挑战。让我们共同期待它在未来的发展中发挥更大的作用!

正文

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内测【仅需三步】相似的内容:

仓颉语言HelloWorld内测【仅需三步】

不少同学看到仓颉白皮书后,都在找SDK从哪写下载,HelloWorld怎么跑。仓颉公众号也及时发布了内测的方式,我也亲自走了一遍整个流程,给大家整理为如下三步。

上周热点回顾(6.24-6.30)

热点随笔: · 呼吁改正《上海市卫生健康信息技术应用创新白皮书》 C# 被认定为A 组件 的 错误认知 (张善友)· CSDN 大规模抓取 GitHub 上的项目到 GitCode,伪造开发者主页引公愤 (gt-it)· 一码胜千言,博园Polo衫,上架预售啦 (博客园团队)· 仓颉语言HelloW

C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏

前言 今天大姚给大家分享一款由C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏:SeeSharpSnake。 项目特点 该仓库中的项目文件和脚本可以用多种不同的配置构建相同的游戏,每个配置生成的输出大小也不同。 项目源码运行 F5 运行 SeeSharpSnake项目,查看优秀效果: 构建不同大小版

语音信号处理中的“窗函数”

文章代码仓库:https://github.com/LXP-Never/window_fun 窗函数贯穿整个语音信号处理,语音信号是一个非平稳的时变信号,但“**短时间内可以认为语音信号是平稳时不变的,一般 10~30ms**。 对连续的语音分帧做STFT处理,等价于截取一段时间信号,对其进行周期性

数仓中典型的几种不下推语句整改案例

本文为大家讲解4个DWS常见不下推语句整改场景中的相关案例。

[转帖]kingbase(人大金仓)的一些常用表操作语句

包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一、创建和删除表 DROP TABLE IF EXISTS "DZ_RAIN" CASCADE; CREATE TABLE "DZ_RAIN" ( "I

数仓现网案例丨超大结果集接收异常

用户使用数据库客户端工具如navicat、dbeaver等执行超大结果集的查询语句导致异常中断,中断信息Last read message sequence %d is not equal to the max written message sequence %d。

【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案。 本文分享自华为云社区《GaussDB(DWS)运维 -- 单SQL磁盘空间管控》,作者: 譡里个檔。 【问题描述】 执行部分SQL语句时出现如下报错信息(具体数值可能因为配置有差异),本文针对根因和场景触发场景,确定触发此类问题

数仓性能调优:大宽表关联MERGE性能优化

摘要:本文主要为大家讲解在数仓性能调优过程中,关于大宽表关联MERGE性能优化过程。 本文分享自华为云社区《GaussDB(DWS)性能调优:大宽表关联MERGE性能优化》,作者:譡里个檔。 【业务背景】 如下MERGE语句执行耗时长达2034s MERGE INTO sdifin.hah_ae_l

一文详解数仓GaussDB(DWS) 函数出参带出方式

摘要:本文主要讲解DWS函数出参带出方式。 本文分享自华为云社区《GaussDB(DWS)功能 -- 函数出参 #【玩转PB级数仓GaussDB(DWS)】》,作者:譡里个檔 。 DWS的PL/pgSQL函数/存储过程中有一个特殊的语法PERFORM语法,用于执行语句但是丢弃执行结果的场景,常用于一