【HarmonyOS NEXT+AI】问答05:ArkTS和仓颉编程语言怎么选?

在“HarmonyOS NEXT+AI大模型打造智能助手APP(仓颉版)”课程里面,有学员提到了这样一个问题:
鸿蒙的主推开发语言不是ArkTS吗,本课程为什么使用的是仓颉编程语言?

这里就这位同学的问题,统一做下回复,以方便其他同学参考。往期问答,可以在我主页查到。

鸿蒙编程语言的发展史

在正式介绍ArkTS和仓颉编程语言之前,咱们先来聊一聊鸿蒙编程语言的发展史。笔者从2019年起就开始关注鸿蒙了,因此对鸿蒙发展路线图比较了解。鸿蒙生态支持多种编程语言。以下是常用的鸿蒙编程语言介绍。

早期的HarmonyOS支持的开发语言包括JS(JavaScript)、C/C++。其中,JS主要用于应用开发,而C/C++主要用于设备开发。因为,早期的HarmonyOS只支持手表等智能穿戴设备,所以,用JS是能够胜任的。

从HarmonyOS 2开始,HarmonyOS开始兼容Android,引入了Java开发语言,能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、AR/VR眼镜等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。此时的HarmonyOS才算真正意义上的“鸿蒙操作系统”,因为已经具有“鸿蒙操作系统”的三大特征。

从HarmonyOS 3开始,引入了华为自研的ArkTS开发语言(前身是eTS)、方舟编译器等。ArkTS基于TypeScript(简称TS)语言扩展而来,是TS的超集。其最大的亮点是,ArkTS在TS基础上主要扩展了声明式UI能力(即ArkUI),让开发者以更简洁、更自然的方式开发高性能应用。

从HarmonyOS 5(HarmonyOS NEXT)开始,引入了华为自研的仓颉编程语言(英文名为Cangjie,简称“仓颉”或者“仓颉语言”),作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。

因此,从上述语言的发展史可以推测,鸿蒙选择编程语言,一开始是从实用主义出发的,即一开始想的是如何快速开发应用,如何能快速吸引开发人员参与到鸿蒙的开发中来。早期选择JS,中期选择Java,后期研发ArkTS(语法兼容TS)都是如此,因为这些语言都是现成的,市面上有大量的会这类语言的开发人员。

后期,随着鸿蒙的发展,特别是进入到了HarmonyOS NEXT的新时代,鸿蒙对于性能的要求越来越高,同时,华为的自研水平也上到了一个新的台阶,顺势推出仓颉也就不难理解了。

仓颉编程语言特性

