發布 Tinygo 0.7.0,基於 LLVM 的 Go 編譯器

可用的 項目發布 Tinygo 0.7.0,該公司正在為需要緊湊表示結果程式碼和低資源消耗的領域(例如微控制器和緊湊型單處理器系統)開發 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 整合。

主要專案目標:

  • 產生非常緊湊的可執行檔;
  • 支援最常見型號的微控制器板;
  • 可透過網路申請;
  • 當呼叫 C 中的函數時,CGo 支援以最小的開銷;
  • 支援大多數標準包,並且能夠編譯標準現有程式碼而不更改它。

    對多核心系統的支援不是主要目標之一,
    有效率地啟動大量協程(完全支援協程本身的啟動),達到參考編譯器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

  • 為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster