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