项目发布 ,该公司正在为需要紧凑表示结果代码和低资源消耗的领域(例如微控制器和紧凑型单处理器系统)开发 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
