在“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