不同裝置如何統一語言程式設計平臺高效開發?本文為你揭秘
原文: https://mp.weixin.qq.com/s/8UHznZenc7A_UICta2bETg ,點選連結檢視更多技術內容。
隨著數字化時代的發展,手機、平板、PC、電視、智慧手錶、車機等智慧裝置的普及率越來越高,但不同裝置往往搭載了不同的作業系統。面對不同的作業系統與開發框架,應用開發難度大、成本高;同時,不同裝置之間互動匱乏、體驗割裂,難以為使用者帶來一致性的應用互動體驗。
HarmonyOS是一款面向全場景的分散式作業系統,能夠相容手機、平板、PC、智慧屏、智慧手錶、車機等智慧裝置。我們知道,HarmonyOS應用開發需要使用高|級程式語言,包括TypeScript(以下簡稱“TS”)、JavaScript(以下簡稱“JS”)、基於TS增強的ArkTS等,還需要配套相應的工具鏈和執行時實現高效開發和執行。面對不同裝置,開發者如何使用同一套應用框架開發應用,讓使用者獲得統一的應用互動體驗呢?
基於此,方舟編譯器(以下稱“ArkCompiler”)應運而生。ArkCompiler支援ArkTS/TS應用預先編譯最佳化機器碼,帶來高效能的執行體驗;同時,ArkCompiler的併發例項啟動更加輕快,並且提供混淆位元組碼能力,有效提升了原始碼的安全性。ArkCompiler助力開發者更加高效、便捷、安全地開發HarmonyOS應用。
一、什麼是ArkCompiler
ArkCompiler作為HarmonyOS應用開發的統一程式設計平臺,包含編譯器、工具鏈、執行時等關鍵部件,支援ArkTS、TS、JS等高|級程式語言的開發、除錯調優、執行等業務。
接下來,我們來看一下ArkCompiler編譯工具鏈與執行時的架構。
編譯工具鏈架構
ArkCompiler的編譯工具鏈以ArkTS/TS/JS原始碼作為輸入,將其編譯生成為abc(ArkCompiler Bytecode,即方舟位元組碼)檔案。
執行時架構
ArkCompiler執行時包含了執行引擎、記憶體管理器、語言內建標準庫等部件,直接執行位元組碼檔案,實現對應語言規範的語義邏輯。
二、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。
業界JS引擎方案
2.2 ArkCompiler的優勢
高效能ArkTS引擎—AOT編譯
我們前面已經分析過,大部分情況下,JS的物件型別保持不變,而TS又會攜帶物件型別。因此,ArkCompiler讓ArkTS/TS能夠持平靜態語言的啟動效能,其實就是利用語言裡的型別資訊,讓ArkTS/TS像靜態語言一樣可以直接編譯生成最佳化機器碼。
Bytecode Compiler(位元組碼編譯器)會生成帶型別的位元組碼,AOT Compiler(Ahead-Of-Time Compiler,預先編譯器)會根據型別位元組碼預生成相關的型別物件,結合PGO1的配置檔案資訊,進行編譯最佳化最終生成對應的最佳化機器碼。
ArkCompiler支援應用執行前就編譯出最佳化機器碼和位元組碼。當應用在移動裝置上首|次執行時,就可以直接執行高效能最佳化機器碼了。
三、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%。
四、ArkCompiler的安全性亮點
位元組碼混淆對比
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即Profile guided optimization,是一種基於效能分析(profiling)的編譯最佳化技術。
2. UglifyJS是前端開發打包的最常用工具之一,包含JS解析器、程式碼最小化、壓縮、美化的工具集。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009402/viewspace-2950853/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 不會程式設計沒關係,這些平臺讓你秒變語音程式開發師程式設計
- Opensae去中心化交易平臺系統Solidity語言開發中心化Solid
- 如何高效學習Java?本文給你一些建議!Java
- Go語言併發程式設計Go程式設計
- .NET併發程式設計-函數語言程式設計程式設計函數
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- 本文幫你在 Unix 下玩轉 C 語言
- 低程式碼開發平臺,真的是為了"幹掉"程式設計師嘛?程式設計師
- C語言:一種高效、易學的程式語言C語言
- 量化/合約跟單/系統程式設計開發/策略交易開發技術/Python程式語言程式設計Python
- 【譯】你的程式語言能做到這個嗎?(為什麼要學函數語言程式設計)函數程式設計
- 如何構建設計語言系統
- 醫療裝置管理系統-智慧裝置管理系統平臺
- Python語言丨chatGPT人工智慧小程式系統設計開發分析PythonChatGPT人工智慧
- 跨平臺程式設計開發工具:Xojo 2023 for Mac程式設計Mac
- 設計多裝置或者跨平臺的 app 如何進行自動化?APP
- 函數語言程式設計讓你忘記設計模式函數程式設計設計模式
- C語言是程式設計小白的噩夢,WEB開發成為轉行程式設計師的福音!C語言Web行程程式設計師
- python函數語言程式設計一Python函數程式設計
- JavaScript 函數語言程式設計(一)JavaScript函數程式設計
- 你真的理解函數語言程式設計嗎?函數程式設計
- Julia會成為下一個程式設計大語言嗎?程式設計
- 推薦一個支援js的嵌入式裝置開發平臺JS
- 與眾不同的快速開發平臺 —— 簡潔高效的wueasy軟體
- ‘程式語言‘ ’程式設計工具’程式設計
- 程式語言設計,程式設計哲學程式設計
- 如何提高函數語言程式設計技巧函數程式設計
- NFT數字藏品交易系統平臺開發技術(程式設計示例)程式設計
- Remax One - 重新設計小程式的跨平臺開發REM
- C語言開發入門與程式設計實踐pdfC語言程式設計
- 如何為平臺遊戲設計關卡?遊戲設計
- 雲平臺設計系統,助力業務快速開發
- Akka-CQRS(9)- gRPC,實現前端裝置與平臺系統的高效整合RPC前端
- 旺旺農場遊戲系統程式設計開發程式碼示例丨Solidity語言編寫遊戲程式設計Solid
- 低程式碼應用開發平臺,讓企業開發更高效
- 量化跟單系統對沖交易策略Python系統程式設計開發技術語言Python程式設計
- 一款高效開發平臺簡介,基於微軟.net平臺微軟
- C語言如何實現泛型程式設計?C語言泛型程式設計