使用仓颉编程语言是一种怎样的体验?

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开仓颉编程语言

2019年,仓颉编程语言项目在华为诞生,历经5年研发沉淀,大量研发投入,今日终于和全球开发者见面。仓颉编程语言通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。

花了一个下午快速浏览了一下仓颉(Cangjie)的文档。总体感觉,仓颉把现代编程语言的各种特征都融合在一起,称它为“缝合怪”一点都不夸张。没有历史包袱的确让它看起来很爽。由于目前还无法实际试用它,所以编译和运行性能还不好说。这里只是从语言层面做个简单对比,我选了最熟悉的C#。仓颉和C#的定位很相似,都是带有垃圾回收(GC)的静态语言。在这个领域,我认为C#是最优秀的(之一)。以下只是基本概念的对比,由于对仓颉了解不深,只是快速学习了一下,难免有误,仅供参考。另外,标题有些标题党了,没有引战的意思,只是语言对比,方便学习。另外,标题有些标题党了,没有引战的意思,只是语言对比,方便学习。

一、直接开干

二、后记

  • 再次申明一下,以上对比仅是我对仓颉几个小时了解后的初步判断,难免有错,欢迎大家指证。
  • 加减分的评判仅代表个人观点,也许你就是认为仓颉的Lambda很优美,这都无所谓。从总体结果来看,仓颉的正面评判比例更大,对这门新语言,我跃跃欲试呀,往后十年能不能多恰点饭,就看它了。
  • 仓颉目前还无法试用,具体的编译和运行性能怎么样,还不得知。我觉得,相对于语言表达的新颖、现代、简洁,性能更加重要。这也是发展了几十年的语言的巨大优势,因为它们都是从实战中不断调优走出来的。
  • 仓颉是不是开源的?真不清楚,现在gitee和github上都没看到,也无法试用,官方的包管理平台也没有。和鸿蒙一样,它的生态也及其重要,各种应用框架、中间件,还得靠社区来建。
  • 从仓颉的API来看,目前仓颉是支持框架Linux、Windows、MacOS、OHOS,未来是否能跨安卓和IOS?
  • 仓颉有值类型,加上华为在C和C++上的积累,native的能力应该差不了

三、补充

最后,分享几张PPT,来自仓颉的创作者,点出了仓颉的核心优势。几个亮点说一下,初步理解,可能会有误解:

  • AgentDSL:运行态AI,感觉大概的意思就是C#的SemanticKernel,不过它在语言层面实现了。
  • 全场景领域扩展:利用元编程和eDSL,扩展语法,比如用于HarmonyOS开发的声明式语法。类似C#在EFCore、Blazor、Xaml、声明式UI等领域的扩展。
  • 全并发GC/协程:解决全域停顿,以及用户态轻量级协程。C#从.NET6开始,性能优化方面的投入产出一直很给力,具体性能如何要看测试数据了。仓颉给出的Benchmarks Games数据,比Swift和Java提升26%。如果是比Benchmarks Games数据,C#自然是优于仓颉的。注:C#的绿色协程一直在提案中。
  • 跨语言互操作:仓颉和C的互操作(C++?)。这是C#的优势之一。
  • 函数式编程:函数是一等公民,近几年新出现的语言,都是这样。好在C#有委托,我觉得Action和Func比函数类型更优美,在TS中,我经常会用泛型type,自己包括Action和Func来用。

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

 

作者:functionMC
链接:https://www.zhihu.com/question/659511308/answer/3540488886

下班回家正好刷到这个问题,答一波。

成份声明:菊厂弱鸡Java小开发,编程爱好者

第一次接触仓颉,应该是2022年的年中,项目组正好有个项目需要以仓颉语言实现试试水,我主动请缨揽了下来,想了解下这个新奇的玩意。当时我负责的组件非常简单,就是一个Json序列化的小组件,不求做到JackSon、Gson这类的工具库全部能力,至少也要把JavaBen相关的映射进行一个转换。

开发过程中我的内心心路历程基本是这样的:

《什么?不支持注解?@Getter @Setter我奶奶都会用你没有?》

《天塌了?没有反射功能,这玩意还能实现吗?》

《深入研究Jackson,反射不是必需品,只需要运行期类型结构信息》

《仓颉元编程是什么玩意?仓颉宏又是啥原理?》

《woo! 还可以这样,定好宏规则自己帮我写代码,好像有大学学编译原理的影子了》

《不能再搞研究了,项目要延期了,交付要紧》

