項目發布 ,該公司正在為需要緊湊表示結果程式碼和低資源消耗的領域(例如微控制器和緊湊型單處理器系統)開發 Go 語言編譯器。程式碼 在 BSD 許可證下。
使用LLVM實現對各種目標平台的編譯,並使用Go專案的主工具包中使用的程式庫來支援該語言。編譯後的程式可以直接在微控制器上執行,使得Go可以用來作為編寫自動化腳本的語言。
創建新專案的動機是希望在緊湊型設備上使用熟悉的 Go 語言 - 開發人員推斷,如果有用於微控制器的 Python 版本,那麼為什麼不為 Go 語言創建類似的版本。去 而不是 Rust,因為它更容易學習,為基於協程的並行化提供獨立於線程的支持,並提供廣泛的標準庫(“包含電池”)。
目前支援 15 種微控制器型號,包括 Adafruit、Arduino、BBC micro:bit、ST Micro、Digispark、Nordic Semiconductor、Makerdiary 和 Phytec 的各種開發板。程式也可以編譯成 WebAssembly 格式,以便在瀏覽器中執行,也可以編譯成執行檔。 Linux支援 ESP8266/ESP32 控制器 ,但正在開發一個單獨的項目,以在 LLVM 中添加對 Xtensa 晶片的支持,該項目仍被標記為不穩定且尚未準備好與 TinyGo 整合。
主要專案目標:
對多核心系統的支援不是主要目標之一,
有效率地啟動大量協程(完全支援協程本身的啟動),達到參考編譯器gc的效能等級(最佳化留給LLVM,在某些應用中Tinygo可能比gc更快)並完成 與所有 Go 應用程式。
與類似編譯器的主要區別 是嘗試使用垃圾收集來保留 Go 的原始記憶體管理模型,並使用 LLVM 產生高效的程式碼,而不是將其編譯為 C 表示。 Tinygo 還提供了一個新的運行時庫,該庫實現了針對緊湊型系統優化的調度程序、記憶體分配系統和字串處理程序。一些包,例如sync和reflect,已基於新的運行時重新建立。
0.7 版的變更包括「tinygo test」指令的實作、為大多數目標板(基於 ARM Cortex-M)和 WebAssembly 提供垃圾收集支援、對基於 RISC- 的 HiFive1 rev B 板的支援V 架構和 Arduino nano33 板,
改進的語言支援(支援使用 getter 和 setter 的位元字段,支援匿名結構)。
來源: opennet.ru
