隨著數字化時代的發展,手機、平板、PC、電視、智能手表、車機等智能設備的普及率越來越高,但不同設備往往搭載了不同的操作系統。面對不同的操作系統與開發框架,應用開發難度大、成本高;同時,不同設備之間交互匱乏、體驗割裂,難以為用戶帶來一致性的應用交互體驗。HarmonyOS是一款面向全場景的分布式操作系統,能夠兼容手機、平板、PC、智慧屏、智能手表、車機等智能設備。我們知道,HarmonyOS應用開發需要使用高級編程語言,包括TypeScript(以下簡稱“TS”)、JavaScript(以下簡稱“JS”)、基于TS增強的ArkTS等,還需要配套相應的工具鏈和運行時實現高效開發和運行。面對不同設備,開發者如何使用同一套應用框架開發應用,讓用戶獲得統一的應用交互體驗呢?基于此,方舟編譯器(以下稱“ArkCompiler”)應運而生。ArkCompiler支持ArkTS/TS應用預先編譯優化機器碼,帶來高性能的運行體驗;同時,ArkCompiler的并發實例啟動更加輕快,并且提供混淆字節碼能力,有效提升了源碼的安全性。ArkCompiler助力開發者更加高效、便捷、安全地開發HarmonyOS應用。ArkCompiler作為HarmonyOS應用開發的統一編程平臺,包含編譯器、工具鏈、運行時等關鍵部件,支持ArkTS、TS、JS等高級編程語言的開發、調試調優、運行等業務。
接下來,我們來看一下ArkCompiler編譯工具鏈與運行時的架構。ArkCompiler的編譯工具鏈以ArkTS/TS/JS源碼作為輸入,將其編譯生成為abc(ArkCompilerBytecode,即方舟字節碼)文件。ArkCompiler運行時包含了執行引擎、內存管理器、語言內建標準庫等部件,直接運行字節碼文件,實現對應語言規范的語義邏輯。
動態類型語言由于運行前無法確定對象類型,需要等程序運行一段時間后,JIT Compiler(Just-In-Time Compiler,即時編譯器)才能根據抓取到的運行信息明確對象類型并編譯生成對應的優化機器碼。
而靜態類型語言則可以根據確定的對象類型,直接編譯生成對應的優化機器碼,啟動即可獲得高性能,二者的啟動性能差異比較顯著。編譯優化視角主要區別
基于JS拓展出類型概念的TS已經成為了前十流行的語言,然而業界目前并沒有直接運行TS的引擎,如需運行TS,要先將TS轉換成JS,再通過JS引擎運行。那么,TS的類型信息也就在轉換過程中丟棄了,運行時無法接收類型信息并作相應的優化。然而我們發現,大部分情況下,JS程序中的對象類型是單一固定的,這也表明JS的對象類型大部分情況下保持不變。TS的類型是不是也可以在代碼運行前直接做編譯優化呢?2.1 業界JS引擎方案
JS開發者直接把源碼打到應用包里,當運行時,引擎解析JS源碼需要先將JS源碼編譯成字節碼,然后再執行字節碼。引擎抓取剖析一些運行時的信息,再使用JIT Compiler在運行時編譯生成優化機器碼,最后才能執行優化機器碼,這樣才能以比較高的性能執行JS。2.2 ArkCompiler的優勢
我們前面已經分析過,大部分情況下,JS的對象類型保持不變,而TS又會攜帶對象類型。因此,ArkCompiler讓ArkTS/TS能夠持平靜態語言的啟動性能,其實就是利用語言里的類型信息,讓ArkTS/TS像靜態語言一樣可以直接編譯生成優化機器碼。Bytecode Compiler(字節碼編譯器)會生成帶類型的字節碼,AOT Compiler(Ahead-Of-Time Compiler,預先編譯器)會根據類型字節碼預生成相關的類型對象,結合PGO1的配置文件信息,進行編譯優化最終生成對應的優化機器碼。ArkCompiler支持應用運行前就編譯出優化機器碼和字節碼。當應用在移動設備上首次運行時,就可以直接運行高性能優化機器碼了。
3.1 業界JS引擎的Actor并發模型
上圖左側是業界并發實例的運行情況,由于JS是一門單線程語言,JS引擎在設計之初也沒有考慮多線程運行的支持和優化。從Actor并發模型的示例圖中,我們可以看出,每一個并發實例都創建了一個完整的引擎實例來支持運行。它的優勢在于,類Actor的接口可以讓開發者不需要關心共享狀態和鎖,容易維護和測試,而且非常容易把并發實例遷移成分布式的服務。不過在移動應用的場景中,這樣的實現也是HTML規范把Web Worker描述成啟動慢并且內存開銷大的主要原因。3.2 ArkCompiler的Lite Actor并發優勢
上圖右側是ArkCompiler實現并發的運行情況。ArkCompiler的Lite Actor的實現,實質還是Actor模型,但是通過共享進程內各并發實例之間的不可變對象,把基礎設施分層和輕量化,在各實例之間重用了一些公共基礎設施,讓并發實例運行更輕快。ArkCompiler的實現中,新增一個并發實例只需要拉起相應獨有的部分。基于此,我們和瀏覽器頭部引擎做了一個對比,在一定負載下,我們的并發啟動時間和啟動內存取得了顯著提升。根據實驗數據表明,相較于業界的方案,Lite Actor并發實例啟動時間和啟動內存均優化了50%。
4.1 業界JS引擎的安全性
現行的JS引擎,往往采用只有名稱混淆的UglifyJS2,應用包中的源碼也是可見可調試,商業應用源碼的安全性相對較差。4.2 ArkCompiler的安全性優勢
在ArkCompiler中,Hap包包含了混淆后的字節碼,相較于直接攜帶源碼,提高了開發者代碼的安全性。HarmonyOS的代碼保護,打包的是二進制的ArkCompiler字節碼。即使經過ArkCompiler編譯運行時提供的Disassembler反編譯,也只有字節碼能被看到,無法直接修改調試運行。
目前,運行在ArkCompiler上的開發語言ArkTS,在TS的基礎上主要拓展了聲明式范式和狀態模式的UI編程。往后我們會在靜態模式、并發、安全等方面持續增強,讓ArkTS成為更卓越的應用開發語言。面對IoT時代的發展,我們會結合HarmonyOS應用生態、開發體驗和用戶體驗等方面的需求,讓ArkCompiler與硬件、操作系統、開發框架、編程語言協同設計優化;同時,在多語言統一編譯運行和多設備支持的基礎上,ArkCompiler讓HarmonyOS應用的開發和運行效率顯著提升。未來,ArkCompiler在持續優化基礎體驗的同時,會更進一步結合HarmonyOS萬物互聯的需求,在跨端遷移、多端協同等創新場景,從編譯器和運行時等方面提供底層的解決方案和優化機制,提升分布式應用的開發和運行體驗。1. PGO即Profileguided optimization,是一種基于性能分析(profiling)的編譯優化技術。2. UglifyJS是前端開發打包的最常用工具之一,包含JS解析器、代碼最小化、壓縮、美化的工具集。
點擊下方鏈接,查看更多文章
DevEco Studio 3.1 Beta新特性知多少
DevEco Device Tool 3.1 Release新版本發布
全新適配鴻蒙生態,Cocos引擎助力3D應用開發
HarmonyOS Connect認證測試
歡迎點擊|閱讀原文|
進入了解更多ArkCompiler架構信息
原文標題:不同設備如何統一語言編程平臺高效開發?本文為你揭秘
文章出處:【微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
原文標題:不同設備如何統一語言編程平臺高效開發?本文為你揭秘
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
相關推薦
在人工智能領域,大語言模型(Large Language Models, LLMs)背后,離不開高效的開發語言和工具的支持。下面,AI部落小編為您介紹大
發表于 12-04 11:44
?136次閱讀
步。 1. 確定目標和興趣 在選擇編程語言之前,首先要明確自己的目標和興趣。這包括你想要開發什么類型的項目,以及你對哪些技術領域感興趣。例如,如果你
發表于 11-15 09:37
?417次閱讀
: 選擇編程語言時,應考慮項目需求、個人興趣以及語言的適用性。例如,如果你對Web開發感興趣,那么學習JavaScript可能是
發表于 11-15 09:35
?310次閱讀
串口屏作為一種常用的顯示和交互設備,支持多種編程語言和開發環境。以下是對串口屏支持的編程
發表于 11-13 11:45
?248次閱讀
隨著物聯網(IoT)和智能設備的發展,ARM開發板因其低功耗、高性能和靈活性而受到開發者的青睞。 C語言 C語言是
發表于 11-05 11:14
?376次閱讀
MCU編程語言 MCU編程語言是用于編寫MCU程序的高級編程語言,它們使得
發表于 11-01 11:51
?812次閱讀
C語言作為一種歷史悠久的編程語言,自其誕生以來,一直在軟件開發領域扮演著重要角色。它以其
發表于 10-29 17:30
?295次閱讀
Orin是一款高度集成、高性能的車載計算平臺,由英偉達推出,并采用了英偉達自家的Volta架構GPU和其他高級處理器技術。關于Orin芯片的編程語言支持,可以從以下幾個方面進行介紹:
發表于 10-27 16:45
?311次閱讀
。 高效性:CLData語言具有高效的編程能力,可以快速完成數控機床的編程任務。 NCL(Numerical Control Langu
發表于 10-23 15:52
?324次閱讀
的IT基礎設施管理功能,幫助企業在日益復雜的云計算環境中實現高效管理和成本優化,Rak小編統一多云管理平臺怎么用?
發表于 08-14 11:28
?238次閱讀
在工業自動化領域,PLC(Programmable Logic Controller,可編程邏輯控制器)作為一種核心控制設備,其編程語言的選
發表于 06-14 16:58
?1509次閱讀
。CNC系統廣泛應用于機械制造、汽車制造、航空航天等領域。 CNC系統的編程語言是實現CNC系統控制功能的關鍵技術之一。以下是對CNC系統可用編程語
發表于 06-14 15:54
?1157次閱讀
維護的上位機軟件至關重要。本文將詳細介紹幾種常用的上位機軟件開發編程語言,并分析它們的優缺點。 C/C++ C和C++是兩種廣泛使用的編程
發表于 06-06 10:44
?1947次閱讀
FPGA(現場可編程門陣列)開發涉及多種編程語言和技術.
發表于 03-27 14:34
?1509次閱讀
和VHDL都是用于邏輯設計的硬件描述語言,并且都已成為IEEE標準。它們能形式化地抽象表示電路的結構和行為,支持邏輯設計中層次與領域的描述,具有電路仿真與驗證機制以保證設計的正確性,并便于文檔管理和設計重用。 fpga用什么語言開發
發表于 03-14 17:09
?3544次閱讀
評論