Solod(So)是一個嚴格的 Go 語言子集,能將其程式碼轉譯為標準 C 程式碼。
So 支援結構體、方法、介面、切片、映射、多重回傳值和 defer。所有變數預設都在堆疊上分配記憶體;堆積分配則可透過標準函式庫選擇性啟用。它對泛型的支援有限,並透過標準函式庫提供並行處理,而非內建於語言本身。
So 適用於希望獲得系統級控制權但不想學習新語言的 Go 開發者。同時也適用於喜歡 Go 的安全性、結構和工具鏈的 C 程式設計師。
轉譯為標頭檔 main.h:
以及一個實作檔 main.c:
在 So by example 中查看更多範例,並在語言導覽中了解支援的語言特性。
建立一個新的 Go 專案並加入 Solod 相依性,以使用 So 標準函式庫:
使用 main 或特定的 commit hash 而非 latest 來安裝最新的開發版本,而非最新的標記版本。
編寫常規的 Go 程式碼,但使用 So 套件而非標準 Go 套件:
轉譯後的 C 程式碼將儲存在 generated 目錄中。
您也可以一次性將程式碼轉譯為 C 並編譯為二進位檔。這會使用 CC 環境變數設定的 C 編譯器(預設為 cc):
或者,您可以轉譯、編譯並執行程式碼,而無需儲存二進位檔:
所有命令都與 Go modules 一起運作,而非個別檔案(因此執行 . 而非 so run main.go)。
語言導覽。若要了解 So 的特性和限制,請查看該語言的簡要概述。
標準函式庫。So 提供了一組不斷擴充的套件,類似於 Go 的 stdlib。
遊樂場。線上試用 So,無需安裝任何東西。您可以執行程式碼或查看轉譯後的 C 輸出。
So by example。如果您喜歡邊做邊學,可以透過帶註解的範例程式,動手入門 So。
建置。使用 so build 編譯 So 程式並管理安全功能。
測試。使用 so test 命令和 so/testing 套件編寫測試。由於 So 程式碼也是有效的 Go 程式碼,您仍然可以在適合的情況下使用 go test — 這些測試永遠不會被轉譯,因此可以使用所有 Go 的特性。
AI 技能。您可以讓一個 clanker 為您編寫 So 程式碼。但這樣還有什麼樂趣呢?
原則。So 是高度主觀的。簡潔是關鍵。堆積分配是明確的。嚴格的 Go 語法。
基準測試。So 在 C 互通性方面表現出色,但在常規 Go 程式碼方面也相當快速 — 通常與 Go 相當或更快。
常見問題。我聽過好幾次了,所以值得回答。
So 會產生依賴於幾個 GCC/Clang 擴充功能的 C11 程式碼:
支援的編譯器:GCC、Clang、Emscripten 和 zig cc。不支援 MSVC。
支援的作業系統:Linux、macOS 和 Windows(僅核心語言)。
支援的平台:amd64、arm64、riscv64、i386 和 wasm32。
So 也可以針對獨立環境進行編譯。
✓ v0.1 — 核心語言特性和 stdlib 套件。
✓ v0.2 — 網路、uuids 和更多目標:WebAssembly、32 位元、獨立環境。
✓ v0.3 — 並行處理、JSON、測試和基準測試、更多安全性(逃逸分析、記憶體洩漏檢查、堆疊追蹤)。