网易首页 > 网易号 > 正文 申请入驻

仓颉开发入门体验

0
分享至

前言

在刚刚召开的华为开发者大会(HDC 2024)上,华为内部研发已久的国产自主编程语言仓颉终于正式对外官宣!

当前在鸿蒙原生应用的开发中,支持声明式 UI 和一次开发、多端部署的 ArkTS 语言已经被广泛使用。仓颉语言作为面向未来的下一代编程语言,当前已经完成设计与实现并启动了开发者预览,未来将与 ArkTS 共同发展,为鸿蒙原生应用开发者提供极致高效的开发体验。

仓颉的优势

仓颉的定位同样如此,据官方介绍,它是一款面向“全场景”智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。


  • 原生智能化:仓颉编程语言内嵌了 AgentDSL 的编程框架,实现了自然语言与编程语言有机融合。多 Agent 协同,简化符号表达,模式可以自由组合,支持各类智能应用开发。

  • 天生全场景:仓颉编程语言采用轻量化可缩放运行时和模块化分层设计,即使在资源受限的设备上也能流畅运行。同时,它支持全场景领域扩展,元编程和 eDSL 技术,可助力面向领域声明式开发。

  • 高性能:仓颉编程语言采用全并发 GC,应用线程运行更加流畅,响应速度更快。轻量化线程设计进一步提升了并发性能,降低了开发成本。

  • 强安全:仓颉编程语言将安全理念融入语言设计,帮助开发者专注于业务逻辑,减少安全漏洞的产生,实现“编码即安全”的愿景。


当然好像每个新的语言都会这么说,而对于观望的开发者来说,我们首先还是需要来了解一下仓颉的语法。

环境配置

可以直接使用HarmonyOS DevEco Studio或者VsCode进行开发,但需要安装仓颉插件,目前来看,需要报名仓颉语言开发者预览版Beta招募,才能获得对应的Studio版本。在获得对应的Studio版本后,就可以体验仓颉的语法特性了。

HelloWorld

和所有语言一样,我们先来实现仓颉的HelloWorld程序。

新建脚本文件Hello,后缀名是.cj没错就是仓颉的中文

main() {
  println("你好,仓颉")
}

> cjc hello.cj -o hello
> ./hello你好,仓颉

通过cjc命令运行,打印输出“你好,仓颉”。emm... 只看main这个方法谁也不知道这是kotlin还是啥。

变量声明

变量定义的具体形式为:


修饰符 变量名: 变量类型 = 初始值

其中修饰符用于设置变量的各类属性,可以有一个或多个,常用的修饰符包括:


  • 可变性修饰符:let 与 var,分别对应不可变和可变属性,可变性决定了变量被初始化后其值还能否改变,仓颉变量也由此分为不可变变量和可变变量两类。

  • 可见性修饰符:private 与 public 等,影响全局变量和成员变量的可引用范围,详见后续章节的相关介绍。

  • 静态性修饰符:static,影响成员变量的存储和引用方式,详见后续章节的相关介绍。


如下程序所示,定义了两个 Int64 类型的不可变变量 a 和可变变量 b,随后修改了变量 b 的值。

main() {
    let a: Int64 = 20
    var b: Int64 = 12
    b = 23
    println("${a}${b}")
}

从这里来看,相当于把Kotlin中的“val”替换成了“let”。接着我们来看它的struct 类型。

Struct类型

基础结构

struct Rectangle {
    let width: Int64
    let height: Int64     public init(width: Int64, height: Int64) {
        this.width = width
        this.height = height
    }

    public func area() {
        width * height
    }
}

如上述代码所示,通过struct关键字定义了一个Rectangle结构,声明了变量width、height并提供了init、area两个方法。我们完全把它当成一个class 即可,通过下列方法我们可以创建struct的实例并调用相关方法。

let r = Rectangle(10, 20)
let width = r.width   
let height = r.height
let a = r.area() 

但是仓颉也是有自己的class的,主要区别在于:class 是引用类型,struct 是值类型,class 之间可以继承,但 struct 之间不能继承。

struct Test {
    var i = 0

    public func add() {
        i += 1  
    }
}

我们是无法在add函数中修改成员变量i的值的,如果想要修改我们就需要借助mute函数。

mute函数

修改代码如下所示:

struct Test {
    var i = 0

    public mute func add() {
        i += 1  
    }
}

在add函数前新增一个mute关键字,就可以在函数内修改i的值了。需要注意的是mute关键字不能修改静态函数,如下列代码无法正常编译:

 public mut static func g(): Unit {} 

其他的语法如模式匹配、网络编程等几乎与Kotlin无异,我们可以在手机操作过程中了解。

跨语言操作

和大多数语言一样,仓颉是支持跨语言调用的,当前支持仓颉-C语言与仓颉-Artks语言的互操作。这里我们以仓颉调用C语言为例。

在仓颉中要调用 C 的函数,需要在仓颉语言中用 @C 和 foreign 关键字声明这个函数,但 @C 在修饰 foreign 声明的时候,可以省略。举个例子,假设我们要调用 C 的 rand 和 printf 函数,它的函数签名是这样的:

// stdlib.h
int rand();

// stdio.h
int printf (const char *fmt, ...);

那么在仓颉中调用这两个函数的方式如下:

foreign func rand(): Int32 foreign func printf(fmt: CString, ...): Int32 main() {
    let r = unsafe { rand() }
    println("random number ${r}")
    unsafe {
        var fmt = LibC.mallocCString("Hello, No.%d\n")
        printf(fmt, 1)
        LibC.free(fmt)
    }
}
在引入与 C 语言的互操作过程中,同时也引入了 C 的许多不安全因素,因此在仓颉中使用 unsafe 关键字,用于对跨 C 调用的不安全行为进行标识。

