《湖北省軟件行業協會&PLOC:國產編程語言藍皮書2023(47頁).pdf》由會員分享,可在線閱讀,更多相關《湖北省軟件行業協會&PLOC:國產編程語言藍皮書2023(47頁).pdf(47頁珍藏版)》請在三個皮匠報告上搜索。
1、 國產編程語言國產編程語言藍皮書藍皮書2 2023023 1 1/4646 國產編程語言藍皮書國產編程語言藍皮書 目錄 版權聲明.2 第一章 前言.3 1.1 背景.3 1.2 編制目的.3 1.3 收錄標準.4 1.4 收錄方法.4 1.5 項目分類方法.4 第二章 項目列表.5 2.1 Aya.6 2.2 Calcit.7 2.3 CovScript 智銳.9 2.4 Deeplang.12 2.5 HVML.15 2.6 K 語言.17 2.7 KCL.19 2.8 NASL.21 2.9 Z 語言.24 2.10 凹語言.27 2.11 洛書.30 2.12 青語言.33 2.13 獅
2、偶.36 2.14 凸語言.39 2.15 豫言.42 附錄一 語言類別.44 附錄二 工具類別.45 附錄三 應用領域.46 2 2/4646 國產編程語言藍皮書國產編程語言藍皮書 版權聲明版權聲明 Copyright(c)2023 編程語言開放社區(PLOC)國產編程語言藍皮書 is licensed under Mulan PSL v2.You can use this software according to the terms and conditions of the Mulan PSL v2.You may obtain a copy of Mulan PSL v2 at:ht
3、tp:/ THIS SOFTWARE IS PROVIDED ON AN AS IS BASIS,WITHOUT WARRANTIES OF ANY KIND,EITHER EXPRESS OR IMPLIED,INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.See the Mulan PSL v2 for more details.特別顧問:梁宇寧 策劃:柴樹杉、丁爾男、楊海龍 編輯:陳朝臣、杜天微、賀師俊、李登淳、劉小東、劉永康、題葉、吳森、徐鵬飛、楊
4、海玲、趙普明、朱子潤 支持單位:Gitee(https:/ 3 3/4646 國產編程語言藍皮書國產編程語言藍皮書 第一章第一章 前言前言 1 1.1.1 背景背景 編程語言是軟件業的工業母機、編譯器技術是信息產業的根技術,各種編程語言被用于操作系統、數據庫管理系統、網絡服務、工控設備、應用程序等的開發,滲透到了所有現代產業和服務領域。尤其是信息產業創新空間的持續擴展、系統復雜度的持續上升、開發成本的持續降低,都直接受益于不斷涌現的編程語言和編譯技術。迄今為止,國內幾乎沒有出現被廣泛使用的編程語言,這與我國世界性工業大國、科技大國的地位相去甚遠。工業和信息化部發布的“十四五”軟件和信息技術服務
5、業發展規劃中提到,應“強化基礎組件供給加快突破編程語言開發框架”;中國軟件行業協會發布的中國軟件根技術發展白皮書(基礎軟件冊)第四章專門對編程語言和編譯器的重要性、發展態勢等進行了歸納。這些文件說明編程語言相關產業的發展獲得了政策支持。信息技術在我國經過多年發展積累,已形成從業人數近千萬的大型產業,對編程語言這一基本工具的需求本就非常強烈;而大語言模型、國產芯片等新興方向的井噴式增長更是對編程語言提出了很多全新的需求?;仡櫄v史不難發現,與其他產業不同,作為信息產業的核心,編程語言的成功案例充滿了偶然性。目前廣泛使用的編程語言和開發工具,既有由大型企業推動的商業項目,也有由個人發起的開源項目;既
6、有以 KPI 為驅動的商業產品,也有由興趣驅動的產品。當前國內的根軟件行業也正呈現出項目高度分散的趨勢,企業、開源社區發起了大量不同類型、用于不同領域的新興編程語言項目。1 1.2.2 編制目的編制目的 基于上述背景,編程語言開放社區(PLOC)編寫了國產編程語言藍皮書-2023(即本文,以下簡稱藍皮書),力爭全面的收納國內已具備一定可用性的、活躍的編程語言項目,為業界提供一份客觀的國產語言全景圖?!皬臉I者自治”是 PLOC 社區的精神內核,藍皮書延續了這一特點。本文中收錄的項目均為自主申報,編委對項目資格進行審核;項目展示內容(文字、圖片等)由項目方提供,編輯僅對頁面版式進行調整。最了解語言
7、特性的人是語言作者,我們希望通過自主申報,讓各項目的特點以最符合作者個性的形式得到展現,以期吸引到趣味相投的愛好者、貢獻者、潛在使用者。為保持信息時效性性,藍皮書將持續更新發布。本文是 PLOC 社區編寫國產編程語言黃頁的首次嘗試,編委組織、文檔結構、內容模板等均存在不足之處,希望各界不吝賜教,使藍皮書能逐步完善,更好的幫助國產編程語言項目提高存活幾率,助力國產根軟件的發展。4 4/4646 國產編程語言藍皮書國產編程語言藍皮書 1 1.3 3 收錄標準收錄標準 符合以下條件的項目可在藍皮書工作區倉庫中通過 PR 發起申報:1.項目由國內的企業、社區或個人發起和維護;2.項目為編程語言或編譯工
8、具;3.項目基本可用,且能被編委會獨立驗證;4.面向公眾開放;5.項目處于活動狀態。藍皮書工作區倉庫地址:https:/ 國產編程語言藍皮書-2023 編委會對收錄標準擁有最終解釋權。1 1.4 4 收錄方法收錄方法 滿足收錄標準的項目可在以下地址中增加項目同名目錄:https:/ markdown 格式填入其中,填寫要求及案例見:https:/ PR 后,編委會將審核項目資料,期間請保持項目地址及網站等可正常訪問、聯系方式可用;編委會委員將與您聯系,確認項目資料準確無誤,若您對于某些選項該如何填寫存在疑問,亦可在此時與編委溝通。當您發起申報時,視同您已獲得該項目所有者許可,并授權編程語言開放
9、社區(PLOC)在藍皮書中展示該項目的名稱、圖標等信息。1 1.5 5 項目分類方法項目分類方法 付費/免費 開源/閉源 通用/專用 是否接受社區貢獻 語言類別(詳細清單見:附錄一 語言類別)工具類別(詳細清單見:附錄二 工具類別)應用領域(詳細清單見:附錄三 應用領域)5 5/4646 國產編程語言藍皮書國產編程語言藍皮書 第二章第二章 項目列表項目列表 藍皮書本次共收錄項目 15 個,各項目名稱如下(按字母排序):Aya Calcit CovScript 智銳 Deeplang HVML K 語言 KCL NASL Z 語言 凹語言 洛書 青語言 獅偶 凸語言 豫言 6 6/4646 國產
10、編程語言藍皮書國產編程語言藍皮書 2.1 2.1 AyaAya 項目分類 免費、開源(MIT)、通用、接受社區貢獻 語言類別 高級編程語言、函數式語言、多范式語言 工具類別 類型檢查器、解釋器 應用領域 通用、行業應用、計算數學 主頁 https:/www.aya-prover.org/倉庫 https:/ 2.1.1 簡介 Aya 語言的特色是它強大的類型系統。這個類型系統擁有依值類型(dependent type)、參數化多態(polymorphism)這兩個功能,且支持等號類型。換言之,兩個值相等這件事是一個類型,而它的實例就是這兩個值相等的證明。例如,插入排序=歸并排序 是一個合法的類
11、型,且它等價于函數(x:列表)-插入排序(x)=歸并排序(x),也就是接收一個列表、返回它被兩種排序算法排序后結果相同的證明。這樣的證明可以在編程的同時證明一些關于程序的性質。在 https:/ 團隊的招募貼)中,有更詳細的項目動機介紹。有關 Aya 中語言特性的學術論文參見 https:/www.aya-prover.org/pubs 這個頁面。7 7/4646 國產編程語言藍皮書國產編程語言藍皮書 2.2 Calcit2.2 Calcit 項目分類 免費、開源(MIT)、通用、接受社區貢獻 語言類別 一般編程語言、腳本語言 工具類別 JavaScript 生成工具,解釋器 應用領域 Web
12、 開發 主頁 https:/calcit-lang.org/倉庫 https:/ 2.2.1 簡介 Calcit 是 Clojure 的方言,遵循不可變數據結構、前綴表達式、Macros 作為核心設計。使用 Rust 實現,能夠快速啟動和運行。Calcit 可以直接解釋執行,也可以編譯為 JavaScript 代碼再執行。生成代碼時配合 ES Modules 等現代前端開發習慣進行了簡化,相比 ClojureScript 方案更輕量,更易于同 JavaScript 代碼混用,也一定程度降低調試成本。Calcit 的文本形態使用縮進語法。代碼示例一,簡單的數據變換,類似 Clojure 語法中的
13、 threading macros:-range 100 map$fn(x)*x x foldl 0&+println 代碼示例二,使用 Macro 封裝的基于 Calcit 生態定義的前端 Virtual DOM 組件寫法:8 8/4646 國產編程語言藍皮書國產編程語言藍皮書 defcomp comp-inspect(tip data style)let class-name$if(string?style)style style-map$if(map?style)style pre$:class-name$str-spaced style-data class-name :inner-t
14、ext$str tip|:(grab-info data):style style-map :on-click$fn(e d!)if(some?js/window.devtoolsFormatters)(js/console.log data)js/console.log$to-js-data data 實際開發中 Calcit 使用數據文件來存儲源碼。支持使用結構化的方式直接以表達式為單元進行編輯,編輯器內部以數據形態展開,因而也能快速完成部分定義調整和代碼重整,從而提升動態類型語言的編寫和修改速度:圖 2.2-1 Calcit 主要應用于 Web 頁面開發場景。實現了部分 Virtual
15、DOM 生態的功能。9 9/4646 國產編程語言藍皮書國產編程語言藍皮書 2.2.3 3 CovScriptCovScript 智銳智銳 項目分類 免費、開源(Apache 2.0)、通用、接受社區貢獻 語言類別 命令式語言、多范式語言 工具類別 解釋器、實時編譯器、運行時環境 應用領域 通用 主頁 https:/ https:/ 2.3.1 簡介 Covariant Script 編程語言,簡稱 CovScript,中文名簡稱智銳編程語言,最初發布于 2017 年,是一門跨平臺、開放源代碼的動態類型應用層通用編程語言,具有高效、易學、易用、可靠的特點,融合了現代編程語言的優點,可以通過 C
16、NI 高效地與 C+直接交互。CovScript 編程語言是國內首批投入市場的自主知識產權編程語言之一,具有獨立、完善的工具鏈,包括基礎解釋器、調試器、實時編譯器(JIT Compiler)、標準庫、擴展庫、文檔和 IDE 插件等,不依附于現有編程語言運行時環境。自主、獨立、完善且可靠的語言及附屬生態使 CovScript 廣受客戶好評,目前已經在四川大學信息化建設與管理辦公室、四川大學華西大數據中心等單位落地,7x24 小時服務于關鍵系統中。1010/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.3-1 CovScript 編程語言是以命令式為主體,面向對象和函數式為輔的多范式編程
17、語言,對于初學者來說簡單易懂、符合直覺,解決大型項目的需求也能游刃有余。目前CovScript 已有數個成熟的開發框架:CovAnalysis:性能比肩 Pandas 的數據分析、處理框架 CSDBC:基于 ODBC 的數據庫連接件,兼容絕大多數主流 RDBMS ParserGen:基于類 EBNF 規則的實時語法分析器生成器,CovScript 基于此實現了完全自舉 除此之外,CovScript 還有完善的包管理器和無數協助開發的工具庫,能夠幫助用戶高效的滿足大多數云原生應用的需求。1111/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.3-2 CovScript 雖然是一門動態編
18、程語言,但其核心 Runtime 是由高度優化的 C+代碼編寫而成,其執行速度高達 900 萬行代碼每秒,協程的上下文切換速度更是達到 80 GOPS(每秒進行的十億次操作數),能夠高效地支持各類應用需求。作為一門由中國人主導設計、開發的編程語言,CovScript 更是以自身行動踐行“中國智造”,其語言核心生態擁有 100%自主知識產權(已在中華人民共和國國家版權局注冊,登記號:2020SR0408026;已被 Zenodo 檢索,DOI 號:10.5281/zenodo.10471188),周邊生態 100%開源、可信。不僅如此,CovScript 還完全支持國產生態:針對龍芯架構和國產操
19、作系統專門優化、測試 CovScript 每個發行版都會有對應的龍芯版(UOS3A4000)兼容華為鯤鵬處理器和 openEuler 操作系統 CSDBC 兼容華為 openGauss 數據庫 為了給盡可能多的客戶提供服務,CovScript 還兼容存量系統。除了主流版本兼容 Windows 7 64bit,還可定制兼容 Windows XP SP2。1212/4646 國產編程語言藍皮書國產編程語言藍皮書 2.4 2.4 DeeplangDeeplang 項目分類 免費、開源(MIT)、通用、接受社區貢獻 語言類別 一般編程語言 工具類別 一般編譯工具 應用領域 通用 主頁 https:/d
20、eeplang.org/倉庫 https:/ 2.4.1 簡介 Deeplang 語言是具有鮮明內存安全特性的面向 IoT 場景的語言,設計過程中參考 Rust的安全機制,但又根據 IoT 場景的特性選擇了更合適的編譯執行模式。Deeplang 是一種靜態類型、強類型語言,參考 C-style 設計語法,同時支持過程式、邏輯式和函數式的混合范式。Deeplang 編譯和運行的軟件分別為 Deepc 和 DeepVM。由于 Deeplang 的目的是探索資源受限場景下語言特性的設計,現階段的 Deepc 和 DeepVM 只能用于語言特性研究,并不具備任何商用能力。Deeplang 的編譯。De
21、epc 是由 Ocaml 開發的。首先 Deeplang 源碼經過語法解析器(parser)生成語法樹,遍歷器(walker)對語法樹進行多次遍歷獲取相關的符號表,轉換模塊(conversion)基于符號表將語法樹轉譯成 ANF IR,最后 codegen 將 ANF IR 轉化成 WASM 字節碼。Deepc 暫時只有類型檢查器(type checker),沒有類型推斷器(type infer),無法推斷類型信息,因此所有 Deeplang 源碼需要主動標注類型信息,否則視為語法錯誤。Deeplang 的運行。DeepVM 是由 C 語言開發的,支持 WASM1.0,包括字節碼加載、內存管理
22、、解釋執行、FFI 機制。ADT 語法示例:1313/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.4-1 Interface 語法示例:圖 2.4-2 Pattern Match 語法示例:1414/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.4-3 1515/4646 國產編程語言藍皮書國產編程語言藍皮書 2.2.5 5 HVMLHVML 項目分類 免費、開源(多種許可證方式)、通用、接受社區貢獻 語言類別 運行時環境 工具類別 一般編譯工具 應用領域 通用 倉庫 https:/ 2.5.1 簡介 HVML 是 Hybrid Virtual Markup Langua
23、ge(混合虛擬標記語言)的縮寫。它通過標記語言的方式來組織呈現代碼。Virtual 表示通過賦予標記語言編程能力,使得該語言成為一種抽象化后的虛擬標記語言。Hybrid 表示混合,它能夠通過膠水的方式組織各種不同的語言或者程序。HVML 的基本設計目標是,在已有的以 C/C+,Python 等編程語言構造的原生運行時環境中,利用現代 Web 前端技術(HTML/SVG、DOM、CSS 等)快速開發圖形用戶界面程序,而不需要借助額外的瀏覽器或者 JavaScript 引擎。描述性是 HVML 的特點,描述性的語言不但能夠方便開發者理解和撰寫代碼,也適合 AI 程序進行學習和代碼生成:圖 2.5-
24、1 1616/4646 國產編程語言藍皮書國產編程語言藍皮書 HVML 可以非常方便的與其他程序進行數據交互,比如和高精度計算程序bc交互實現圖形界面版的高精度計算器:圖 2.5-2 以及可以內嵌 python 代碼,與 python 程序進行數據交互,處理和顯示:圖 2.5-3 作為一個標記語言,標記符號的引入使得代碼字符數量比其他語言要多,但是好處是對代碼的組織會顯得更加清晰。這是因為它的另一個設計目標就是借助自動化圖形化低代碼的開發工具來進行程序開發,同時清晰的組織也方便接入 AI 應用。1717/4646 國產編程語言藍皮書國產編程語言藍皮書 2.2.6 6 K K 語言語言 項目分類
25、 免費、開源(MIT)、通用、接受社區貢獻 語言類別 一般編程語言 工具類別 一般編譯工具 應用領域 通用 倉庫 https:/ 2.6.1 簡介 K 語言是面向應用領域的開源編程語言。具有靜態類型、內存托管、多范式的特點?,F階段 K 語言的主要目標是探索類型系統和語法設計,還不具備任何商用能力,也不承諾任何穩定性。目前 K 語言嘗試了幾個比較有意思的設計:前置括號的泛型語法 基于分號和塊區分的表達式結構語法 可參數化的可變類型限定符 代碼示例 1:type(T1,T2)Pair(left:T1,right:T2);let main()=lef a1:(Int,Int)Pair=(Int,In
26、t)Pair(1,2);#a1.left:Int,a1.right:Int lef a2:(Bool,Bool)Pair=(Bool,Bool)Pair(true,false);#a2.left:Bool,a2.right:Bool lef a3:(Int,String)Pair=(Int,String)Pair(1,a);#a3.left:Int,a3.right:String 1818/4646 國產編程語言藍皮書國產編程語言藍皮書 代碼示例 2:let main()=if true|f()do .0 代碼示例 3:type mut Point(x:Int,y:Int);let main(
27、)=let a:mut Point=mut Point(64,128);let b:Point=a;#ok printLine(a.x);#64 printLine(b.x);#64 a.x=128;printLine(a.x);#128 printLine(b.x);#128 b.x=256;#error 1919/4646 國產編程語言藍皮書國產編程語言藍皮書 2.2.7 7 KCLKCL 項目分類 免費、開源(Apache-2.0)、專用、接受社區貢獻 語言類別 一般編程語言、聲明式語言 工具類別 一般編譯工具 應用領域 云原生、數據工程、平臺工程等 主頁 https:/kcl-lang
28、.io/倉庫 https:/ 2.7.1 簡介 KCL 是一個開源的基于約束的記錄及函數語言。KCL 通過成熟的編程語言技術和實踐來改進對大量繁雜配置比如云原生場景的編寫,致力于構建圍繞配置的更好的模塊化、擴展性和穩定性,更簡單的邏輯編寫,以及更快的自動化集成和良好的生態延展性。自 2022 年 5 開源以來,已被許多全世界各地公司主體或個人采用選用并投入生產使用,并在 2023 年 9 月正式捐贈給 CNCF 基金會。您可以將 KCL 用于:生成靜態配置數據如 JSON,YAML 等,或者與已有的數據進行集成 使用 schema 對配置數據進行建模并減少配置數據中的樣板文件 為配置數據定義帶
29、有規則約束的 schema 并對數據進行自動驗證 通過梯度自動化方案無副作用地組織、簡化、統一和管理龐大的配置 通過分塊編寫配置數據可擴展地管理龐大的配置 2020/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.7-1 2121/4646 國產編程語言藍皮書國產編程語言藍皮書 2.2.8 8 NASLNASL 項目分類 共享(免費試用無時長限制)、閉源、專用、不接受社區貢獻 語言類別 多范式語言、可擴展語言、高級編程語言 工具類別 代碼生成、增量編譯器 應用領域 行業應用 主頁 https:/ 簡介 NASL,全稱 Next Application Specific Language
30、,是網易數帆 CodeWave 智能開發平臺(https:/ Web 應用的領域特定語言。它主要包含兩部分:基礎語言和 Web 應用特定領域(如數據源、數據查詢、頁面、流程、權限等)的子語言集合。NASL 最主要的特點是使用 CodeWave 智能開發平臺的可視化編輯器來統一設計 Web 應用的頁面、業務邏輯、數據、流程等方方面面,并輔有靜態檢查、全棧調試、AIGC 代碼生成、多人協作等功能:圖 2.8-1 2222/4646 國產編程語言藍皮書國產編程語言藍皮書 對搭建 Web 應用來說,NASL 及其配套設施開箱即用,學習門檻低,開發成本少:開發者不需要再學習多門框架、語言(如前端 Typ
31、eScript、Vue,后端 Java、Spring),也不需要在他們之間互轉數據。NASL 及其配套設施的整體架構圖如下:圖 2.8-2 下面分別介紹基礎語言、子語言、配套設施?;A語言基礎語言:NASL 基礎語言融合了面向對象、函數式等編程范式中常見的語言特性,有著和大多數通用計算機編程語言一樣的表達能力:使用靜態類型系統,支持常用的原子類型、復合類型、集合類型和數據元類型等。提供了聯合類型(union types)和匹配(match)表達式。支持邏輯(函數)定義,邏輯里可使用常見的 if、while、foreach 等控制流和 lambda 表達式。支持命名空間、模塊化和依賴機制。提供常
32、用的內置函數標準庫。NASL 利用可視化對復雜的語言特性做了屏蔽和簡化,大大降低了用戶的學習門檻,符合低代碼群體的用戶畫像。子語言子語言:NASL 子語言是在基礎語言之上,吸收了 Web 應用各子領域的傳統編程語言和框架的主要特征而設定的 DSL,其中:2323/4646 國產編程語言藍皮書國產編程語言藍皮書 數據定義子語言用于表達數據庫、表、字段和索引等相關概念。數據查詢子語言用于表達篩選、排序、分頁和聚合等數據查詢場景。頁面子語言主要用于表達頁面布局、頁面交互和頁面樣式等場景。流程子語言主要用于表達手動任務、自動任務、排他網關等流程領域的相關概念。各子語言并非互相獨立、拼湊而成,而是建立在
33、基礎語言之上,較為統一,例如:前端、服務端、實體均使用統一的類型定義。前端頁面邏輯、服務端邏輯、流程邏輯可使用統一的表達式、語句、內置函數標準庫。前端調用服務端邏輯,邏輯調用接口,流程跳轉頁面等功能屏蔽了底層細節,用戶無感。配套設施配套設施:Language Server:包含類型檢測、類型推斷、跳轉定義、自動補全等能力,減少編程出錯概率和提高編程效率。Debugger:包含 breakpoint、step into、step over、resume、evaluation 等能力。代碼倉庫:用于實時保存用戶構建應用所產生的 NASL 代碼,并滿足高性能、高可用、高可靠等特性。Generator
34、:NASL 語義編譯器。低代碼平臺借助于 Generator,將 NASL 語言編譯為 Java、JavaScript 等通用語言,在借助底層通用語言的運行時設施如 JVM,將 NASL 語言運行在計算機上。Upgrader:用于 NASL 語言在版本迭代過程中產生的一些兼容性問題處理。庫與依賴、編譯器架構等其他方面詳見輕舟低代碼技術白皮書:http:/ 國產編程語言藍皮書國產編程語言藍皮書 2.2.9 9 Z Z 語言語言 項目分類 免費、開源(MIT)、專用、接受社區貢獻 語言類別 一般編程語言 工具類別 一般編譯工具、解釋器、轉譯器 應用領域 圖形引擎、AI、教學 倉庫 https:/
35、2.9.1 簡介 到目前為止,Z 語言還是一門玩具語言,但它的野心很大。Z 語言的目標,是做成“最強的玩具語言”。何謂玩具語言?與通用編程語言相比,Z 語言有如下特征:定位:玩具語言是用來玩的,是用來分享編程語言相關的知識的。玩具語言可以用來作為教學案例,但不用來編寫大規模工業應用??勺x性:基于前面的定位,玩具語言需要拋棄掉所有影響可讀性的特性,包括性能優化、安全相關的問題,而只關注語言特性本身。教學性:我給 Z 語言配套了一本同步的開源書Z 語言煉成記(https:/ 語言編譯器本身遵循“增量開發”原則,同步書也增量更新。那么何謂“最強”呢?這里的“最強”,指的是和其他玩具語言相比,Z 語言
36、有如下特點:麻雀雖小,五臟俱全。-語言特性上,Z 語言支持動態類型和靜態類型,并支持常見的函數、類、接口、泛型、模塊化等語言特性。2525/4646 國產編程語言藍皮書國產編程語言藍皮書 -工具鏈上,Z 語言既可以解釋執行,也可以直接編譯成匯編(當前支持Windows 和 Linux 的 X86_64 匯編),還可以轉譯成 C、Python 和JavaScript。應用:玩具語言也可以有應用,即“玩具應用”。Z 語言的驅動應用是一個 AI 圖形引擎Zaige(https:/ AI 圖形引擎(https:/ AI 繪圖腳本時,編譯器會自動將 Z 腳本轉換為 Python 腳本,然后調用 Pyth
37、on 的 AI 繪圖庫。-編譯期腳本執行。在編譯或解釋過程中,編譯器可以調用 Z 解釋器,執行任意 Z 函數。這個特性可以用來實現泛型、模版元編程,以及其他類型的代碼生成功能。-生態融合:生態融合:Z 語言既可以解釋執行,又可以轉譯成 C、Python 和JavaScript,因此 Z 語言可以作為一門膠水語言,方便地融合多個生態。以上內容大部分都是構思(吹牛),還沒有實現。Z 語言從 2023 年 11 月正式立項,到目前為止,進度如下:語法特性實現了最基本的部分:基本類型、變量、函數、類??梢运闶且婚T最簡單的玩具語言了。從代碼推送可以看到,現在實現了 34 個小版本,最新版是v0.0.34
38、。工具鏈:編譯器、解釋器和轉譯器都同步實現了。同步開源書:Z 語言煉成記更新了 5 章,和編譯器的進度保持一致。Zaige 引擎:完成了初始的調研和學習工作,正式開始編碼。初步目標是實現一個簡單的 2D 圖形引擎,以及簡單的瓷磚地塊編輯器。同步開源書:從零開始制作 AI 圖形引擎完成了前三章的編寫,內容是總體設計和相關領域的調研。Z 語言的示例代碼如下:use io.print,open,W/導入標準庫,用 use 關鍵字。const PI=3.1415926f/常量定義用 const 關鍵字。2626/4646 國產編程語言藍皮書國產編程語言藍皮書 /函數定義和 Go 比較像。函數的關鍵字是
39、fn。Z 語言里函數默認是純函數,即不能產生副作用。fn add(a int,b int)int a+b/代碼塊的最后一個語句即是返回值 mut/加上mut 標注,則函數可以產生副作用 fn writeFile(name str,s str)bool let f=open(name,W)on(exit)f.close();return false f.write(s)true var/加上var 標注,則函數可以不指定參數和返回值類型,這樣的函數和 JS 與Python 的函數類似。fn alert(message)message=Alert!$message print(message)fn
40、 main /main 函數是特殊的函數,它是程序的入口。print(Hello,world!)/語句結尾不需要;。函數調用形式與 C 一致。print(Here is pi:$PI)/Z 語言支持嵌入字符串。這里常量 PI 的值被直接嵌入到字符串里了。let a int=10/let 標量,類似于 C 的變量,但它的值是不可變的。a=12/錯誤!a 是不可變的量。mut b=5/mut 變量。這個相當于 C 語言里的普通變量。Z 支持基本的類型推導 b=b*2/正確!b 是可變量。b=Z 語言/錯誤!不能改變變量的類型。var c=5/var 幻量。相當于 JS 里的 var 變量,不但值可
41、以變,類型也可以變。c=Z 語言/正確!c 是幻量,可以從整數類型變成字符串。print(a+b is$add(a,b)2727/4646 國產編程語言藍皮書國產編程語言藍皮書 2.12.10 0 凹語言凹語言 項目分類 免費、開源(AGPL-3.0)、通用、接受社區貢獻 語言類別 一般編程語言、命令式語言 工具類別 一般編譯工具、代碼生成 應用領域 通用、建模與模擬、計算機圖形 主頁 https:/wa-lang.org/倉庫 https:/ 2.10.1 簡介 凹語言 是針對 WebAssembly 設計的、靜態數據類型的、編譯型通用編程語言,目標是:簡單易用 強表達力 高性能 可用于工業
42、程序開發 項目起意于 2019 年;2022 年 1 月正式啟動、7 月開源;2023 年 8 月發布最小可用(MVP)版;目前處于工程試用階段。凹語言的設計重點是易用性,使用自動內存管理、字符串為基本類型等,均體現了這點。凹編譯器是單文件可執行程序,內置工程腳手架,三步即可創建一個 Wasm 程序;此外凹語言提供了在線 Playground(https:/wa-lang.org/playground),在網頁內即可編寫、編譯、運行、測試凹代碼:2828/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.10-1 雖然處于早期階段,凹語言仍展現了強勁的性能,使用它開發的任天堂 FC 模擬
43、器(https:/wa-lang.org/nes)可以流暢的運行各種 FC-ROM(作為對比,采用同樣的模擬方法,Python 開發的 FC 模擬器性能僅有實機的 1%):圖 2.10-2 凹語言的應用方向包括 XR、游戲、工業設計、空間地信等需要高密度運算的網頁應用,項目組正在為這些應用開發圖形圖像等支持庫:2929/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.10-3 凹語言是社區合作開發的成果,編譯器使用 Golang 編寫、標準庫使用凹語言編寫,隨時歡迎編程語言愛好者圍觀、共建。3030/4646 國產編程語言藍皮書國產編程語言藍皮書 2.12.11 1 洛書洛書 項目分類
44、 免費、開源(MIT)、通用、接受社區貢獻 語言類別 一般編程語言 工具類別 解釋器、運行時環境 應用領域 通用 主頁 https:/losu.tech/倉庫 https:/ 2.11.1 簡介 洛書編程語言,原名洛書漢語編程,英文縮寫 Losu(Language of System Units),最早發布于 2020 年,項目目標是打造開源、高效、強大的國產編程語言。目前洛書已經實現了完整的語法設計、編譯器、虛擬機、核心庫、拓展庫,并基于自身實現了包管理器、在線 Playground 與軟件源,初步成為一門具備實用性的超輕量級、跨平臺腳本語言。洛書的核心設計理念是易用與現代化,并兼顧中文程序
45、設計,目前,洛書已經可以實現:類 Python 關鍵詞,動態數據類型與動態語法特性,圖靈完備、支持面向過程、面向對象與部分元編程的特性。支持常見語法結構,包括 變量聲明、方法調用、對象、數組、字符串、表達式、控制語句 支持 運算符重載、構造函數、匿名函數、閉包、高階函數、柯理化、鴨子類型等特性,并且使用簡潔的方式進行實現 完善的 UTF-8 編碼支持,支持使用 字母、中文、甚至 emoji 作為代碼,在 Windows 平臺提供可選的 GBK/UTF-8 轉換功能 內置 GC,自動化的內存管理機制 3131/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.11-1 洛書是一門富有創新性
46、的編程語言,擁有簡潔、高效且可靠的實現。洛書擁有良好的單線程性能,支持輕量化的協程,和真正的多線程(洛書拋棄了傳統腳本語言的 GIL 全局解釋鎖,并且為每個線程分配了獨立的 GC)。圖 2.11-2 與此同時,洛書的零依賴、易移植與超低的運行開銷特性,使得其不僅支持 PC 設備 3232/4646 國產編程語言藍皮書國產編程語言藍皮書 Windows 與 Linux 等 OS,也可運行在多種低資源 MCU、RTOS 乃至裸機環境中,并且維持優秀的運行效率(高于 micropython)。圖 2.11-3 洛書已經打造出獨立、開源的核心生態(腳本引擎、核心庫、基礎工具),且在中華人民共和國國家版
47、權局注冊,登記號:2023SR0953209。此外,洛書積極與國內高校創新團隊進行合作,對洛書的國產軟硬件生態的兼容性進行了大量改進優化工作,基于洛書制作的作品在“統信杯”計算機設計大賽信創賽道獲得國家級獎項,并產出多篇軟著、專利等成果。目前,洛書可以支持 UOS、Deepin、Rt-thread 等多種國產 OS,龍芯、鯤鵬、玄鐵等多種國產處理器,覆蓋 Arm、x86、C-Sky 等多種指令集。3333/4646 國產編程語言藍皮書國產編程語言藍皮書 2.12.12 2 青語言青語言 項目分類 免費、開源(木蘭寬松協議 V2.0)、通用、接受社區貢獻 語言類別 一般編程語言 工具類別 解釋器
48、、IDE 應用領域 通用 主頁 https:/ https:/ 2.12.1 簡介 青語言是一門完全基于中文語言習慣打造的編程語言,主要面向青少年、兒童和非專業人士。主要設計構成如下:語言核心參考 Lisp 語言。Lisp 被稱為實現編程語言的語言,其極簡的語言內核,非常便于實現。這樣可以使得青語言的核心語言實現十分簡介,方便開源開發者參與和推動語言核心的發展。語法上參考 JavaScript 語言。JS 編程語言語法非常簡單,其最初設計也是Lisp 核心,因此實現起來非常容易。對于使用者來說,需要掌握的概念少,可以很容易地學習和使用。使用 C#開發,運行在.Net 平臺上。目前.Net 平臺
49、可以說是最開放、跨平臺兼容最好的編程語言之一,且本身有良好的語言生態可以借用?;?Net 平臺可以使青語言具備是否良好的跨平臺兼容性,同時可以方便地擴展其功能。目前使用動態鏈接庫 DLL 的方式擴展功能。青語言提供簡單的 C#原生功能的封裝方法,開發者可以通過參照示例項目,將需要的功能封裝成為單個 DLL 文件,可以方便地分享和使用。3434/4646 國產編程語言藍皮書國產編程語言藍皮書 青語言提供了解釋器、編輯器、安卓 APP,同時支持 Windows、Linux、OSX 兼容,支持 GUI 圖形界面編程。簡單時鐘示例:圖 2.12-1 AI 圖片分類:圖 2.12-2 3535/464
50、6 國產編程語言藍皮書國產編程語言藍皮書 運行大語言模型:圖 2.12-3 3636/4646 國產編程語言藍皮書國產編程語言藍皮書 2.12.13 3 獅偶獅偶 項目分類 免費、開源(Apache-2.0)、通用、接受社區貢獻 語言類別 一般編程語言、并發編程語言、面向對象語言、高級編程語言 工具類別 一般編譯工具、解釋器、代碼生成、運行時環境 應用領域 通用 倉庫 https:/ 2.13.1 簡介 獅偶是開源、面向狀態機、圖形化、跨平臺、IDE 一體的腳本編程語言。獅偶是完全面向業務的編程語言,可以用于構建各種業務系統。不負責技術底層的實現,只負責業務邏輯的描述。IDE 原生提供全場景能
51、力,可以在一個工程里串聯整條業務線。圖 2.13-1 3737/4646 國產編程語言藍皮書國產編程語言藍皮書 獅偶的編譯器、解釋器、運行時、IDE 全部開源,可以自由修改。獅偶 IDE 集成資源管理、靜態數據管理等功能,可以二次開發增加特定領域系統。IDE 提供圖形化反饋能力,可以方便業務人員理解業務邏輯。靜態數據可以由 Excel 編輯,在編譯時隨代碼一起編譯到二進制文件中,降低存儲占用,提高運行效率。借助圖形化的國際化能力,獅偶編程語言可以在代碼完成后應用國際化,實現所有內置和本地庫的國際化。獅偶已經在外企、黨政、科研、教育等領域實驗性商用。同時在青少年編程教育領域已經獲得廣泛的應用,支
52、持了兩屆教育部全國中小學白名單比賽。圖 2.13-2 獅偶的前端使用 Blockly、Vue 等開源技術構建本身并沒有使用前端構建技術,修改源碼刷新生效,易于維護和擴展。編譯和連接是完全使用 JavaScript 語言編寫,可在瀏覽器或 Nodejs 中運行。IDE 為純 Html5 架構,對服務器端無要求,任何 HTTP/HTTPS 服務器都可以運行。業務側用戶不需要配置環境,不需要安裝任何軟件。主流瀏覽器均可運行、支持移動端。獅偶是面向狀態機編程的語言,不同的狀態可以監聽不同的事件、執行不同的業務邏輯,可以很方便的構建各種復雜的業務系統。狀態機之間通過異步消息通信,可以充分利用多線程、多進
53、程、分布式等并行技術,實現高并發和高性能。獅偶是強類型語言,支持自定義數據結構,本地庫可支持泛型。函數分為函數、狀態機行為、狀態行為三種綁定關系。變量分為狀態機、狀態、局部三個作用域。3838/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.13-3 通過獅偶 VM 對字節碼解釋執行,或將字節碼二次編譯為其他語言代碼,實現跨平臺和高性能運行。目前主要通過 VM.mjs 在 JS 中解釋字節碼運行。同時通過 toC.mjs 提供了將字節碼編譯為 C 代碼的功能。由于獅偶大量使用異步邏輯,在可以根據使用場景和技術棧,在技術層控制并發和異步,充分發揮硬件性能,同時也能支持嵌入式、服務器、客戶
54、端、網頁、可執行文件等運行環境,可以開發 VR、微信小程序、物聯網等應用。符合信創要求,支持鴻蒙系統。獅偶意思是適合擺放在手邊激勵自己的獅子造型的玩偶。英文名稱 roarlang。3939/4646 國產編程語言藍皮書國產編程語言藍皮書 2.12.14 4 凸語言凸語言 項目分類 免費、開源(AGPL-3.0)、通用、接受社區貢獻 語言類別 一般編程語言、命令式語言 工具類別 一般編譯工具 應用領域 通用、行業應用 倉庫 https:/ 2.14.1 簡介 凸語言是一款專為通用場景設計的動態編譯型編程語言,項目于 2018 年啟動,于2022 年開源,目前已成功實現自舉,處于試用優化階段。該語
55、言的設計初衷源于對現有編程語言在追求高性能和安全性方面過度極端化的認識,例如 Rust 和 C+等。盡管這些語言在性能和安全性方面表現卓越,但在實際程序開發中給開發者帶來了相當的負擔,使人感到有些疲倦(凸|禿)。相較之下,當前的動態語言如 PHP、Python 和 JavaScript 等雖然具有較高的開發效率,但性能通常較差,且以解釋型為主,擴展性也受到一定限制。為了解決這些問題,不得不通過編寫 C 語言的擴展庫來實現一些底層特性。凸語言的發展目標是在開發效率、性能和至簡方面取得平衡。在開發效率方面,主要采用動態語法,無需繁瑣的類型標注,使開發者能夠專注于業務邏輯的實現。而在性能方面,則通過
56、靜態語法編寫高性能庫,為高性能場景提供了可行的解決方案。至簡性是凸語言的另一個追求,它具有 100%零依賴,自給自足的特點,全鏈路實現自舉(編譯、匯編、鏈接),無需依賴外部工具鏈支持,目前可在任意 amd64 Linux 架構下靈活使用。動態語法示例:4040/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.14-1 靜態語法示例:圖 2.14-2 特性語法實例:4141/4646 國產編程語言藍皮書國產編程語言藍皮書 圖 2.14-3 4242/4646 國產編程語言藍皮書國產編程語言藍皮書 2.12.15 5 豫言豫言 項目分類 開源(AGPL)、通用 語言類別 一般編程語言、高級
57、語言、函數式語言 工具類別 一般編譯工具 應用領域 編程語言與中文編程研究 主頁 http:/www.yuyan-lang.org/倉庫 https:/ 2.15.1 簡介 本科研性質的項目旨在解決如下問題:一個中文編程語言可以以何種形式存在?編程中概念應當如何用符合中文語境的概念表達?中文語法語義從何種程度上可以幫助程序的撰寫?編程語言在全中文環境下會遇到哪些技術問題,它們應該被如何解決?中文的概念和表達又會給編程語言本身帶來何種新的發展?作者相信,編程語言的設計本身并非完全是一個科學問題,更是一個藝術問題。本項目若可以為朋友們提供一些設計中文編程語言技術、藝術、與文化方面的思路,我們也就實
58、現了本項目的初衷。設計理念 豫言中文編程語言以中文編程為核心,以現代化編譯器框架 LLVM 為基礎,吸取函數式編程領域數十年來的語言設計經驗,自主研發,實現了從頂部語法,編譯設計,代碼生成的全中文編程環境。豫言編譯器將全中文的源碼,通過一系列編譯步驟,生成了完全使用中文標識符 LLVM 后端碼,最終由 LLVM 編譯器框架生成后端執行程序。豫言編譯器本身也 4343/4646 國產編程語言藍皮書國產編程語言藍皮書 使用了豫言編程語言實現,證明了豫言語言設計可以被用來構建大型程序,是眾多編程語言以外企業和個人的又一項選擇。核心特征 與其他語言相比,豫言有著獨特的風格。與其余大部分中文編程語言相比
59、,豫言基于函數式編程,開創性地采用了依值類型系統,從根本上增強了語言的安全性與可靠性,也從某種程度上增加了軟件開發效率。與同類型的英文編程語言相比,豫言的出現減少了語言學習的門檻,使得廣大軟件行業從業者乃至青少年不需要借助英文就可以學習和使用先進的編程語言范式,同時這些范式在豫言中擁有更直接的表達,這對于漢語在計算機行業及編程語言相關技術的發展有著直接的促進作用。歷史展望 豫言編程語言不是第一個,也不會是最后一個中文編程語言,我們已經看到有新的中文編程語言(例如入墨答語言)借用了豫言編程語言中的一些設計。我們希望全新設計的豫言編程語言成為集當今優秀的編程語言設計于一體,能夠兼顧工業生產、人才教
60、育、科學研究的一門編程語言。未來一定會有新的編程語言出現,我們希望通過豫言成為他們設計時的可靠參考。為何設計中文編程語言?中文有源遠流長的歷史,豐富的文化內涵。這樣一門語言,在科技上仍然看不到廣泛的使用,定有其特殊的原因。中文編程語言的設計雖然經歷了照搬翻譯英文關鍵字,自主設計語法,到使用本土表達的發展階段,但目前仍有實用方面未能夠解決的問題。我希望借本項目,探索中文在編程語言設計領域的各種問題,最終展現中文在編程語言行業的魅力。4444/4646 國產編程語言藍皮書國產編程語言藍皮書 附錄一附錄一 語言類別語言類別 a.一般編程語言(General Programming Languages
61、)b.并行語言(Parallel Programming Languages)c.并發語言(Concurrent Programming Languages)d.分布式語言(Distributed Programming Languages)e.命令式語言(Imperative Languages)f.面向對象語言(Object Oriented Languages)g.函數式語言(Functional Languages)h.約束和邏輯語言(Constraint and Logic Languages)i.數據流語言(Data Flow Languages)j.可擴展語言(Extensibl
62、e Languages)k.匯編語言(Assembly Languages)l.多范式語言(Multiparadigm Languages)m.高級編程語言(Very High Level Language)4545/4646 國產編程語言藍皮書國產編程語言藍皮書 附錄二附錄二 工具類別工具類別 a.一般編譯工具(General Compilers)b.解釋器(Interpreters)c.增量編譯器(Incremental Compilers)d.可重定向編譯器(Retargetable Compilers)e.實時編譯器(Just-in-time Compilers)f.動態編譯器(Dyn
63、amic Compilers)g.生成器(Translator Writing Systems and Compiler Generators)h.代碼生成(Source Code Generation)i.運行時環境(Runtime Environment)j.預處理器(Preprocessors)k.解析器(Parsers)4646/4646 國產編程語言藍皮書國產編程語言藍皮書 附錄三附錄三 應用領域應用領域 a.通用(General Computation)b.計算理論(Theory of Computation)c.計算數學(Mathematics of Computing)d.網路(Network)e.信息系統(Information Systems)f.安全(Security)g.機器學習(Machine Learning)h.人工智能(Artificial Intelligence)i.并行計算(Parallel Computing)j.并發計算(Concurrent Computing)k.分布式計算(Distributed Computing)l.建模與模擬(Modeling and Simulation)m.計算機圖形(Computer Graphics)n.行業應用(Applied Computing)