华为仓颉编程语言正式发布,仓颉编程教程

目录

前言

基本概念

标识符

变量

类型

基础数据类型

表达式

if 表达式

while 表达式

for-in 表达式

程序结构

函数

定义函数

调用函数

lambda表达式

应用实例(遍历目录)

枚举

定义与实例化

成员访问规则

match表达式

应用实例(表达式计算)

Option

结构体

定义与实例化

成员访问规则

应用实例(二叉树)

定义与实例化

成员访问规则

继承

属性

值类型与引用类型

接口与扩展

接口

实现接口

扩展

泛型

异常处理

异常类型

构造和抛出异常

异常处理

并发编程

线程模型

创建线程

应用实例(估算圆周率)

跨语言互操作

仓颉 C 互操作基本步骤

类型映射(基础类型)

类型映射(其他类型)

应用实例

概述

定义与调用

在编译时修改程序

应用实例(语言扩展)

总结


前言

华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。

仓颉开发者官网:仓颉 | 华为开发者联盟

仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出:你好,仓颉

基本概念

标识符

变量

变量建一个名字和一个特定类型的值关联起来

类型

类型就像一份协议,规定了一块数据的组织结构及相应的解析/操作方式

基础数据类型

表达式

表达式是可以求值的程序元素,可用于变量赋值、函数传参和返回值等场景

if 表达式

while 表达式

for-in 表达式

程序结构

包(package)是仓颉程序的最小编译单元,一个包由一到多个源文件组成,在每个源文件中可以声明当前文件所属包,也可以导入其他包,由此实现程序的高效管理和复用

在包的顶层作用域中,可以定义一系列的变量、函数和自定义类型(枚举,结构体,类,接口),以及包的声明与导入等,其中的变量和函数被称为全局变量全局函数

在非顶层作用域中可以定义变量和函数,称为局部变量局部函数。自定义类型中的局部变量和函数,称为成员变量成员函数。

函数

定义函数

调用函数

lambda表达式

lambda表达式可以让函数的创建和使用更加灵活,lambda表达式的值就是一个匿名函数

应用实例(遍历目录)

枚举

定义与实例化

成员访问规则

match表达式

应用实例(表达式计算)

Option

结构体

定义与实例化

成员访问规则

应用实例(二叉树)

定义与实例化

成员访问规则

继承

属性

值类型与引用类型

接口与扩展

接口

实现接口

扩展

泛型

异常处理

异常类型

仓颉提供了Exception和Error两个类型,用于描述程序运行时的异常行为

开发者可以继承Exception或其子类来自定义异常类,但不能继承Error或其子类。

构造和抛出异常

构造异常即是构造异常类实例,在throw关键字后接一个异常类实例,即可抛出此异常

异常处理

并发编程

线程模型

仓颉语言实现了M:N 轻量线程模型,支持在少量系统线程之上创建海量用户线程,在实现层面用户线程对应协程,仓颉runtime会自动管理和调度这些协程。

当用户线程t做I/O 等资源访问操作时,若资源尚未就绪,线程t就会被runtime挂起等待、并调入其他线程运行,当资源就绪后又会适时恢复t的执行,高效利用CPU 资源,实现高并发能力。

创建线程

应用实例(估算圆周率)

跨语言互操作

仓颉 C 互操作基本步骤

类型映射(基础类型)

在声明C 函数时,核心在于仓颉如何描述C 数据类型,因此我们需要知道C 与仓颉的类型映射关系

类型映射(其他类型)

在标准库中为CString和CPointer 扩展了一些成员函数,便于操作C 字符串和指针

应用实例

概述

在程序编译阶段,会产生很多有用的信息,可用于程序的分析、优化和功能扩展等。为此仓颉提供了“宏”特性,允许开发者介入编译过程,获取部分编译期信息并修改程序,可以实现埋点插桩、静态反射和语法扩展等功能

定义与调用

在编译时修改程序

应用实例(语言扩展)

总结

本篇文章例举了华为的新产品,仓颉编程,以及仓颉变成的基本使用方法和一些内置的操作方式,包括可以跨语言互操作,拥有并发编程等功能。

仓颉入门教程:华为开发者学堂

白皮书:文档中心

感谢大家的细心阅读,求三连

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The difference between Manhattan distance and Cosine Distance

题意:为什么即使返回了相同的文本块,曼哈顿距离(Manhattan Distance)和余弦距离(Cosine Distance)之间还是存在差异? 问题背景: I am using the qdrant DB and client for embeddin…

Websocket解析及用法(封装一个通用订阅发布主题的webSocket类)

1、什么是WebSocket? websocket的目标是通过一个长连接实现与服务器全双工,双向的通信。是一种在单个TCP连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 js中创建websocket…

LabVIEW在机器人研究所中的应用

