仓颉开发入门初体验

news2024/11/26 18:45:14
作者:黄林晴
 

顺便吆喝一声,如果你计算机、软件工程、电子等相关专业本科及以上学历,欢迎来共事。前端/后端/测试均可投,技术大厂。

前言

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

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

仓颉的优势

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

  • 原生智能化:仓颉编程语言内嵌了 AgentDSL 的编程框架,实现了自然语言与编程语言有机融合。多 Agent 协同,简化符号表达,模式可以自由组合,支持各类智能应用开发。
  • 天生全场景:仓颉编程语言采用轻量化可缩放运行时和模块化分层设计,即使在资源受限的设备上也能流畅运行。同时,它支持全场景领域扩展,元编程和 eDSL 技术,可助力面向领域声明式开发。
  • 高性能:仓颉编程语言采用全并发 GC,应用线程运行更加流畅,响应速度更快。轻量化线程设计进一步提升了并发性能,降低了开发成本。
  • 强安全:仓颉编程语言将安全理念融入语言设计,帮助开发者专注于业务逻辑,减少安全漏洞的产生,实现“编码即安全”的愿景。

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

环境配置

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

HelloWorld

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

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

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

变量声明

变量定义的具体形式为:

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

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

  • 可变性修饰符:let 与 var,分别对应不可变和可变属性,可变性决定了变量被初始化后其值还能否改变,仓颉变量也由此分为不可变变量和可变变量两类。
  • 可见性修饰符:private 与 public 等,影响全局变量和成员变量的可引用范围,详见后续章节的相关介绍。
  • 静态性修饰符:static,影响成员变量的存储和引用方式,详见后续章节的相关介绍。

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

 

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

Struct类型

基础结构

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

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

 

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

mute函数

修改代码如下所示:

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

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

跨语言操作

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

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

 

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

 

在引入与 C 语言的互操作过程中,同时也引入了 C 的许多不安全因素,因此在仓颉中使用 unsafe 关键字,用于对跨 C 调用的不安全行为进行标识。

最后

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

观测到“量子反常霍尔效应”,为何就被称为“离诺奖最近的物理学家”?

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:2000字丨8分钟阅读 6 月 24 日,2023 年度国家最高科学技术奖在京揭晓,61岁的凝聚态物理领域科学家、清华大学薛其坤院士荣…

基于改进天鹰优化算法(IAO)优化BP神经网络数据分类预测(IAO-BP)