作为一门新进的编程语言,仓颉吸取了各大主流编程语言的优点,形成了自己具有特性。

  • 高效编程:面向应用开发,编程语言应该能够易学易用,降低开发者入门门槛和开发过程中的心智负担,支持各种常见的开发范式和编程模式,让开发者简洁高效地表达各种业务逻辑。仓颉是一门多范式编程语言,支持函数式、命令式和面向对象等多种范式,包括值类型、类和接口、泛型、代数数据类型、模式匹配、以及高阶函数等特性。此外,仓颉还支持类型推断,能够减轻开发者类型标注的负担;通过一系列简明高效的语法,能够减少冗余书写、提升开发效率;语言内置的各种语法糖和宏(macro)的能力,支持开发者基于仓颉快速开发领域专用语言(DSL),构建领域抽象。
  • 安全可靠:作为现代编程语言,仓颉追求编码即安全,通过静态类型系统和自动内存管理,确保程序的类型安全和null safety等内存安全;同时,仓颉还提供各种运行时检查,包括数组下标越界检查、类型转换检查、数值计算溢出检查、以及字符串编码合法性检查等,能够及时发现程序运行中的错误;此外,还通过代码扫描工具、混淆工具以及消毒器,进一步提供跨语言互操作安全和代码资产保护等支持。
  • 轻松并发:并发和异步编程能够有效提高处理器利用率,并在交互式应用中确保程序的响应速度,是应用开发中必不可少的能力。仓颉语言实现了轻量化用户态线程和并发对象库,让高效并发变得轻松。仓颉语言采用用户态线程模型,每个仓颉线程都是极其轻量级的执行实体,拥有独立的执行上下文但共享内存。对开发者来说,用户态线程的使用和传统的系统线程的使用方式保持一致,没有带来额外负担;而从运行态视角看,线程的管理由运行时完成,不依赖操作系统的线程管理,因此线程的创建、调度和销毁等操作更加高效,且资源占用比系统线程更少。为了避免数据竞争,仓颉语言提供了并发对象库,并发对象的方法是线程安全的,因此在多线程中调用这些方法和串行编程没有区别,应用逻辑的开发者无需额外关心并发管理。对于一些核心库,仓颉还提供了无锁或者细粒度锁的算法实现,能够进一步减少线程的阻塞,提升并发度。
  • 卓越性能:仓颉编译器及运行时从全栈对编译进行优化,包括编译器前端基于CHIR(Cangjie HighLevel IR)高层编译优化(比如语义感知的循环优化、语义感知的后端协同优化等),基于后端的编译优化(比如:SLP向量化、Intrinsic优化、InlineCache、过程间指针优化、Barrier优化等),基于运行时的优化(比如轻量锁、分布式标记、并发Tracing优化等),一系列的优化让仓颉充分发挥处理器能力,为应用提供卓越的性能支持。另外仓颉语言对运行时进行原生的轻量化设计,通过对运行时模块化分层设计,定义仓颉公共对象模型和运行时公共基础组件,基于公共对象模型,实现运行时的内存管理、回栈、异常处理、跨语言调用等基础能力,大幅减少多个能力间的冗余对象设计,精简运行时体积。同时通过包的按需加载技术,减少仓颉应用启动的冗余包内存开销,因此对于资源敏感设备,占用资源更少,支持更友好。

除此之外,仓颉还支持面向应用开发的一系列工具链,包括语言服务(高亮、联想)、调试(跨语言调试、线程级可视化调试)、静态检查、性能分析、包管理、文档生成、Mock工具、测试框架、覆盖率工具、Fuzz工具以及智能辅助编程工具,进一步提升软件开发体验以及效率。

仓颉编程语言是纯自研的吗?是完全自主可控的吗?

仓颉编程语言是一款由华为主导设计和实现的面向全场景智能的编程语言,从语言规范的制定,到实现以及未来的语言社区都将实现自主可控,该语言没有基于任何现有的编程语言演进。

华为为什么要开发一个新的编程语言?

生态范式的变革,将给未来的智能应用以及Agent开发带来新的诉求和挑战,比如:构建效率、空间计算应用的流畅交互体验、多Agent协同、系统性安全问题等。下一代编程语言应提供原生AI应用开发框架和设计特定DSL(即Agent DSL)来简化应用开发,使模型部署、智能决策等AI相关功能成为开发框架的一部分,给开发者带来高效的开发体验。针对以上挑战,华为设计并实现了一款新的编程语言仓颉。仓颉编程语言具备原生智能化、天生全场景、高性能、强安全等特点,内置定制的Agent DSL以及AI应用开发框架,可支持面向领域的声明式开发,提供模型部署、智能决策、Agent协同的框架能力。 当前在鸿蒙原生应用的开发中,支持声明式UI,一次开发、多端部署的ArkTS语言已经被广泛使用。仓颉语言作为面向未来的下一代编程语言当前已经完成设计与实现并启动了开发者预览,未来将与ArkTS共同发展,为鸿蒙原生应用开发者提供极致高效的开发体验。

仓颉的定位是什么,跟鸿蒙的ArkTS语言什么关系?

