0.31.0
This is the highly anticipated first release of 2024! Some of the most requested features:
- Go 1.22 support
- macOS arm64 native binary release build
- Nix flake support
- LLVM 17
There are many improvements and fixes to the compiler and runtime. We also have a new net package for greatly improved network support on bare metal devices. We have a new wasm-unknown target for WebAssembly early adopters. And of course several new boards supported, such as the Adafruit QT Py ESP32-C, and the Thumby.
- general
- remove LLVM 14 support
- add LLVM 17 support, and use it by default
- add Nix flake support
- update bundled Binaryen to version 116
- add
portssubcommand that lists available serial ports for-portand-monitor - support wasmtime version 14
- add
-serial=rttfor serial output over SWD - add Go 1.22 support and use it by default
- change minimum Node.js version from 16 to 18
- compiler
- use the new LLVM pass manager
- allow systems with more stack space to allocate larger values on the stack
build: fix a crash due to sharing GlobalValues between build instancescgo: addC._Booltypecgo: fix calling CGo callback inside generic functioncompileopts: setpuregobuild tag by default so that more packages can be builtcompileopts: force-enable CGo to avoid build issuescompiler: fix crash on type assert on interfaces with no methodsinterp: print LLVM instruction in tracebackinterp: support runtime times by running them at runtimeloader: enforce Go language version in the type checker (this may break existing programs with an incorrect Go version in go.mod)transform: fix bug in StringToBytes optimization pass
- standard library
crypto/tls: stub out a lot of functionsinternal/task,machine: make TinyGo code usable with "big Go" CGomachine: implementI2C.SetBaudRateconsistently across chipsmachine: implementSPI.Configureconsistently across chipsmachine: addDeviceIDfor nrf, rp2040, sam, stm32machine: use smaller UART buffer size on atmega chipsmachine/usb: allow setting a serial number using a linker flagmath: support more math functions on baremetal (picolibc) systemsnet: replace entire net package with a new one based on the netdev driveros/user: add bare-bones implementation of this packagereflect: stubCallSliceandFuncOfreflect: addTypeFor[T]reflect: updateIsZeroto Go 1.22 semanticsreflect: move indirect values into interface when setting interfacesruntime: stubBreakpointsync: implement trylock
- targets
atmega: use UART double speed mode for fewer errors and higher throughputatmega328pb: refactor to enable extra uartavr: don't compile large parts of picolibc (math, stdio) for LLVM 17 supportesp32: switch over to the official SVD fileesp32c3: implement USB_SERIAL for USBCDC communicationesp32c3: implement I2Cesp32c3: implement RNGesp32c3: add more ROM functions and update linker script for the in-progress wifi supportesp32c3: update to newer SVD filesrp2040: add support for UART hardware flow controlrp2040: add definition formachine.PinTogglerp2040: set XOSC startup delay multipliersamd21: add support for UART hardware flow controlsamd51: add support for UART hardware flow controlwasm: increase default stack size to 64k for wasi/wasm targetswasm: bump wasi-libc version to SDK 20wasm: remove line of dead code in wasm_exec.js
- new targets/boards
qtpy-esp32c3: add Adafruit QT Py ESP32-C3 boardmksnanov3: add support for the MKS Robin Nano V3.xnrf52840-generic: add generic nrf52840 chip supportthumby: add support for Thumbywasm: add newwasm-unknowntarget that doesn't depend on WASI or a browser
- boards
arduino-mkrwifi1010,arduino-nano33,nano-rp2040,matrixportal-m4,metro-m4-airlift,pybadge,pyportal: addninafwbuild tag and some constants for BLE supportgopher-badge: fix typo in USB product namenano-rp2040: add UART1 and correct mappings for NINA via UARTpico: bump default stack size from 2kB to 8kBwioterminal: expose UART4