机器人研究所致力于机器人技术的研究与开发,涵盖工业机器人、服务机器人、医疗机器人等多个领域。研究所需要一个高效、灵活的实验控制和数据采集系统,以进行复杂的机器人实验,并对实验数据进行实时处理和分析。 项目需求 实时控制与监控&am…

使用面向对象方式编写ROS2节点

1.使用c方式创建节点 在d2lros2/chapt2/chapt2_ws/src/example_cpp/src下新建node_03.cpp,接着输入下面的代码。 #include "rclcpp/rclcpp.hpp" /* 创建一个类节点,名字叫做Node03,继承自Node. */ class Node03 : public rclcpp::Node {…

完全离线的本地问答模型LocalGPT如何实现无公网IP远程连接提问

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问,由于localGPT只能通过本地局域网IP地址端口号的形式访问,实现远程访问…

java+mysql通讯录管理

完整代码地址如果控制台打印出现乱码,进行如下设置

【Linux】Wmware Esxi磁盘扩容

目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…

django admin添加自己的页面

建立模型 如果要单独建一个页面,用于展示model的数据,可以新建一个model,继承自要展示的那个类 class ViewsByDayModel(ViewsByDay): # 父类为要展示的model类class Meta:proxy True # 使用代理verbose_name 每日浏览次数统计verbose_nam…

嫦娥六号平安回家,Smartbi非常荣幸参与中国航天项目

“小时不识月,呼作白玉盘。”李白的这句诗,承载了古人对月亮的美好想象与纯真童趣。今天,当我们仰望夜空,那轮明月不仅是诗词中的意象,更是科学探索的目标和梦想的寄托。 2024年6月25日14时07分,嫦娥六号返…

Redis-实战篇-什么是缓存-添加redis缓存

文章目录 1、什么是缓存2、添加商户缓存3、前端接口4、ShopController.java5、ShopServiceImpl.java6、RedisConstants.java7、查看Redis Desktop Manager 1、什么是缓存 缓存就是数据交换的缓冲区(称为Cache),是存贮数据的临时地方&#xff…

深入解析链表:解锁数据结构核心奥秘

一. 链表的定义 链表是一种线性数据结构,由一系列节点组成。每个节点包含两个部分: 数据域(Data):存储节点的数据。指针域(Pointer):存储指向下一个节点的地址。 链表的第一个节点…

SpringBoot 3.3.1 + Minio 实现极速上传和预览模式

统一版本管理 <properties><minio.version>8.5.10</minio.version><aws.version>1.12.737</aws.version><hutool.version>5.8.28</hutool.version> </properties><!--minio --> <dependency><groupId>io.m…

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法&#xff0c;它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决…

【PyTest】玩转HTML报告:修改、汉化和优化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…

技术驱动的音乐变革:AI带来的产业重塑

&#x1f4d1;引言 近一个月来&#xff0c;随着几款音乐大模型的轮番上线&#xff0c;AI在音乐产业的角色迅速扩大。这些模型不仅将音乐创作的门槛降至前所未有的低点&#xff0c;还引发了一场关于AI是否会彻底颠覆音乐行业的激烈讨论。从初期的兴奋到现在的理性审视&#xff0…

【算能全国产AI盒子】基于BM1688CV186AH+FPGA智能物联工作站,支持差异化泛AI视觉产品定制

在数据呈现指数级增长的今天&#xff0c;越来越多的领域和细分场景对实时、高效的数据处理和分析的需求日益增长&#xff0c;对智能算力的需求也不断增强。为应对新的市场趋势&#xff0c;凭借自身的硬件研发优势&#xff0c;携手算能相继推出了基于BM1684的边缘计算盒子&#…

IDM(Internet Download Manager)下载器的安装激活与换机方法 IDM怎么用

很多人都知道 Internet Download Manager(以下简称 IDM)是一款非常优秀的下载提速软件。它功能强大&#xff0c;几乎能下载网页中的所有数据&#xff08;包括视频、音频、图片等&#xff09;&#xff0c;且适用于现在市面上几乎所有的浏览器&#xff0c;非常受大家欢迎。IDM 是…

React 扩展

文章目录 PureComponent1. 使用 React.Component&#xff0c;不会进行浅比较2. 使用 shouldComponentUpdate 生命周期钩子&#xff0c;手动比较3. 使用 React.PureComponent&#xff0c;自动进行浅比较 Render Props1. 使用 Children props&#xff08;通过组件标签体传入结构&…

java虚拟机栈帧操作

虚拟机栈(Virtual Machine Stack)是虚拟机(如JVM、Python VM等)用来管理方法调用和执行的栈结构。它主要用于存储方法调用的相关信息,包括局部变量、操作数栈、动态链接和方法返回地址等。 java虚拟机栈操作的基本元素就是栈帧,栈帧主要包含了局部变量表、操作数栈、动态…

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…