《反正项目是交了,好不好还不是领导一句话的事》

就这样,跟仓颉的短暂相处中,我基本了解到了仓颉的几个典型特征:

  • 元编程 —— 给高手战场,只要不怕麻烦,重复的东西基本可以做到轻松用宏定义消除
  • 语法机制 —— 反正我比较喜欢,比Java更简洁,但是Java转过来基本轻松上手
  • 静态编译 —— 在运行态时,冷启动时长以及资源占用有非常好的表现,在云原生时代和Serverless全局资源弹性伸缩的架构体系下有天然的优势,比JVM不知道高到哪里去了。
  • 能文能武 —— 函数编程非常方便,比Java简单很多,同时也对OOP支持度很高,这两点就决定了仓颉可大可小,既可以像在Python、Go那种小脚本中有较好的体验,又可以像Java一样做大型的系统设计。
  • 毛坯房 —— 这就不说了,22年的版本在SDK、工具链上基本上要啥啥没有,全靠自己编。

以上基本就是我对仓颉的第一印象,没有网上说的什么中文编程那么邪乎。

然后直到今年年初,我再次被抽调过来搞仓颉项目,结果发现本地的环境已经太落后了,仓颉已经在短短的两年不到的时间里迭代了20个版本,基本上每个月都有新的功能上线,之前吐槽的语言功能诸如反射、注解、test套件、对get/set的更高效支持以及各种高效类库,工具上也是百花齐放, Cangjie Studio,测试等等各类工具也在补齐,这一次我的开发无论是效率还是体验都大幅度提高了。

最后再啰嗦两句:

我个人的使用其实是有心态上的转变了,也可能是上班上久了也可能是心态变了——我从最开始仓颉的"仓颉啥都没有,我用它干啥",到现在确觉得"仓颉如果啥都有了,那还要我干啥",能够陪着一款语言产品一起成长是一件非常有意思的事情,倘若这玩意真成了,若干年后跟人吹牛说谁谁谁是仓颉之父,那我可以自豪的说我是仓颉之父的初创团队的首批马仔。

我就不绑架情怀之类的了,仅作为开发者自己来说,一门新语言首先它肯定是有利有弊,利在后发制人,取百家之所长,弊在百废待兴,需万千开发者共建。从0到1对开发者来说是一件非常有意义的事情,以前我自己开发基本上不关注基本原理,api拿来即用,现在每天关注的都是各类三方件优缺点到底是啥?仓颉实现能不能更优一些?只能说又回到了我喜欢的开发之路上。

作者:Saint
链接:https://www.zhihu.com/question/659511308/answer/3538007818

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

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

相关文章

Qt Creator自定义控件开发流程

