国产自研编程语言“仓颉”来了!

在 6.21 召开的华为开发者大会(HDC2024)上,华为自研的国产编程语言“仓颉”终于对外正式发布了!

随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互、设备协同、智能化、安全性等方向的创新,另一方面人工智能也同样驱动软件朝智能化、端边云协同等方向演进。新技术、新场景下应用软件的开发对编程语言提出了新的诉求和挑战。

特性篇

随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互、设备协同、智能化、安全性等方向的创新,另一方面人工智能也同样驱动软件朝智能化、端边云协同等方向演进。新技术、新场景下应用软件的开发对编程语言提出了新的诉求和挑战。

  • 高效编程:

仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,包括值类型、类和接口、泛型、代数数据类型、模式匹配、以及高阶函数等特性。此外,仓颉还支持类型推断,能够减轻开发者类型标注的负担;通过一系列简明高效的语法,能够减少冗余书写、提升开发效率;语言内置的各种语法糖和宏(macro)的能力,支持开发者基于仓颉快速开发领域专用语言(DSL),构建领域抽象。

  • 安全可靠:

仓颉,作为一款现代编程语言,将安全性置于核心地位。它采用先进的静态类型系统,确保在编译阶段即能捕获类型不匹配的错误,从而显著减少运行时类型错误的风险。同时,仓颉还通过自动内存管理机制,如垃圾回收,来避免内存泄漏和悬挂指针等问题,保证内存安全,并内置了对 null 安全的支持。
除了编译时的类型检查,仓颉还提供了丰富的运行时检查功能,如数组越界检查、类型转换验证、数值溢出检测和字符串编码合规性检查等,这些都能确保程序在运行时能够及时发现并报告错误,从而防止程序崩溃或产生不正确的结果。

  • 轻松并发:

仓颉语言采用了一种高效的用户态线程模型,这一模型下的线程极其轻量,每个线程都拥有独立的执行上下文,但内存空间是共享的。对于开发者而言,使用仓颉的用户态线程与使用传统的系统线程体验一致,无需额外的学习成本或编程负担。
从运行时的角度来看,仓颉的用户态线程管理完全由运行时环境负责,不依赖于操作系统的线程管理机制。这种设计使得线程的创建、调度和销毁等操作更加高效,同时也显著减少了系统资源的占用。
为了在多线程环境下避免数据竞争,仓颉语言提供了一套全面的并发对象库。这些并发对象的方法都经过了线程安全设计,因此开发者在多线程环境中调用这些方法与串行编程时并无二致,无需担心并发管理的问题。

除此之外,仓颉编程语言是一种面向全场景应用开发的通用编程语言,可以兼顾开发效率和运行性能,并提供良好的编程体验。还具有以下特点:语法简明高效、多范式编程、类型安全、内存安全、高效并发、兼容语言生态、领域易扩展、助力 UI 开发、内置库功能丰富。

开发篇

标识符:

由英文字母开头,后接零至多个英文字母、数字或下划线“_”,
_123  // 起始下划线 “_” 后不能接数字
3abc  // 数字不能出现在头部
while // 不能使用仓颉关键字

基础数据类型包括:
整数、浮点、布尔、字符、字符串、元组、数组、

区间类型:

区间类型用于表示拥有固定步长的序列,区间类型是一个泛型,使用 Range 表示。每个区间类型的实例都会包含 start、end 和 step 三个值。其中,start 和 end 分别表示序列的起始值和终止值,step 表示序列中前后两个元素之间的差值(即步长);start 和 end 的类型相同(即 T 被实例化的类型),step 类型是 Int64,并且它的值不能等于 0。

// Range<T>(start: T, end: T, step: Int64, hasStart: Bool, hasEnd: Bool, isClosed: Bool)
let r1 = Range<Int64>(0, 10, 1, true, true, true) // r1 contains 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
let r2 = Range<Int64>(0, 10, 1, true, true, true) // r2 contains 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
let r3 = Range<Int64>(10, 0, -2, true, true, false) // r3 contains 10, 8, 6, 4, 2

Unit 类型:

对于那些只关心副作用而不关心值的表达式,它们的类型是 Unit。例如,print 函数、赋值表达式、复合赋值表达式、自增和自减表达式、循环表达式,它们的类型都是 Unit。

Unit 类型只有一个值,也是它的字面量:()。除了赋值、判等和判不等外,Unit 类型不支持其他操作。
Nothing 类型:
Nothing 是一种特殊的类型,它不包含任何值,并且 Nothing 类型是所有类型的子类型。

break、continue、return 和 throw 表达式的类型是 Nothing,程序执行到这些表达式时,它们之后的代码将不会被执行。其中 break、continue 只能在循环体中使用,return 只能在函数体中使用。包围着的循环体“无法穿越”函数边界。

在下面的例子中,break 出现在函数 f 中,外层的 while 循环体不被视作包围着它的循环体;continue 出现在 lambda 表达式中,外层的 while 循环体不被视作包围着它的循环体。

