《馮新宇-華為倉頡:全場景智慧化應用編程語言的技術演進.pdf》由會員分享,可在線閱讀,更多相關《馮新宇-華為倉頡:全場景智慧化應用編程語言的技術演進.pdf(48頁珍藏版)》請在三個皮匠報告上搜索。
1、演講人:馮新宇目 錄倉頡簡介問題和挑戰倉頡之道開發效率性能擴展性智慧化編程語言的發展倉頡1950s1960s1970s1980s1990s2000s2010s為什么要倉頡語言?生態+技術 能力輻射其他行業,支持全場景應用開發發揮系統優勢,垂直整合,最大化的將系統的競爭力透傳給開發者提升開發體驗和程序性能,為鴻蒙匯聚更多的應用開發者 迎接產業/技術變革智能化、空間化、一體化 繁榮HarmonyOS應用生態,打造最適合HarmonyOS的應用開發語言編程語言作為一個平臺,有很大的技術演進和成長空間倉頡語言發展歷程https:/ HarmonyOS NEXT版本選用倉頡開發完成原型構建,性能競爭力顯
2、現建立國內首個編程語言技術社區,啟動“內測”2021.10華為HDC預告華為自研編程語言倉頡 倉頡語言項目正式通過立項 與南大成立“下一代程序設計創新實驗室”與北大胡振江教授團隊建立技術合作,開展元編程技術研究語言原型構建內部應用試點外部應用試點倉頡語言的應用案例問題和挑戰問題和挑戰應用框架/中間件系統軟件應用開發如何結合業務場景需求,尋求最佳的(開發)效率、性能和安全的平衡?如何做到Future-Proof?問題和挑戰 多樣性 場景多樣:表達力和抽象的能力需求多樣 普通業務邏輯 領域相關(造輪子):UI、AI、數據庫、網絡 設備/平臺多樣:性能需求多樣 端側:各種終端設備,資源各異 云側:大
3、內存、高并發 開發者群體多樣:個人開發者 企業開發者 水平和技術能力的多樣性通用編程語言必然面臨多樣性需求,如何“兼顧”?技術如何“變革”?問題和挑戰 移動應用開發需求 高性能 移動設備資源受限:性能、內存、功耗敏感 人機交互的實時性要求高,避免卡頓 下載、安裝時間敏感:編譯性能 高生產力 敏捷開發,簡潔開發范式 多設備、跨平臺 設備/平臺多樣性:一多能力 動態性 動態發布、動態更新問題和挑戰 智慧化 AI for Language?Language for AI?倉頡之道倉頡之道:開發效率和性能平衡發展倉頡自動內存管理(垃圾收集)靜態類型開發效率C+CRustJSPythonLuaJavaG
4、oSwiftKotlin輕量業務開發 動態腳本語言重業務開發靜態類型應用開發語言性能系統編程注:此圖僅為示意三類語言的劃分,不追求各種語言在坐標中位置的準確性Dart安全Ruby類型:動態 靜態內存管理:動態 靜態倉頡C#“Only path left is domain specific architectures”倉頡之道:可擴展性應對多樣性可擴展性倉頡語言eDSL/三方庫/框架eDSL/三方庫/框架eDSL/三方庫/框架業務邏輯業務邏輯業務邏輯編程語言創新的機會在DSL!倉頡之道:可擴展性應對多樣性聲明式UI聲明式開發模式更好的處理復雜狀態管理,提升開發效率分布式數據對象數據在不同設備間
5、傳遞及更新邏輯復雜,通過領域抽象屏蔽跨設備數據傳輸復雜度func postCreateAccount(account:Account)/Account元數據生成類if(account.balance 100000.0)let customer=OQL(/內嵌OQL(eDSL)SELECT*FROM Customer WHEREid=account.customerId)customer.vip=true update(customer)/平臺能力封裝(實體引擎eDSL)數據庫開發者聚焦于業務邏輯的表達,簡單易用使用數據庫對象與事務操作并發框架在并發框架內,方便地定義出并發安全類,并且不需要顯示
6、地使用互斥鎖倉頡之道:Agent編程和代碼生成 倉頡 for AI Agent編程框架,支持智能原生應用開發 AI for 倉頡 克服新語言語料不足短板,增強代碼生成能力 契約編程提升代碼生成質量倉頡之道開發效率性能擴展性智慧化開發效率:多范式編程AnyInt8/16/32/64,Float32/64,Bool,String,Array,VArray,Tuple:(T1,T2,Tn)Function:(T1,T2,Tn)-Tr自定義類型:自定義類型:struct自定義類型:自定義類型:enumsI1InI11I1nO1OnO11O1nObject接口類Nothing函數式 命令式面向對象開發效
7、率:特性豐富,簡單易用OO特性:接口、類、繼承、子類型、屬性函數式特性:高階函數、代數數據類型、模式匹配、不可變變量等泛型類型擴展函數重載、操作符重載反射/注解并發宏“先進性”和開發感受難以兼得時,某些特性選取會以開發感受優先:函數重載 缺省參數 Interface中方法的缺省實現 類型推斷 開發效率:并發編程創建:spawn 返回:future用戶態線程:有棧協程 而非 無棧協程支持棧擴容無async/await傳染性func concurrency()let f=spawnfor(i in 0.100)println(Hello from another thread)sleep(Dura
8、tion.second*1)f.get()性能:全棧優化值類型全并發GC、輕量化線程高層IR(CHIL)和前后端編譯優化性能:全棧優化Benchmarks Game測試(越高越好)h t t p s:/b e n c h m a r k s g a m e-t e a m.p a g e s.d e b i a n.n e t/b e n c h m a r k s g a m e/in d e x.h t m lCangjie語言J語言S性能:輕量化并發提供用戶態的輕量級線程,線程開銷比系統線程小支持線程間共享內存,支持線程同步支持M:N線程模型,支持搶占式調度主線程數據移動應用并發場景倉頡
9、并發能力,兼顧易用性、并發安全和性能并發數據類型同步機制線程機制可重入互斥鎖可重入讀寫鎖Synchronize表達式信號量Spawn表達式Future類型ThreadLocal類型協作式取消機制Thread類型原子類型ConcurrentQueueConcurrent HashMapSyncCounter倉頡并發能力沙盤Select機制a.主線程耗時任務快速卸載,保持主線程流暢b.使能多核進行程序并行加速性能:全并發GCSTWenuminitialenum(+fix)trace(+fix)compact(&reclaim)倉頡全并發內存整理算法precompactidleSTW STW ini
10、tialtracecompact(&reclaim)典型內存整理算法idleprecompactSTWSTWfix收集GC根集合根據GC根集合及對象引用關系遞歸地標記活對象搬移棧上根引用指向的對象搬移region里的活對象,完成后可回收該region修復堆中的舊引用GC完成倉頡全并發GC算法通過安全點和讀屏障支持輕量GC同步,消減全局暫停(STW),實現更低時延倉頡 全并發 內存整理 算法性能:全并發GC全并發GC時延更低(ns)5.8ms(cj)7.9ms(zgc)16.2ms(go)21.8ms(g1gc)1.7ms(zgc)0.2ms(cj)尾時延1.測試用例是Benchmarks Ga
11、me的binarytrees2.運行時延:在應用中創建一個新線程,新線程執行一段無限循環代碼,記錄上一次循環離開的時刻和當前循環進入的時刻,二者時間差稱為“運行時延”.運行時延可以綜合反映GC和線程調度對程序的影響。擴展性 語法特性:property,extension,trailing closure,operator overloading 偏愛符號勝過關鍵字 libast和宏 Effect Handlers一些為eDSL能力設計的語法特性(宏、運算符重載、尾隨lambda等),會影響業務邏輯代碼的可讀性,在業務邏輯代碼中需要慎用。擴展性:語法特性擴展性:語法特性Componentpubl
12、ic class FriendListItem Prop var user:Userfunc build()Row Avatar(src:user.avatar,size:30)Column Text(user.username).fontSize(16)Text(user.status().fontSize(10).fontColor(COLOR_GRAY).alignItems(HorizontalAlign.Start).margin(left:10).width(100.percent)基于倉頡語言原生領域擴展能力,構建聲明式UI范式,協同ArkUI引擎,使能高效UI編程實例來源于:h
13、ttps:/ stream/AST做變換宏定義:擴展性:宏eval(x agent2|agent3agent1|agent2|agent3agent1=agent2,agent3自然語言&編程語言有機融合簡化符號表達,模式自由組合agent class Planner promptpattern=APE(action:幫助用戶制定旅行路線,purpose:讓用戶在計劃時間內多參觀景點并得到充分休息,expectation:“生成一條合理的旅游景點路線,包括時間、景點、通勤等信息)基于倉頡的eDSL能力倉頡 for AI:內嵌AgentDSL的大模型應用開發框架倉頡 for AI:AgentDS
14、L和框架簡化Agent開發agentmodel:openai:gpt-4o,reason:reactclass Foo promptpattern:ERP(expectation:回答要求簡要凝練,role:你是問答助手,action:若無法直接回答問題,則通過工具搜索并整理答案 )模型、規劃等一鍵配置let foo=Foo()let result=foo.chat(五千克的蘋果有多大重力)llmAccessibleclass MyDate let year:Intlet month:Intlet result=foo.chatGet(牛頓出生時間)println(result)/year:1
15、643,/month:1 dialogagent:foo(愛因斯坦出生日期-d1:MyDate牛頓出生日期-d2:MyDate誰的年齡更大-name:String)基礎單次交互輸出結果自動轉換為自定義類型維護對話歷史,完成多輪交互預置模板引導提示詞編寫最佳實踐Dialog愛因斯坦出生日期1879年3月14日牛頓出生日期1643年1月4日單 Agent 編程Agent 多輪交互Agent 多模數據傳遞結構化提示詞RAG 接入工具統一接入多規劃模式Agent Hub通信協議Agent 管理Multi-Agent 協同(Agent Hub 協同運行時)Agent 聲明規約agentdescripti
16、on:數學計算助理class Calculator prompt(完成數學計算任務 .)agenthub:url:https:/agent- class User1 發布注冊模式1手動指定agenthub:url:https:/agent- User2 模式2自動優選paths:/calculator:post:summary:數學計算助理 requestBody:required:truecontent:application/json:schema:type:objectproperties:input:type:stringrequired:-input自動生成 Agent 聲明自動從
17、Hub 上查找可用 AgentAgent Hub開發框架通過基礎能力助力 Agent 生態構建1 統一的 Agent 聲明標準和通信協議 智能的 Agent 自動選用多 Agent單 AgentAgent 共享復用1:Chen,Weize&You,Ziming&Li,Ran&Guan,Yitong&Qian,Chen&Zhao,Chenyang&Yang,Cheng&Xie,Ruobing&Liu,Zhiyuan&Sun,Maosong.(2024).Internet of Agents:Weaving a Web of Heterogeneous Agents for Collaborati
18、ve Intelligence.倉頡 for AI:開發框架助力Agent生態構建AI for 倉頡:新興語言的大模型代碼生成挑戰AI for 倉頡:大模型倉頡代碼生成數據底座跨語言代碼轉換基于LLM的數據增強訓練質量模型,增強數據清洗模型訓練繼續預訓練+同質語言遷移學習模型推理檢索增強生成及可控解碼AI+倉頡:契約編程提高代碼生成質量contractrequires n=0ensures return*return nfunc nsqrt(n:Int64):Int64 /計算n的整數平方根func nsqrt(n:Int64):Int64 if(!(n=0)throw ContractExc
19、eption(“require failed”)let _ret=/計算n的整數平方根if(!(_ret*_ret n)throw ContractException(“ensures failed”)return _ret展開為展開為檢查輸入契約檢查返回值契約Bertrand MeyerETH Zurich契約編程:更高抽象度的中間語言描述需求,指導生成?更強大的驗證/測試能力發現生成代碼中的缺陷?契約和契約編程!倉頡:全場景智能化應用編程語言繁榮HarmonyOS應用生態擁抱大模型時代的新應用開發范式無限的成長空間Agent DSL和框架更好的生成/測試/驗證能力總結倉頡編程語言獨立官網即將上線中國軟件大會倉頡編程語言線下編程挑戰賽時間:11月16日地點:西安競賽章程:https:/ you!