• 仓颉语言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. 参考资料

    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
  • 相关阅读:
    通过Python pypdf库轻松拆分大型PDF文件
    【踩坑】工作中真实踩坑,一个or让sql变慢7倍
    9月18日作业
    内网渗透-linux权限维持
    8b10b 64b/66b/ 究竟是什么作用呢?
    (续)SSM整合之SSM整合笔记(ContextLoaderListener)(P179-188)
    [NOI2018]情报中心
    七夕来临,程序员该如何花式表白?html+css实现简单七夕表白
    kafka笔记(一):kafka概述及入门-基础框架/消息队列/安装部署/命令行操作
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
  • 原文地址:https://www.cnblogs.com/fanzhidongyzby/p/18267963/cangjie