while (true) {func f() {break // Error, break must be used directly inside a loop}let g = { =>continue // Error, continue must be used directly inside a loop}
}

函数

仓颉使用关键字 func 来表示函数定义的开始,func 之后依次是函数名、参数列表、可选的函数返回值类型、函数体。

func add(a: Int64, b: Int64): Int64 {return a + b
}

struct

struct 类型的定义以关键字 struct 开头,后跟 struct 的名字,接着是定义在一对花括号中的 struct 定义体。struct 定义体中可以定义一系列的成员变量、成员属性、静态初始化器、构造函数和成员函数。

struct Rectangle {let width: Int64let height: Int64public init(width: Int64, height: Int64) {this.width = widththis.height = height}public func area() {width * height}
}

枚举类型

enum 类型的定义以关键字 enum 开头,接着是 enum 的名字,之后是定义在一对花括号中的 enum 体,enum 体中定义了若干构造器,多个构造器之间使用 | 进行分隔(第一个构造器之前的 | 是可选的)。上例中定义了一个名为 RGBColor 的 enum 类型,它有 3 个构造器:Red、Green 和 Blue,分别表示 RGB 色彩模式中的红色、绿色和蓝色。

enum RGBColor {| Red | Green | Blue
}

class 类型的定义以关键字 class 开头,后跟 class 的名字,接着是定义在一对花括号中的 class 定义体。class 定义体中可以定义一系列的成员变量、成员属性、静态初始化器、构造函数、成员函数和操作符函数。

class Rectangle {let width: Int64let height: Int64public init(width: Int64, height: Int64) {this.width = widththis.height = height}public func area() {width * height}
}

接口

接口使用关键字 interface 声明,其后是接口的标识符 I 和接口的成员。接口成员可被 open 修饰符修饰,并且 open 修饰符是可选的。

当接口 I 声明了一个成员函数 f 之后,要为一个类型实现 I 时,就必须在该类型中实现一个对应的 f 函数。

class Foo <: I {public func f(): Unit {println("Foo")}
}main() {let a = Foo()let b: I = ab.f() // "Foo"
}

结语

在探索仓颉编程语言的旅程中,我们领略了其独特的设计理念、强大的功能和无尽的潜力。从基础的数据类型到复杂的算法结构,仓颉语言展现了一种既注重效率又追求简洁与优雅的编程范式。其枚举类型作为语言中的一个重要组成部分,不仅增强了代码的可读性和类型安全性,还为开发者提供了更多的灵活性和便利性。

然而,仓颉语言仍然是一个不断发展的领域,它将继续吸引来自全球各地的开发者们共同探索和创新。我们期待着未来仓颉语言能够带来更多的惊喜和突破,为解决现实世界中的复杂问题提供更加高效和可靠的编程工具。

在结束这篇文章之际,我们衷心感谢所有为仓颉语言做出贡献的开发者们,是他们的辛勤工作让这门语言得以不断发展和完善。同时,我们也希望更多的开发者能够加入到仓颉语言的社区中来,共同推动这门语言的发展,让编程的世界因仓颉而更加精彩。

最后,让我们以开放的心态和探索的热情,继续前行在仓颉编程语言的道路上,共同创造更加美好的未来。

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

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

相关文章

颠覆多跳事实验证!Causal Walk 前门调整技术引领去偏新纪元

Causal Walk: Debiasing Multi-Hop Fact Verifcation with Front-Door Adjustment 论文地址: Causal Walk: Debiasing Multi-Hop Fact Verification with Front-Door Adjustment| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.p…

ctfshow web其他 web450--web460

web450 <?phphighlight_file(__FILE__); $ctfshow$_GET[ctfshow];if(preg_match(/^[a-z][\^][a-z][\^][a-z]$/, $ctfshow)){ //小写字母^小写字母^小写字母eval("($ctfshow)();"); }?ctfshowphpinfo^phpinfo^phpinfoweb451 <?phphighlight_file(__FILE__…

自定义 Hook

1. Hook 使用规则 在使用 Hook 时&#xff0c;需要遵循一些基本规则&#xff0c;以确保代码的正确性和性能。 只能在函数组件或自定义 Hook 中调用 Hook&#xff1a;不能在普通的 JavaScript 函数中调用 Hook&#xff0c;只能在函数组件的顶层或自定义 Hook 中调用。 // 正确 …

Dash开源框架

Dash 是一个基于 Python 的开源框架&#xff0c;由 Plotly 开发&#xff0c;用于构建数据驱动的交互式 Web 应用程序。它结合了 Flask、Plotly 和 React.js 的强大功能&#xff0c;简化了数据可视化应用的开发过程。Dash 非常适合需要将数据科学和数据分析结果展示给非技术用户…

【深度学习系列】全面指南:安装TensorFlow的CPU和GPU版本

本博客旨在为初学者提供一份全面的指南&#xff0c;介绍如何根据个人电脑的配置选择并安装适合的TensorFlow版本。内容涵盖了如何查看电脑显卡型号以确定是安装CPU还是GPU版本的TensorFlow&#xff0c;创建Python虚拟环境&#xff0c;以及使用conda命令查找可用的TensorFlow版本…

FPGA早鸟课程第二弹 | Vivado 设计静态时序分析和实际约束

在FPGA设计领域&#xff0c;时序约束和静态时序分析是提升系统性能和稳定性的关键。社区推出的「Vivado 设计静态时序分析和实际约束」课程&#xff0c;旨在帮助工程师们掌握先进的设计技术&#xff0c;优化设计流程&#xff0c;提高开发效率。 课程介绍 关于课程 权威认证&…

常用主流sip协议软电话客户端软件有哪些?—— 筑梦之路

Ekiga 官网地址&#xff1a;Ekiga ~ Free Your Speech Ekiga&#xff0c;原名GnomeMeeting&#xff0c;支持Windows和Linux&#xff0c;是一个兼容SIP和H.323的视频会议程序&#xff0c;兼容VoIP&#xff0c;IP电话&#xff0c;通过Ekiga可以与使用任何SIP和H.323软硬件的远程…

Windows和Linux系统上的Mamba_ssm环境配置

目录 一、Linux系统安装 二、Win系统安装 1&#xff09;、安装causal_conv1d 1、第一种方法 2、第二种方法&#xff08;感觉可靠&#xff09; 3、第三种方法&#xff1a;直接下载大神编译好的文件进行安装 2&#xff09;、安装mamba-ssm 1、第一种方法 2、第二种方法&…

【感悟】世界著名五大学习法

费曼学习法 把你学习的东西&#xff0c;讲给其他听&#xff0c;如果能讲清楚&#xff0c;就是学会了。 西蒙学习法 确定学习目标&#xff0c;拆分学习任务&#xff0c;六个月就可以精通任意领域。 SQ3R阅读法 浏览、提问、阅读、回忆、复习。 番茄学习法 规划学习和休息时间…

openjudge_2.5基本算法之搜索_8783:单词接龙

概要 8783:单词接龙 总时间限制: 1000ms 内存限制: 65536kB 描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏&#xff0c;现在我们已知一组单词&#xff0c;且给定一个开头的字母&#xff0c;要求出以这个字母开头的最长的“龙”&#xff08;每个单词都最多在“龙”中…

Vue.js 自定义组件的三种用法

1.创建项目 创建项目,你可以参考我以前的博文,这里省略了 项目的目录结构如下: 接着,我们在 src/components 目录下创建一个自定义的组件 SplashHello.vue,示例代码如下所示: <template><div><p>{{ title }}</p><p>{{ message }}</p&…

C++初学者指南第一步---13.聚合类型

C初学者指南第一步—13.聚合类型 文章目录 C初学者指南第一步---13.聚合类型1. 类型分类&#xff08;简化&#xff09;2. 如何定义和使用3. 为什么选择自定义类型/数据聚合&#xff1f;4. 聚合类型初始化5.混合6. 复制7. 值和引用的语义8.聚合的向量(std::vector)9.最令人烦恼的…

不使用ES,如何使用MySQL实现模糊匹配

1.业务场景 例如&#xff1a;我们实现一个公司的申请审批流程&#xff0c;整个业务流程涉及到两种角色&#xff0c;分别是商务角色与管理员角色&#xff0c;整个流程如下图所示&#xff1a; 核心流程总结为一句话&#xff1a;商务角色申请添加公司后由管理员进行审批。 商务在…

10.2 JavaEE——Spring MVC入门程序

要求在浏览器发起请求&#xff0c;由Spring MVC接收请求并响应&#xff0c;具体实现步骤如下。 一、创建项目 在IDEA中&#xff0c;创建一个名称为chapter10的Maven Web项目。 &#xff08;一&#xff09;手动设置webapp文件夹 1、单击IDEA工具栏中的File→“Project Structu…

干货 | 2024生成式AI产业落地路径研究报告(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024生成式AI产业落地路径研究报告 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;诚挚邀请您微信扫描以下二维码加入方案驿站知识星球&#xff0c;…

揭秘SpringBoot自动装配原理

目录 一、自动装配 二、SpringBoot核心注解 2.1 SpringBootApplication 2.2 Conditional*条件注解 三、spring.factories 文件 四、自动装配流程 一、自动装配 SpringBoot 自动装配是 SpringBoot 框架中一项核心特性&#xff0c;它极大地简化了 Spring 应用的开发过…

已解决ApplicationException异常的正确解决方法,亲测有效!!!

已解决ApplicationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查业务逻辑 验证输入数据 确认服务器端资源的可用性 增加对特殊业务情况的处理…

深入理解CSS中的文本对齐方式:水平对齐与垂直对齐

在CSS中&#xff0c;文本对齐是一个常见的需求&#xff0c;它关乎到页面布局的美观和可读性。本文将详细介绍CSS中用于控制文本水平对齐和垂直对齐的属性&#xff0c;以及如何使用它们来提高网页设计的质量。 水平对齐&#xff1a;text-align text-align 属性是CSS中用于控制…

html文本被木马病毒植入vbs脚本

我在公司服务器上写了一个静态html&#xff0c;方便导航&#xff0c;结果没过多久发现html文件被修改了&#xff0c;在</html>标签后加了这些代码。 注&#xff1a;WriteData 的内容很长&#xff0c;被我删掉了很多&#xff0c;不然没法提交这个提问 ​ <SCRIPT Lan…