Goscript:Rust 實現的 Go 語言規範

語言: CN / TW / HK

Anaconda 開發商最近釋出了PyScript,這是一個可以讓開發者在 HTML 中混寫 Python 程式碼的框架,有人將其稱為“Python 版 JSP”。事實上,PyScript 底層採用了 WebAssembly, 因為它基於 Pyodide 構建,Pyodide 由編譯成 WebAssembly 的 CPython 3.8 直譯器組成,允許在網頁瀏覽器中執行 Python。

無獨有偶,開發者採用相同的思路讓 Go 也順利在瀏覽器上執行。 https://goscript.dev 網站支援在瀏覽器端直接執行 Go 程式碼,這是一個 Go playground,底層採用 Goscript,通過 WASM 實現。

Goscript 是 Go 語言規範的非官方實現, 用於 Rust 專案的內嵌或封裝 ,提供了更簡單的方式封裝和呼叫底層的 Rust 程式碼。 就像Lua之於Redis/WoW,或者Python之於NumPy。

Goscript 包含六個專案:

  • parser   把原始碼變成AST,移植自Go官方程式碼。
  • type checker   基於AST做型別推倒和型別檢查,也移植自Go官方程式碼。
  • codegen   基於AST和型別資訊生成位元組碼。
  • vm   執行位元組碼。
  • std   官方庫,移植自Go官方庫。
  • engine   包含官方庫的native部分,再加上簡單封裝。

Goscript 實現了 Go 的幾乎所有特性(pre 1.18,因此不包括泛型),並移植了部分官方庫,已通過的相關測試用例檢視 https://github.com/oxfeeefeee/goscript/tree/master/engine/tests

Goscript 專案程式碼: https://github.com/oxfeeefeee/goscript