奧推網

選單
科技

一個沒有KPI的國產程式語言,開源3個月有了哪些新進展?

【CSDN 編者按】放眼各大程式語言排行榜,幾乎很難看到國產程式語言身影,伴隨著我國基礎軟硬體的發力與追趕,尤其是在作業系統、資料庫等技術領域的累積,我們也漸漸看到一些國產程式語言的誕生,例如由一群 Go 語言愛好者發起的凹語言,2018 年籌備再到今年 7 月正式開源,其背後有著怎樣的故事,開源 3 個月後,其又進行了哪些改進與提升呢?

責編 | 夢依丹

出品 | 凹語言技術團隊官方投稿

凹語言正式開源不知不覺已經過去一個季度,這是凹語言開源的第一個季度的非正式總結,也是對未來的計劃和展望。

什麼是凹語言

凹語言(凹讀音“wā”)是 國內 Gopher 針對 WASM 平臺設計的通用程式語言。凹語言作為WASM原生 的程式語言,天然對瀏覽器環境親和,同時支援 Linux、macOS 和 Windows 等主流作業系統,此外透過 LLVM 後端對本地應用和微控制器等環境提供支援。

官網:https://wa-lang。org/

倉庫:https://github。com/wa-lang/wa/

Play:https://wa-lang。org/playground/

下面是凹語言的Logo:

從形狀上看,“凹”字形似 WASM 圖示(方塊上部缺個口);從讀音上看,“凹”正好是 WASM 的前半部;從結構上看,實心的“凹”字約等於字母“C”逆時針旋轉 90 度——C 可以理解為 C 語言,也可以理解為 Coder,那麼“凹”也可以暗示躺平的的 C/躺平的 Coder……

發起人

該專案的發起人柴樹杉、丁爾男、史斌均是國內資深 Gopher。其中柴樹杉是《Go 語言高階程式設計》等多本 Go 暢銷書作者,目前在螞蟻從事 KusionStack 和 KCL 語言的設計和開發工作。丁爾男是《WebAssembly 標準入門》等多本 WASM 專著作者,長年從事 3D 開發熱衷於效能最佳化,目前在航天遠景科技股份有限公司分管 3D 相關產品開發工作。史斌是編譯器領域專家,曾為 Go 編譯器提交過 127 個最佳化補丁,在 Go 全球貢獻者排名中長期處於前 50 名,同時擁有 Go 與 LLVM 官方 Git 倉庫的提交許可權,同時也是《Go 語言定製指南》圖書的作者。

在開發實踐中,因為不同的原因,先後萌生了發展一門新語言的想法,Go 語言剋制的風格是我們對於程式語言審美的最大公約數,因此選擇它作為初始的藍本。不必諱言:本專案啟動時大量借鑑了 Go 的設計思想和具體實現——這是在有限投入下不得不作出的折衷,我們希望隨著專案的發展,積累更多原創的設計,為自主創新的大潮貢獻一點力量。

凹語言的設計哲學和開發計劃

凹語言的整體設計,是圍繞著“對開發人員友好”來進行的。字串/切片作為基本型別、無需(也不能)手動管理記憶體、視覺上更顯著的變數型別定義等均是這一核心思想的具體體現。

2022 年 7 月,凹語言正式開源,並公佈了半年度的線路圖:

隨著專案的公開,有了更多的同學加入了凹語言開發組,討論組社群也逐漸形成並保持活躍。感謝開發組的同學協同努力,第一季度的目標全部達成!

取得了哪些進展

首先,經過多次討論,開發組慎重決定凹語言採用 AGPLv3 開源協議,並制定了對應的了凹語言貢獻協議。目前已經有外部同學透過新的流程貢獻了程式碼。此外還取得了以下重大進展:

釋出第三版網站

從 2018 年起,網站經過 3 次較大更新。最開始第一版的網站只有一個靜態頁面(2018),第二版是剛開源時基於 MDBoo k構建(2022年7月),最新版本於 2022 年 9 月開發到 10 月底正式上線。

該版本網站由子專案負責人扈夢明開發,他還是凹語言 VSCode 外掛和 Playground 的負責人。

釋出純瀏覽器環境的的 Playground

Playground 是一套線上編譯凹原始碼並執行的環境。該環境的編譯、執行沒有呼叫後端服務,完全在頁面中執行;是一個非常便捷的體驗、測試凹語言的入口。

Playground 地址:https://wa-lang。org/playground/

建立 VSCode/Fleet/Vim 等高亮外掛

VSCode 外掛提供了語法高亮、程式碼片段補全、補全建議等功能,支援純 Web 環境安裝:

9 月 JetBrains Fleet 釋出了預覽版本,凹語言第一時間開發了高亮外掛:

當然,傳統的 Vim 外掛也不能少:

更多和外掛和功能完善希望社群同學參與共建。

WASM 後端原型如期釋出

WASM 後端原型如期釋出,已支援數值/字串基本型別、結構體、方法、陣列、切片等常用特性,專案組開始著手以此為基礎開發貪吃蛇等帶有互動功能的網頁小遊戲。

可以透過以下方式測試:

`go install github。com/wa-lang/wa@latest` `wa init -name=_examples/hi` `wa run _examples/hi`

或者建立以 `hello。wa` 檔案,包含下程式碼

fn main { println(“你好,凹語言!”) println(add(40, 2))}

fn add(a: i32, b: i32) => i32 { return a+b}

執行並輸出結果:

$ go run main。go hello。wa 你好,凹語言!42

程式預設會基於WAT後端編譯並執行,看到以上輸出表示一切正常!

作為嵌入 Go 程式指令碼

凹語言也可以作為 Go 語言包被匯入,然後以指令碼方式執行:

package main

import ( “fmt” “github。com/wa-lang/wa/api”)

func main() { output, err := api。RunCode(“hello。wa”, “fn main() { println(40+2) }”) fmt。Print(string(output), err)}

LLVM 後端提前啟動

原定於 2023 年春節後啟動的 LLVM 後端,提前啟動。LLVM 後端的主戰場在本地和嵌入式環境,下面是凹程式翻譯到 LLVM-IR 的效果:

目前已經支援素數例子的執行:

更新路線圖

展望

目前,凹語言是一個愛好者共建的業餘專案,沒有設定 KPI。一門新語言真正達到實用化,所需的工作量極其巨大,我們熱切的期望更多有興趣的同學能參與共建,尤其是承擔子專案負責人的職責。

與普通貢獻者相比,子專案負責人可以直接參與決策,在專案發展中獲得上不封頂的話語權。由於尚處於起步階段,可以單獨成為子專案的模組遍地都是:一組堆管理函式、一個wat轉二進位制wasm的包、一種與其他語言互動的介面……

出名要趁早,參與開源同樣需要趁早,歡迎參與共建。