发布 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

  • 添加评论