TinyGo 0.44:interp 把 map lookup 和 memset 提前到编译期,启动路径再减一段
v0.44.0 于 2026-10-28 发布,官方博客在 2026-10-29 跟进,距离 0.43 只隔了几周。这版的主线是三件事:二进制更小、RAM 占用更低、启动更快。
- 博客:https://tinygo.org/blog/2026/tinygo-0.44-smaller-faster-better/
- Release:https://github.com/tinygo-org/tinygo/releases
更省内存:更多初始化挪到编译期
interp 包现在能在编译期执行更多程序初始化逻辑,包括 map lookup、memset、接口哈希、私有原子操作,以及 deferred 初始化——这些都能提前算出来。
在真实操作系统上,os 包不再为程序从未使用过的临时文件做启动工作。
合起来的效果是二进制更小、RAM 占用更低、启动更快。
更快:跳过不可能失败的检查
- 编译器会跳过那些永远不可能失败的 slice 越界检查。
- 更多字符串比较场景不再拷贝 byte slice。
- RP2040/RP2350 的 PLL 计算从启动阶段移了出去。
这几项都不需要改代码,重新编译即可。
多核:cores 调度器加核心亲和性
cores 调度器在 RP2040/RP2350 上已经成熟,这一版新增了核心亲和性:可以选择 goroutine 跑在哪个核上。同时修复了调度器锁饥饿问题(schedulerUnlockAndWait),随机数读取现在跨核安全。
ESP32-S3 加入多核支持:两个 Xtensa LX7 核都能用 cores 调度器跑 goroutine,同样包含核心亲和性。另外还补上了 USB-OTG device 支持和 flash BlockDevice 支持。
新板子
- Arduino Uno R4 Minima
- Arduino Uno R4 WiFi(首次支持 Renesas)
- NUCLEO-F401RE
- M5Stack StampFly
ESP32xx 系列另有一批修复。
WebAssembly
- GC 只扫描 Asyncify 栈的活跃部分。
- sleep 时间取整正确。
- WASI 文件读写不再报告负数计数。
- 在 JavaScript 环境下环境变量解析正确。
- Linux 上的 wasm-opt 改为链接 mimalloc,构建更快。
drivers 0.37:十个新驱动,不做堆分配
新增设备:
- Bosch BMI270 IMU
- Bosch BMM150 磁力计
- CAP1166 触摸/LED 控制器
- ILI9325 8 位并口显示屏
- TI INA3221 三通道电源监测
- PixArt PMW3901 光流传感器
- SN3218 LED 驱动
- ST7036 字符 LCD
- VL53L3CX ToF 传感器
- Waveshare 2.7 英寸 e-Paper(epd2in7)
新驱动都不做堆分配,部分旧驱动也去掉了分配。ESP32/ESP32-S3/ESP32-C6 增加编码器支持。
espradio 与蓝牙
espradio 方面:
- 经典 ESP32 上的蓝牙现在可用。
- ESP32-S3 上 radio 可以跑在 core 0,
cores调度器同时在另一个核上跑你的代码。 - 直接迁移到最新的 lneto netstack,新增 NTP、RSSI、发射功率控制、可配置接收 ring,以及不分配内存的 ESP-NOW 收发。
蓝牙方面:
- 新增 WebAssembly + Web Bluetooth API 后端,覆盖 central 角色,同一份 Go 代码可以直接在网页里跟设备通信。
- HCI/L2CAP/ATT 移入
hci包,不再依赖 build tag,可以在主机上测试,覆盖率 87%,期间发现并修掉了一批 bug。 - 常用类型 UUID/MAC 移到
ble包,并保留别名。 - nRF52840 增加发射功率、DC/DC 转换器控制、USB 线拔出检测,附带低功耗 beacon 示例。
- Windows 上的稳定性改进。
升级注意事项与其余改动
- 这一版用 LLVM 23 构建,最低支持的 LLVM 版本提高到 15,低于 15 的构建环境需要先升级。
- 新增
-panic-unwind=none编译选项。 - ESP32 烧录时不再擦除整片 flash,行为与之前不同。
- espflasher 升到 0.9.2。
- ESP32-S3/ESP32-C3 使用大 flash 段的启动镜像问题已修复;RP2040 板子的 flash 容量也已修正。
- cgo flag 的处理方式与
go命令对齐。 reflect修复Value.SetPointer、FieldByIndex。testing支持B.Loop、benchmark context、ReportMetric。interp修复 ctlz、指针派生整数、部分加载。- runtime:核心亲和性、clock handoff、threads 调度器下的信号处理、Boehm 下的 MemStats 分配计数、Boehm 下的 finalizer。
- ESP32-S3 cores 调度器与中断处理上下文相关的 bug 修复。
- USB CDC 在主机重新配置后恢复 TX。
发布说明与新版本下载见 GitHub releases 页面。