改进天鹰优化算法(IAO)见:【智能优化算法】改进的AO算法(IAO)-CSDN博客 BP神经网络的数据分类预测:基于BP神经网络的数据分类预测-CSDN博客 代码原理 基于改进天鹰优化算法(IAO)优化BP神经网络数据分类预测(IAO-BP&…

win系统缺少vcruntime140.dll文件的解决办法,亲测实用的解决方法

运行软件的时候提示无法启动此程序,因为计算机中丢失 vcruntime140.dll 尝试重新安装该程序以解决此问题,其实主要因为vcruntime140.dll丢失,如果您启动程序并收到 Windows 无法找到 vcruntime140.dll DLL 或它丢失的错误,您可以使…

# Kafka_深入探秘者(10):kafka 监控

Kafka_深入探秘者(10):kafka 监控 一、kafka JMX 1、JMX :全称 Java Managent Extension 在实现 Kafka 监控系统的过程中,首先我们要知道监控的数据从哪来,Kafka 自身提供的监控指标(包括 broker 和主题的…

如何进行员工 OKR 反馈?

目标和关键结果框架是一种协作性的目标设定方法,帮助团队设定理想的目标(目标),并有具体的、可衡量的行动项目,称为关键结果。实施 OKR 为一个富有成效的、以目标为导向的环境奠定了基础,从而消除了提供反馈…

报名通道开启!2024国际燃气轮机运维大会将于10月登陆花城

驱动未来运维技术革新 共筑燃机生态新纪元 | 2024国际燃气轮机运维大会报名通道正式开启 随着全球燃气轮机装备技术不断升级与“双碳”战略的深入,全球燃气轮机市场规模也将进一步扩大,预计到2033年达到536.7亿美元左右,2023-2033年预测期间年…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…

普元MDM主数据管理系统与金蝶云星空ERP系统(企业版)集成方案(工程机械行业)

一、客户介绍 某工程机械行业龙头公司业务范围包括工程机械、矿山机械、农业机械、环卫机械、应急救援装备和商用汽车、现代服务业等,产品远销190多个国家和地区,覆盖“一带一路”沿线95%以上的国家和地区,年出口总额和海外收入持续居中国行…

10种超强图像特征提取算法Python代码实现

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~ 图像特征提取是计算机视觉和图像处理的关键步骤,因…

中国航天:星舰与猛禽发动机数据分析

文章目录 MainReference Main 马斯克坚信,随着星舰的全面投入运营,SpaceX将能够承担地球上主轨道超过99%的载荷质量。这款第三代星舰的起飞推力将跃升至10000吨以上,其有效载荷质量亦将高达200吨以上。 不仅如此,每次发射的成本控…

文华财经盘立方同花顺期货通均线多空变色指标公式源码

文华财经盘立方同花顺期货通均线多空变色指标公式源码: VAR1:(HHV(HIGH,21)-C)/(HHV(HIGH,21)-LLV(LOW,21))*100-10; VAR2:(C-LLV(LOW,21))/(HHV(HIGH,21)-LLV(LOW,21))*100; VAR3:SMA(VAR2,13,8); 多方: SMA(VAR3,13,8),LINETHICK2; A:MA(-100*(HHV(HIGH,34)-…

又是一篇关于GD32堆栈的梳理+FreeRTOS的空间

GD32F103CB:SRAM 20K(0x5000) 这篇文章主要想讲清楚几个事情: 1、启动文件Stack_Size、Heap_Size的大小设置有啥影响; 2、FreeRTOS的内存:FreeRTOSConfig.h文件configTOTAL_HEAP_SIZE; 问题2…

Linux[高级管理]——Squid代理服务器的部署和应用(传统模式详解)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年6月24日11点11分 🀄️文章质量:95分 目录 ————前言———— Squid功能 Squ…

仓库选址问题【数学规划的应用(含代码)】阿里达院MindOpt

本文主要讲述使用MindOpt工具优化仓库选址的数学规划问题。 视频讲解👈👈👈👈👈👈👈👈👈 一、案例场景 仓库选址问题在现代物流和供应链管理中具有重要的应用。因为仓库…

AI 时代程序员生存指南 —— 一名普通程序员的ChatGPT 一周年回顾

ChatGPT 发布一周年了,切实改变了我的工作方式和职业路径,趁着周末写下这篇文章,我希望以一名普通程序员的视角,带大家回顾一下过去一年大模型领域的发展情况,以及个人的所思所想。文章会分为四个部分,从初…

AWS云计算平台:全方位服务与实践案例

摘要 在数字化浪潮的推动下,云计算已成为企业转型的强大引擎。AWS作为云计算的先锋,不仅提供了一系列强大的基础设施服务,更是在人工智能领域不断探索和创新。本文将带您领略AWS的全方位服务,并透过实际案例,感受其在…

文心一言 VS 讯飞星火 VS chatgpt (291)-- 算法导论21.3 4题

四、假设想要增加一个 PRINT-SET(x) 操作,它是对于给定的结点 x 打印出 x 所在集合的所有成员,顺序可以任意。如何对一棵不相交集合森林的每个结点仅增加一个属性,使得 PRINT-SET(x) 所花费的时间同 x 所在集合元素的个数呈线性关系&#xff…

新手必备!短视频剪辑常用的18个技巧——剪映篇

导入素材:这里我们可以选择自己拍摄好的素材(图片、视频或录制好的音频),按照顺序导入剪辑区剪辑。这一步是剪辑的基础,确定剪辑的大体思路与成片框架!别忽略了,剪映官方素材库提供的素材&#…

Mysql序列

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

SSL证书不安全问题处理方案

正常使用情况: verifyFalse:代表不使用SSL证书校验、 以上方式在coze中使用失败 response requests.get(url, verifyFalse).text替换方案:使用httpx import httpx with httpx.Client(verifyFalse) as client:response client.get(url)参考…