Qt Creator自定义控件开发流程 在 Qt 5.9 Creator 中开发自定义控件的完整流程如下,分为设计、实现、集成和测试四个阶段: 1. 创建自定义控件类 (1) 新建类文件 右键项目 → 添加新文件 → C Class基类选择 QWidget 或现有控件(如 QPushBu…

翻译《The Old New Thing》- 如何创建一个与屏幕大小相同的窗口,而不会被当作全屏窗口处理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p111211 问题描述 任务栏允许全屏窗口覆盖它。这样,当你在放映幻灯片或进行…

深分页末日救星:MySQL延迟关联原理与实战手册

MySQL 深分页(如 LIMIT 100000, 10)本质是 高代价的偏移量扫描,可通过以下方案优化,附核心原理和实操示例: 一、深分页为什么慢? SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 执行过程&…

前端技术栈 —— HTML、CSS和JavaScirpt执行环境

以下内容由GLM回答生成,不保证正确性。 前端技术栈 —— HTML、CSS和JavaScirpt执行环境 JavaScript 的执行环境HTML 和 CSS 的执行环境HTML 和 CSS 是否可以在其他环境中执行?总结 JavaScript 是一种 解释型语言,但它也可以被编译。JavaScr…

多项式带余除法——线性代数题目为例

一、多项式带余除法的定义 二、例题 使用方法将在例题中展示:

学习日记-spring-day40-7.3

知识点: 1.自动装配Resource(3) 知识点 核心内容 重点 Autowired与Resource注入规则 默认注入逻辑:未指定参数时,Resource优先按属性名匹配(by name),失败后按类型匹配&#xf…

重新认识JNIEnv

引言 抛开一堆概念,我们从本质出发。 java 调用c 我们开发移动端或者后端服务 ,都是用的java 或者kotlin 语言。有时候我们需要用c的一些库(ocr识别/导航的算法/ 等) 因为一些跟硬件相关的接口或者系统的api 都是c写的。 C调用J…

人工智能训练师——智能语音识别ASR

人机对话——ASR 概念 ASR(Automatic Speech Recognition,自动语音识别)是一种将人类语音转换为文本的技术。它使得计算机能够“听”懂人类的语音指令或对话,并将其转换成可读、可编辑的文本形式。ASR技术是人机交互领域中的一个…

Compose 常用命令详解——AI教你学Docker

3.3 Compose 常用命令详解 Docker Compose 通过一系列命令高效管理多容器应用。理解这些命令,可以让你灵活地启动、停止、查看、调试、扩缩容和配置 Compose 项目。 一、核心命令详解 1. docker compose up 功能:启动并构建所有服务,生成网…

Mausezahn - 网络流量生成与测试工具(支持从链路层到应用层的协议模拟)

Mausezahn 是一个 网络流量生成与测试工具,主要用于模拟各种网络协议行为、测试网络设备性能、验证安全策略或进行故障排查。它支持从底层链路层(如 Ethernet、VLAN)到高层应用层(如 HTTP、DNS)的协议模拟,…

08-three.js Textures

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3 使用原生 JavaScript 首先是静态页面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ …

git 仓库取消合并的分支

要取消 Git 仓库中某次特定的分支合并(例如第一次合并),同时保留其他分支的合并,需要通过 Git 的版本控制功能来操作。以下是具体的步骤和方法,假设你想撤销某次合并(例如某个提交),并确保其他合并不受影响: 背景假设 你有一个 Git 仓库,主分支(例如 main)上已经合…

【从历史数据分析英特尔该如何摆脱困境】

与大多数其他分析师不同,自2013年以来,笔者就一直在积极强调英特尔未来将遭遇冰山,最终我们预测英特尔将在试图执行其之前的战略时破产。尽管我们更愿意采用与英特尔不同的代工厂方法(即与台积电成立合资企业)&#xf…

【PyTorch】PyTorch中张量(Tensor)微分操作

PyTorch深度学习总结 第六章 PyTorch中张量(Tensor)微分操作 文章目录 PyTorch深度学习总结前言一、torch.autograd模块二、主要功能和使用方法1. 张量的 requires_grad 属性2. backward() 方法3. torch.no_grad() 上下文管理器三、函数总结前言 上文介绍了PyTorch中张量(Ten…

Rust 项目实战:Flappy Bird 游戏

Rust 项目实战:Flappy Bird 游戏 Rust 项目实战:Flappy Bird 游戏理解 Game loop开发库:bracket-libbracket-terminalCodepage 437导入 bracket-lib 创建游戏游戏的模式添加玩家添加障碍最终效果项目源码 Rust 项目实战:Flappy Bi…

Gin 中间件详解与实践

一、中间件的核心概念 定义 中间件是Web开发中非常重要的概念,它可以在请求到达最终处理函数之前或响应返回客户端之前执行一系列操作。Gin 框架支持自定义和使用内置的中间件,让你在请求到达路由处理函数前进行一系列预处理操作。 它是介于请求与响应处…

非接触式DIC测量系统:助力汽车研发与测试的创新技术应用

近年来,随着新能源汽车品牌的快速崛起,新车发布的节奏加快,层出不穷的新产品,给消费者带来了全新的使用体验。与此同时,变革的产品体验也让一些过往的汽车测试和评价标准变得不再适用,尤其是与过往燃油车型…

FOC学习笔记(7)锁相环(PLL)原理及其在电机控制中的应用

1. 锁相环(PLL)概述 锁相环(Phase-Locked Loop, PLL)是一种闭环控制系统,用于使输出信号的相位与输入参考信号的相位同步。PLL广泛应用于通信、电机控制、频率合成、时钟恢复等领域。在电机无传感器控制(Sensorless Control&…

鸿蒙自定义相机的拍照页面

1、权限申请 "requestPermissions": [{"name": "ohos.permission.CAMERA","reason": "$string:reason_camera","usedScene": {"abilities": ["EntryAbility"]}},{"name": "oh…

greenplum7.2并行备份及恢复

1.并行备份 pg_dump -Fd --gp-syntax -U gpadmin -p 5432 -h 172.19.0.2 -d postgres -j 4 -f /opt/greenplum/data/postgres_backup_$(date %Y-%m-%d) 参数 含义 -Fd 使用 directory 格式(支持并行) --gp-syntax 使用 Greenplum 特定语法(…