TinyGo 0.42 - 恢复已成真

Lobsters Hottest 工具

摘要

TinyGo 0.42 引入了可恢复的panic、Go 1.27 支持、UEFI 目标平台,以及扩展了对 ESP32 和 STM32 的硬件支持,增强了其在嵌入式系统开发中的能力。

<p><a href="https://lobste.rs/s/qi1bxu/tinygo_0_42_recover_is_real">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/09/02 17:56

# TinyGo 0.42 - recover 机制正式实现 来源:https://tinygo.org/blog/2026/tinygo-0.42-recover-is-real/ TinyGo 0.42 版本正式发布!本次更新带来了可恢复的 panic 机制、Go 1.27 支持、UEFI 目标平台以及更多新特性! 全新的 TinyGo 0.42 版本 (https://github.com/tinygo-org/tinygo/releases/tag/v0.42.0) 已发布,填补了 TinyGo 与“标准”Go 之间最古老的差距之一。运行时 panic 现在可以被恢复处理。我们还添加了 Go 1.27 支持以保持技术前沿 (https://go.dev/blog/go1.27),并将底层编译器升级至 LLVM 22 (https://llvm.org/),同时让 TinyGo 能够运行在全新的硬件平台上。 ## Go 1.27 与 LLVM 22 TinyGo 0.42 新增了对 Go 1.27 的支持,我们发布的编译器二进制文件均基于该版本构建并测试。Go 1.27 中引入的泛型方法,通过升级 `golang.org/x/tools` 得到了完整支持。 我们将构建系统迁移至 LLVM 22,同时仍保持对 LLVM 19 和 LLVM 20 的兼容,方便从分发包构建的用户。请查阅 Go 兼容性矩阵 (https://tinygo.org/docs/reference/go-compat-matrix/) 了解各 TinyGo 版本与 Go 版本的完整对应关系。 ## recover 机制正式实现 在此版本之前,TinyGo 程序中的空指针解引用或除零错误就意味着程序终止。这种情况已不复存在,这要感谢维护者们孜孜不倦的努力。 TinyGo 0.42 现在能够使运行时 panic 可被恢复处理。空指针解引用、除零错误、越界的切片和 map 操作以及通道 panic,都能通过 `defer` 和 `recover` 机制按照预期方式处理。在 Windows 上我们添加了向量异常处理器来实现相同功能,同时 `recover` 也现支持 riscv64 架构。 运行时能够区分哪些 panic 可以处理,哪些致命错误无法恢复。内存不足等严重错误仍然无法恢复,因为确实没有有效的补救措施。 这项工作的影响远不止于错误处理。`testing` 包现在支持 `Goexit`、`SkipNow` 和 `FailNow`,使得 `t.Skip` 和 `t.Fatal` 能够正常工作。这一项改动就解锁了大量标准库测试套件。请查看更新的已支持包列表 (https://tinygo.org/docs/reference/lang-support/stdlib/) 了解最新情况。 ## TinyGo 启动你的计算机 TinyGo 在 UEFI 上运行 本版本添加了最小化的 UEFI (https://uefi.org/) 目标平台支持。你现在可以编写 Go 程序,使用 TinyGo 编译,并在任何操作系统启动前作为 UEFI 应用程序运行。该目标支持 UEFI 时间和事件,并默认使用任务调度器,因此协程可以正常工作。 这是早期工作,仍有很多待完善之处。但它也很好地展示了编译器已经取得的进展。 ## ESP32 日趋成熟 乐鑫 (https://www.espressif.com/) 的芯片以其强大的无线功能而广受欢迎,自 0.41 版本开始的 ESP32 支持工作在此次版本中继续保持高速发展。你抽屉里可能还有一堆经典(老款?)的 ESP32 开发板。现在可以把它们拿出来发挥作用了!我们为初代 ESP32 添加了中断支持(包含正确的向量表)、定时器警报,以及 GPIO 引脚的 `SetInterrupt` 功能。此外还获得了 ADC 驱动、中断驱动的 UART 接收以及 Flash XIP(就地执行)支持,这意味着更大的程序现在可以正确地烧录和运行。我们甚至添加了 WiFi 支持,这要感谢 espradio (https://github.com/tinygo-org/espradio) 包。 说到无线功能,我们现在还支持 ESP32-C3 和 ESP32-S3 上的蓝牙功能。 ## 更多芯片,更多开发板 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 支持得到了全面提升。端点现支持动态注册,这为 RP2、SAMD21、SAMD51 和 nRF52840 带来了双向端点支持。描述符动态生成,并新增了 `USBDevice.Attach` 和 `USBDevice.Detach` 方法。 以上仅为新版本中包含的部分功能和修复。完整列表请查阅 更新日志 (https://github.com/tinygo-org/tinygo/releases/tag/v0.42.0)。 ## 感谢各位! 一如既往,我们必须特别感谢那些在幕后默默编写代码、测试、创建文档以及完成所有使 TinyGo 成为现实工作的人类伙伴。感谢你们的付出!

相似文章

Go 1.27 发布 - Go 编程语言

Lobsters Hottest

Go 1.27 已发布,包含重大增强,如泛型方法、性能改进以及新标准库特性,例如 encoding/json/v2 和后量子密码学支持。

那一次我用Go panic做流程控制

Lobsters Hottest

一位Go工程师讲述了一次事件:内存数据存储因排序缓慢而超载,他们在排序函数内部实现了上下文取消,使用panic和recover进行非局部流程控制,类似于encoding/json处理错误的方式。

Go 1.27 发行说明

Lobsters Hottest

Go 1.27 发布引入了泛型方法以及其他语言和工具链更新,同时保持与之前版本的兼容性。