仓颉编程语言是一款面向全场景智能的下一代应用编程语言,主打原生智能化,天生全场景,高性能以及强安全,与鸿蒙系统结合,提供良好的编程体验。面向不同业务场景,鸿蒙生态向应用开发者提供仓颉和ArkTS等多语言混合开发能力。仓颉和ArkTS共同发展,在鸿蒙生态中形成优势互补。仓颉更适合有高性能高并发需求的业务场景,仓颉编程语言目标是打造鸿蒙应用在任务并行/数据并行/高频数据交互/高内存开销等典型场景下的性能竞争力。另外未来面向鸿蒙AI原生应用开发,仓颉提供了面向开发者全套的内嵌Agent DSL的编程框架,便于开发者高效的完成鸿蒙AI原生应用开发。

目前仓颉语言性能怎么样?在哪些领域或场景应用推荐使用仓颉编程语言?

关于仓颉的具体应用场景,鸿蒙应用中的任务并行/数据并行/高频数据交互/高内存开销等典型场景,可以获得很好的效果,另外未来关于AI原生应用的开发,可以采用仓颉全套解决方案实现。

仓颉发布后,已经开发的鸿蒙应用是否需要再重新开发一套仓颉版本?

已经开发的应用不需要重新开发仓颉版本。鸿蒙操作系统支持仓颉语言与ArkTS语言高性能互操作。未来开发者可以根据业务场景需要,对新增业务部分,根据具体场景选择使用仓颉编程语言或ArkTS进行增量开发。对应高吞吐量/高频读写的数据处理场景、高频交互高负载场景、对启动时延敏感等场景建议优先选择仓颉语言。

仓颉编程语言与HarmonyOS NEXT是什么关系,与OpenHarmony生态的关系是怎样的?

当前发起的仓颉语言预览版开发套件是基于HarmonyOS NEXT开发的,开发者需要有带HarmonyOS NEXT镜像的手机镜像开发和调试。同样,仓颉语言也会支持OpenHarmony。

除了终端应用开发以外,仓颉未来还会支持其他场景的软件开发吗?

仓颉语言除了终端鸿蒙原生应用场景之外,还可以支持云侧、服务端的软件开发,对标Java/Go的应用开发生态,仓颉希望能够联合更多的开发者共同构建一套企业级的应用开发生态,包括应用框架、中间件及三方库,目前已构建的企业级的应用开发生态在国内已经有多家厂商在用仓颉开发服务端应用了,比如工行、中移动、泛微、科蓝等单位,覆盖金融、电信、电子政务等多个行业。

鸿蒙编程语言的选择

在了解上述鸿蒙编程语言的区别之后,相信各位对于鸿蒙编程语言的选择有了自己的判断能力。读者在选择语言的时候,可以结合自身的情况,综合考虑以下几个方面。

1. 个人的偏好

开发者对于编程语言是有一定的偏好的,选ArkTS或是Java也是可以尊重个人的喜好。

如果你熟悉Java或者Android则可以选Java;如果你熟悉JS或者TS,就可以选ArkTS;如何你熟悉Rust,那么仓颉也是不错的选择。

2. 职业的需要

如果想要实现一个强大的完整的鸿蒙应用功能,且能最大限度适配现有市面上的Android设备,那么现阶段Java是个不错的选择。不过需要注意的是,鸿蒙从API 8之后,就不再支持Java了。有关Java开发鸿蒙应用的相关内容,可以参阅笔者所著的《鸿蒙HarmonyOS手机应用开发实战》《鸿蒙HarmonyOS应用开发从入门到精通战》以及视频教程“鸿蒙系统实战短视频App 从0到1掌握HarmonyOS”。

ArkTS目前是处于鸿蒙生态主推的地位,新商业项目的创建建议基于ArkTS来构建。有关ArkTS开发鸿蒙应用的相关内容,可以参阅笔者所著的《鸿蒙HarmonyOS应用开发入门》《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》《鸿蒙之光HarmonyOS NEXT原生应用开发入门》以及视频教程“鸿蒙零基础快速实战-仿抖音App开发( ArkTS版 )”。

