编程 TinyGo 0.42 发布:runtime panic 现在可以 recover,新增 UEFI target,支持 Go 1.27 与 LLVM 22

2026-09-19 20:01:48

TinyGo 0.42 发布:runtime panic 现在可以 recover,新增 UEFI target,支持 Go 1.27 与 LLVM 22

TinyGo 0.42 最值得关注的变化是 runtime panic 变成了可恢复的——nil 指针解引用、除零、slice/map 越界、channel panic 都可以走 defer + recover,这是 TinyGo 和「大 Go」之间最老的差距之一。

发布页:

Go 1.27 与 LLVM 22

TinyGo 0.42 把 Go 版本支持推进到 1.27,官方发布的二进制就是在 1.27 下构建和测试的。Go 1.27 新引入的泛型方法(generic methods)也得到支持,靠的是升级 golang.org/x/tools

构建链迁移到 LLVM 22,同时保留 LLVM 19 和 LLVM 20 可用,方便从发行版软件包构建的用户。哪个 TinyGo 版本对应哪个 Go 版本,见 Go 兼容矩阵。

panic recover 的具体范围

在这个版本之前,TinyGo 程序里出现 nil 指针解引用或除零,程序就直接停了,没有后续。0.42 之后:

可以通过 defer/recover 处理的:

  • nil 指针解引用
  • 除零
  • slice 和 map 的越界操作
  • channel panic

Windows 上外加了一个 vectored exception handler 来做同样的事,riscv64 上的 recover 也已经可用。

仍然不可 recover 的:

  • out of memory
  • 其他 fatal error

runtime 自己知道哪些 panic 能处理、哪些不能——OOM 这类失败保持不可恢复,因为确实没有可做的事。

这项工作的影响不止于错误处理。testing 包现在支持 GoexitSkipNowFailNowt.Skipt.Fatal 因此行为正确。这一处改动解锁了大量标准库测试套件。受支持包的最新清单见 TinyGo 文档中的 supported packages 列表。

UEFI target:在操作系统启动前跑 Go 程序

0.42 增加了一个最小化的 UEFI target。你可以写一个 Go 程序,用 TinyGo 编译,然后作为 UEFI 应用在任何操作系统启动之前运行。该 target 支持 UEFI time 和 events,默认使用 tasks scheduler,所以 goroutine 可用。

这是早期工作,还有很多要做,同时也说明编译器已经走到了哪一步。

ESP32

Espressif 的芯片无线能力很强,是使用最广的一类。0.41 开始的 ESP32 工作在 0.42 中继续推进:

  • 原版 ESP32 获得了中断支持,带完整的 vector table;还有 timer alarms,以及 GPIO 引脚上的 SetInterrupt
  • 新增 ADC 驱动
  • 中断驱动的 UART 接收
  • flash XIP(execute in place),更大的程序现在可以正确烧录和运行
  • WiFi 支持,来自 espradio

无线方面,ESP32-C3 和 ESP32-S3 现在都支持蓝牙。

STM32 与其他新硬件

STM32 用户在这个版本里拿到的东西不少:

  • F4 和 F7 系列新增 OTG FS USB 驱动
  • 新增 STM32H7 支持,以及 NUCLEO-H753ZI 开发板
  • 新增 STM32U031 芯片支持
  • HSE 晶振频率可选
  • 修复 UART 发送、波特率和中断处理

其他新增硬件:

  • Puya PY32F 微控制器
  • Pimoroni Blinky 2350 和 Badger 2350
  • Seeed Studio XIAO nRF52840 的 'Plus' 版本
  • Game Boy Advance 的 mGBA 调试支持

USB

USB 支持整体改进。端点改为动态注册,因此 RP2、SAMD21、SAMD51 和 nRF52840 现在支持双向端点。描述符也改为动态生成,并新增 USBDevice.AttachUSBDevice.Detach 方法。

以上只是本次发布的一部分功能和修复,完整列表见 CHANGELOG

项目地址:

发布页:

复制全文 生成海报 TinyGo Go 嵌入式 UEFI LLVM

推荐文章

程序员茄子在线接单