【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.pswp.cn/pingmian/80185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80185.shtml
英文地址,請注明出處:http://en.pswp.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分鐘之內調度器會把來自同一個客戶端的請求轉發到同一個后端服務器。【不管使用的調度算法是什么。】【稱為持久性連接。】 作用:將客戶端一段時間…