如果你是纯粹想学习一门新语言,想不断跟随语言的演进,那么仓颉也是不错的选择。从未来发展上看,仓颉有可能会替补ArkTS,作为主力开发语言。不过需要注意的是,仓颉目前还只是开发者预览版本,API处于一种不稳定的状态,功能也不太完善,不建议在商业场景使用。有关仓颉编程语言的相关内容,可以参阅笔者所著的《仓颉编程从入门到实践》以及视频教程“HarmonyOS NEXT+AI大模型打造智能助手APP(仓颉版)”。

参考资料

更多开源教程,详见:

  • 《跟老卫学HarmonyOS开发》:https://github.com/waylau/harmonyos-tutorial
  • 《跟老卫学仓颉编程语言开发》:https://github.com/waylau/cangjie-programming-language-tutorial

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

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

相关文章

Booth Encoding vs. Non-Booth Multipliers —— 穿透 DC 架构看乘法器的底层博弈

目录 🧭 前言 🌱 1. Non-Booth 乘法器的实现原理(也叫常规乘法器) 🔧 构建方式 ✍️ 例子:4x4 Non-Booth 乘法器示意 🧱 硬件结构 ✅ 特点总结 ⚡ 2. Booth Encoding(布斯编码…

GET请求如何传复杂数组参数

背景 有个历史项目,是GET请求,但是很多请求还是复杂参数,比如:参数是数组,且数组中每一个元素都是复杂的对象,这个时候怎么传参数呢? 看之前请求直接是拼接在url后面 类似&items%5B0%5D.…

iOS App 安全性探索:源码保护、混淆方案与逆向防护日常

iOS App 安全性探索:源码保护、混淆方案与逆向防护日常 在 iOS 开发者的日常工作中,我们总是关注功能的完整性、性能的优化和UI的细节,但常常忽视了另一个越来越重要的问题:发布后的应用安全。 尤其是对于中小团队或独立开发者&…

A* (AStar) 寻路

//调用工具类获取路线 let route AStarSearch.getRoute(start_point, end_point, this.mapFloor.map_point); map_point 是所有可走点的集合 import { _decorator, Component, Node, Prefab, instantiate, v3, Vec2 } from cc; import { oops } from "../../../../../e…

深度解析动态IP业务核心场景:从技术演进到行业实践

引言:动态IP的技术演进与行业价值 在数字化转型加速的今天,IP地址已从单纯的网络标识演变为支撑数字经济的核心基础设施。动态IP作为灵活高效的地址分配方案,正突破传统认知边界,在网络安全防护、数据价值挖掘、全球业务拓展等领…

MySQL 性能调优:从执行计划到硬件瓶颈

MySQL 性能调优:从执行计划到硬件瓶颈 一、性能调优的宏观视角与核心挑战 在数字化浪潮下,企业数据量呈指数级增长,MySQL 作为主流关系型数据库,面临着巨大的性能压力。某电商平台日均订单量突破千万,高峰期数据库响…

开源数字人框架 AWESOME - DIGITAL - HUMAN:技术革新与行业标杆价值剖析

一、项目核心价值:解锁数字人技术新境界 1. 技术普及:降低准入门槛,推动行业民主化 AWESOME - DIGITAL - HUMAN 项目犹如一场技术春雨,为数字人领域带来了普惠甘霖。它集成了 ASR、LLM、TTS 等关键能力,并提供模块化扩展接口,将原本复杂高深的数字人开发流程,转化为一…

robotframe启动ride.py

我的双击ride.py会自动用pycharm打开,变成代码文件 解决方法:定位到ride.py所在文件夹(在anaconda的scripts里面),文件夹上方输入cmd 再输入该命令即可

怎样简单实现不同数据库的表间的 JOIN 运算

数据分析涉及不同业务系统时就要做跨库计算,而表间 JOIN 是最麻烦的,很多数据库都不具备这样的能力,用 Java 取数再计算又太复杂。用 esProc 完成跨库 JOIN 会简单很多。 数据与用例 车辆管理系统(DB_Vehicle)保存了…

Nacos源码—4.Nacos集群高可用分析三

大纲 6.CAP原则与Raft协议 7.Nacos实现的Raft协议是如何写入数据的 8.Nacos实现的Raft协议是如何选举Leader节点的 9.Nacos实现的Raft协议是如何同步数据的 10.Nacos如何实现Raft协议的简版总结 6.CAP原则与Raft协议 (1)CAP分别指的是什么 (2)什么是分区以及容错 (3)为…

普通IT的股票交易成长史--20250509晚复盘

声明: 本文章的内容只是自己学习的总结,不构成投资建议。价格行为理论学习可参考简介中的几位,感谢他们的无私奉献。 送给自己的话: 仓位就是生命,绝对不能满仓!!!!&…

python实现点餐系统

使用python实现点餐系统的增加菜品及价格,删除菜品,查询菜单,点菜以及会员折扣价等功能。 代码: 下面展示一些 内联代码片。 # coding utf-8menu {拍黄瓜: 6, 小炒肉: 28, 西红柿炒蛋: 18, 烤鱼: 30, 红烧肉: 38, 手撕鸡: 45,…

从ellisys空口分析蓝牙耳机回连手机失败案例

问题背景: 前两天同事发现我们现在做的项目,耳机在跟某些特定类型安卓手机(尤其是比较新的手机)回连会失败,然后我帮他分析了一些log,记录如下: 回连失败所做步骤如下: 手机和耳机…

教育+AI:个性化学习能否颠覆传统课堂?

近年来,人工智能(AI)技术迅猛发展,逐渐渗透到各行各业,教育领域也不例外。从智能辅导系统到自适应学习平台,AI正在改变传统的教学模式,使个性化学习成为可能。然而,这种变革能否真正…

【C++设计模式之Strategy策略模式】

C设计模式之Strategy策略模式 模式定义核心思想动机(Motivation)结构(Structure)实现步骤1. 定义策略接口(基于继承)2.实现具体策略3.上下文类(Context)4. 在main中调用 应用场景(基于继承)1.定义策略接口2.实现具体策略3.上下文类…

Python企业级MySQL数据库开发实战指南

简介 Python与MySQL的完美结合是现代Web应用和数据分析系统的基石,能够创建高效稳定的企业级数据库解决方案。本文将从零开始,全面介绍如何使用Python连接MySQL数据库,设计健壮的表结构,实现CRUD操作,并掌握连接池管理、事务处理、批量操作和防止SQL注入等企业级开发核心…

matlab转python

1 matlab2python开源程序 https://blog.csdn.net/qq_43426078/article/details/123384265 2 网址 转换网址:https://app.codeconvert.ai/code-converter?inputLangMatlab&outputLangPython 文件比较网址:https://www.diffchecker.com/text-comp…

Vue 3 中编译时和运行时的概念区别

文章目录 前言Vue 3 中的编译时 vs 运行时区别模板在编译时转化为渲染函数编译时的优化处理运行时的工作:创建组件实例与渲染流程前言 详细整理 Vue 3 中编译时和运行时的概念区别,并重点解释为什么组件实例是在运行时创建的。 我会结合官方文档、源码分析和社区解释,确保内…

Spring 框架实战:如何实现高效的依赖注入,优化项目结构?

Spring 框架实战:如何实现高效的依赖注入,优化项目结构? 在当今的 Java 开发领域,Spring 框架占据着举足轻重的地位。而依赖注入作为 Spring 的核心概念之一,对于构建高效、灵活且易于维护的项目结构有着关键作用。本…

创建虚拟服务时实现持久连接。

在调度器中配置虚拟服务,实现持久性连接,解决会话保持问题。 -p 【timeout】 -p 300 这5分钟之内调度器会把来自同一个客户端的请求转发到同一个后端服务器。【不管使用的调度算法是什么。】【称为持久性连接。】 作用:将客户端一段时间…