使用倉頡編程語言是一種怎樣的體驗?

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
英文地址,請注明出處:http://en.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 特定語法(…