最后

同时,仓颉当前在尝试支持AI Native原生智能应用开发、DSL KIT、Actor和分布式编程等。不过,就目前来看感觉仓颉是一个所有语言的组合,不管你之前使用的是什么语言可能都会感觉得到很熟悉。但我觉得,开发者的脑子马上就不够用了。

现在又多了一个选择,你会学吗?

如 果 你 有 好 的 原 创 文 章 , 欢 迎 授 权 转 载 ~

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
别被“某音”前凸后翘的网红骗了

别被“某音”前凸后翘的网红骗了

健身S叔
2026-03-22 11:12:04
北京挖出大太监李莲英之墓,开棺后,考古人员被吓得浑身发抖

北京挖出大太监李莲英之墓,开棺后,考古人员被吓得浑身发抖

历史人文2
2026-04-05 11:30:03
苏亚雷斯无缘世界杯,143场69球纪录戛然而止

苏亚雷斯无缘世界杯,143场69球纪录戛然而止

甜份超标的我
2026-06-01 00:12:01
德比斯创造最快圈速!获第8不是张雪机车的问题 比雅马哈更受限制

德比斯创造最快圈速!获第8不是张雪机车的问题 比雅马哈更受限制

念洲
2026-06-01 09:40:59
“最干净女演员”被富商苦追10年才嫁,如今和女儿被宠如宝

“最干净女演员”被富商苦追10年才嫁,如今和女儿被宠如宝

吃青菜长高
2026-05-26 16:31:47
香会爆发激烈交锋,短短3天全球见识了:日菲的软弱,中国的强大

香会爆发激烈交锋,短短3天全球见识了:日菲的软弱,中国的强大

闻识
2026-06-01 06:19:52
为什么很多拥有几百万存款的人,平时都很朴素?内行人:4大原因

为什么很多拥有几百万存款的人,平时都很朴素?内行人:4大原因

猫叔东山再起
2026-06-01 11:30:08
伊朗外交部:伊朗武装部队回击美军“侵略行动”

伊朗外交部:伊朗武装部队回击美军“侵略行动”

新华社
2026-06-01 16:58:04
六辆装甲车白守!无人机钻门缝炸穿指挥室,旅长当场脑浆迸裂

六辆装甲车白守!无人机钻门缝炸穿指挥室,旅长当场脑浆迸裂

深度报
2026-05-30 00:32:15
电车的“免费午餐”结束了:养路费改革的必然与公平

电车的“免费午餐”结束了:养路费改革的必然与公平

民间胡扯老哥
2026-05-30 06:39:32
中国人最擅长取外号了,网友:这评论区没半小时出不去

中国人最擅长取外号了,网友:这评论区没半小时出不去

另子维爱读史
2026-05-31 08:10:46
争前三!泰山签新后腰 马德鲁加不愁下家 外教打短工?韩鹏钉子户

争前三!泰山签新后腰 马德鲁加不愁下家 外教打短工?韩鹏钉子户

刀锋体育
2026-06-01 12:26:59
耿同学的北航博导杨昀:论文不让国内看,跟肖飞合作,清华本硕没有一作

耿同学的北航博导杨昀:论文不让国内看,跟肖飞合作,清华本硕没有一作

小小河
2026-05-29 22:41:27
香格里拉论坛:日本防卫大臣未就可能的对台武器供应问题作出回答

香格里拉论坛:日本防卫大臣未就可能的对台武器供应问题作出回答

俄罗斯卫星通讯社
2026-06-01 15:07:12
中国刚划定,欧尔班有望接替古特雷斯,成为新任联合国秘书长?

中国刚划定,欧尔班有望接替古特雷斯,成为新任联合国秘书长?

杰丝聊古今
2026-06-01 11:14:51
阿斯:皇马方面否认与罗德里达成协议,格瓦表达想加盟的意愿

阿斯:皇马方面否认与罗德里达成协议,格瓦表达想加盟的意愿

懂球帝
2026-06-01 15:16:06
波多野结衣公开择偶标准,想嫁给中国男人,她远比你想象的更优秀

波多野结衣公开择偶标准,想嫁给中国男人,她远比你想象的更优秀

花哥扒娱乐
2026-05-14 20:10:50
何猷君奚梦瑶大婚!一双儿女当花童,四太笑的开心,谷爱凌凑热闹

何猷君奚梦瑶大婚!一双儿女当花童,四太笑的开心,谷爱凌凑热闹

娱说瑜悦
2026-06-01 16:11:54
年轻人想去纪委工作,要三思而行!

年轻人想去纪委工作,要三思而行!

一口娱乐
2026-05-30 19:36:20
李明医生突然离世,年仅48岁!

李明医生突然离世,年仅48岁!

大风新闻
2026-06-01 15:53:06
2026-06-01 17:40:49
君伟说
君伟说
分享职场故事
442文章数 48关注度
往期回顾 全部

科技要闻

两大芯片巨头打起来了

头条要闻

见习医生网购3元美工刀 拆快递时被割伤神经手无知觉

头条要闻

见习医生网购3元美工刀 拆快递时被割伤神经手无知觉

体育要闻

杰威:如果我没受伤,我们能击败马刺

娱乐要闻

奚梦瑶婚礼现场图!一双儿女当花童

财经要闻

宇树科技科创板IPO过会

汽车要闻

赛力斯联手字节打造"赛豆" 首款跨界车年内推出

态度原创

家居
手机
数码
健康
公开课

家居要闻

自信舒展 高背座椅

手机要闻

电线变网线、速率翻倍!华为凌霄子母路由Q7电线版发布:子母套装1219元

数码要闻

价保618享国补促销双重优惠!天选7 Pro酷睿版新品到手价7989元起

尝试干细胞疗法如何避免踩坑?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版