凹語言開源季度總結

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

責編 | 夢依丹

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

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

什麼是凹語言

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

下面是凹語言的 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 的包、一種與其他語言交互的接口……

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

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/5VkxMsR_C7R5UPXa3TYKLw