github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/CHANGELOG.md (about) 1 0.31.2 2 --- 3 4 * **general** 5 * update the `net` submodule to updated version with `Buffers` implementation 6 7 * **compiler** 8 * `syscall`: add wasm_unknown tag to some additional files so it can compile more code 9 10 * **standard library** 11 * `runtime`: add Frame.Entry field 12 13 14 0.31.1 15 --- 16 17 * **general** 18 * fix Binaryen build in make task 19 * update final build stage of Docker `dev` image to go1.22 20 * only use GHA cache for building Docker `dev` image 21 * update the `net` submodule to latest version 22 23 * **compiler** 24 * `interp`: make getelementptr offsets signed 25 * `interp`: return a proper error message when indexing out of range 26 27 28 0.31.0 29 --- 30 31 * **general** 32 * remove LLVM 14 support 33 * add LLVM 17 support, and use it by default 34 * add Nix flake support 35 * update bundled Binaryen to version 116 36 * add `ports` subcommand that lists available serial ports for `-port` and `-monitor` 37 * support wasmtime version 14 38 * add `-serial=rtt` for serial output over SWD 39 * add Go 1.22 support and use it by default 40 * change minimum Node.js version from 16 to 18 41 * **compiler** 42 * use the new LLVM pass manager 43 * allow systems with more stack space to allocate larger values on the stack 44 * `build`: fix a crash due to sharing GlobalValues between build instances 45 * `cgo`: add `C._Bool` type 46 * `cgo`: fix calling CGo callback inside generic function 47 * `compileopts`: set `purego` build tag by default so that more packages can be built 48 * `compileopts`: force-enable CGo to avoid build issues 49 * `compiler`: fix crash on type assert on interfaces with no methods 50 * `interp`: print LLVM instruction in traceback 51 * `interp`: support runtime times by running them at runtime 52 * `loader`: enforce Go language version in the type checker (this may break existing programs with an incorrect Go version in go.mod) 53 * `transform`: fix bug in StringToBytes optimization pass 54 * **standard library** 55 * `crypto/tls`: stub out a lot of functions 56 * `internal/task`, `machine`: make TinyGo code usable with "big Go" CGo 57 * `machine`: implement `I2C.SetBaudRate` consistently across chips 58 * `machine`: implement `SPI.Configure` consistently across chips 59 * `machine`: add `DeviceID` for nrf, rp2040, sam, stm32 60 * `machine`: use smaller UART buffer size on atmega chips 61 * `machine/usb`: allow setting a serial number using a linker flag 62 * `math`: support more math functions on baremetal (picolibc) systems 63 * `net`: replace entire net package with a new one based on the netdev driver 64 * `os/user`: add bare-bones implementation of this package 65 * `reflect`: stub `CallSlice` and `FuncOf` 66 * `reflect`: add `TypeFor[T]` 67 * `reflect`: update `IsZero` to Go 1.22 semantics 68 * `reflect`: move indirect values into interface when setting interfaces 69 * `runtime`: stub `Breakpoint` 70 * `sync`: implement trylock 71 * **targets** 72 * `atmega`: use UART double speed mode for fewer errors and higher throughput 73 * `atmega328pb`: refactor to enable extra uart 74 * `avr`: don't compile large parts of picolibc (math, stdio) for LLVM 17 support 75 * `esp32`: switch over to the official SVD file 76 * `esp32c3`: implement USB_SERIAL for USBCDC communication 77 * `esp32c3`: implement I2C 78 * `esp32c3`: implement RNG 79 * `esp32c3`: add more ROM functions and update linker script for the in-progress wifi support 80 * `esp32c3`: update to newer SVD files 81 * `rp2040`: add support for UART hardware flow control 82 * `rp2040`: add definition for `machine.PinToggle` 83 * `rp2040`: set XOSC startup delay multiplier 84 * `samd21`: add support for UART hardware flow control 85 * `samd51`: add support for UART hardware flow control 86 * `wasm`: increase default stack size to 64k for wasi/wasm targets 87 * `wasm`: bump wasi-libc version to SDK 20 88 * `wasm`: remove line of dead code in wasm_exec.js 89 * **new targets/boards** 90 * `qtpy-esp32c3`: add Adafruit QT Py ESP32-C3 board 91 * `mksnanov3`: add support for the MKS Robin Nano V3.x 92 * `nrf52840-generic`: add generic nrf52840 chip support 93 * `thumby`: add support for Thumby 94 * `wasm`: add new `wasm-unknown` target that doesn't depend on WASI or a browser 95 * **boards** 96 * `arduino-mkrwifi1010`, `arduino-nano33`, `nano-rp2040`, `matrixportal-m4`, `metro-m4-airlift`, `pybadge`, `pyportal`: add `ninafw` build tag and some constants for BLE support 97 * `gopher-badge`: fix typo in USB product name 98 * `nano-rp2040`: add UART1 and correct mappings for NINA via UART 99 * `pico`: bump default stack size from 2kB to 8kB 100 * `wioterminal`: expose UART4 101 102 103 0.30.0 104 --- 105 106 * **general** 107 - add LLVM 16 support, use it by default 108 * **compiler** 109 - `build`: work around a race condition by building Go SSA serially 110 - `compiler`: fix a crash by not using the LLVM global context types 111 - `interp`: don't copy unknown values in `runtime.sliceCopy` to fix miscompile 112 - `interp`: fix crash in error report by not returning raw LLVM values 113 * **standard library** 114 - `machine/usb/adc/midi`: various improvements and API changes 115 - `reflect`: add support for `[...]T` → `[]T` in reflect 116 * **targets** 117 - `atsamd21`, `atsamd51`: add support for USB INTERRUPT OUT 118 - `rp2040`: always use the USB device enumeration fix, even in chips that supposedly have the HW fix 119 - `wasm`: increase default stack size to 32k for wasi/wasm 120 * **boards** 121 - `gobadge`: add GoBadge target as alias for PyBadge :) 122 - `gemma-m0`: add support for the Adafruit Gemma M0 123 124 125 0.29.0 126 --- 127 128 * **general** 129 - Go 1.21 support 130 - use https for renesas submodule #3856 131 - ci: rename release-double-zipped to something more useful 132 - ci: update Node.js from version 14 to version 16 133 - ci: switch GH actions builds to use Go 1.21 final release 134 - docker: update clang to version 15 135 - docker: use Go 1.21 for Docker dev container build 136 - `main`: add target JSON file in `tinygo info` output 137 - `main`: improve detection of filesystems 138 - `main`: use `go env` instead of doing all detection manually 139 - make: add make task to generate Renesas device wrappers 140 - make: add task to check NodeJS version before running tests 141 - add submodule for Renesas SVD file mirror repo 142 - update to go-serial package v1.6.0 143 - `testing`: add Testing function 144 - `tools/gen-device-svd`: small changes needed for Renesas MCUs 145 * **compiler** 146 - `builder`: update message for max supported Go version 147 - `compiler,reflect`: NumMethods reports exported methods only 148 - `compiler`: add compiler-rt and wasm symbols to table 149 - `compiler`: add compiler-rt to wasm.json 150 - `compiler`: add min and max builtin support 151 - `compiler`: implement clear builtin for maps 152 - `compiler`: implement clear builtin for slices 153 - `compiler`: improve panic message when a runtime call is unavailable 154 - `compiler`: update .ll test output 155 - `loader`: merge go.env file which is now required starting in Go 1.21 to correctly get required packages 156 * **standard library** 157 - `os`: define ErrNoDeadline 158 - `reflect`: Add FieldByNameFunc 159 - `reflect`: add SetZero 160 - `reflect`: fix iterating over maps with interface{} keys 161 - `reflect`: implement Value.Grow 162 - `reflect`: remove unecessary heap allocations 163 - `reflect`: use .key() instead of a type assert 164 - `sync`: add implementation from upstream Go for OnceFunc, OnceValue, and OnceValues 165 * **targets** 166 - `machine`: UART refactor (#3832) 167 - `machine/avr`: pin change interrupt 168 - `machine/macropad_rp2040`: add machine.BUTTON 169 - `machine/nrf`: add I2C timeout 170 - `machine/nrf`: wait for stop condition after reading from the I2C bus 171 - `machine/nRF52`: set SPI TX/RX lengths even data is empty. Fixes #3868 (#3877) 172 - `machine/rp2040`: add missing suffix to CMD_READ_STATUS 173 - `machine/rp2040`: add NoPin support 174 - `machine/rp2040`: move flash related functions into separate file from C imports for correct - LSP. Fixes #3852 175 - `machine/rp2040`: wait for 1000 us after flash reset to avoid issues with busy USB bus 176 - `machine/samd51,rp2040,nrf528xx,stm32`: implement watchdog 177 - `machine/samd51`: fix i2cTimeout was decreasing due to cache activation 178 - `machine/usb`: Add support for HID Keyboard LEDs 179 - `machine/usb`: allow USB Endpoint settings to be changed externally 180 - `machine/usb`: refactor endpoint configuration 181 - `machine/usb`: remove usbDescriptorConfig 182 - `machine/usb/hid,joystick`: fix hidreport (3) (#3802) 183 - `machine/usb/hid`: add RxHandler interface 184 - `machine/usb/hid`: rename Handler() to TxHandler() 185 - `wasi`: allow zero inodes when reading directories 186 - `wasm`: add support for GOOS=wasip1 187 - `wasm`: fix functions exported through //export 188 - `wasm`: remove i64 workaround, use BigInt instead 189 - `example`: adjust time offset 190 - `example`: simplify pininterrupt 191 * **boards** 192 - `targets`: add AKIZUKI DENSHI AE-RP2040 193 - `targets`: adding new uf2 target for PCA10056 (#3765) 194 195 196 0.28.0 197 --- 198 199 * **general** 200 - fix parallelism in the compiler on Windows by building LLVM with thread support 201 - support qemu-user debugging 202 - make target JSON msd-volume-name an array 203 - print source location when a panic happens in -monitor 204 - `test`: don't print `ok` for a successful compile-only 205 * **compiler** 206 - `builder`: remove non-ThinLTO build mode 207 - `builder`: fail earlier if Go is not available 208 - `builder`: improve `-size=full` in a number of ways 209 - `builder`: implement Nordic DFU file writer in Go 210 - `cgo`: allow `LDFLAGS: --export=...` 211 - `compiler`: support recursive slice types 212 - `compiler`: zero struct padding during map operations 213 - `compiler`: add llvm.ident metadata 214 - `compiler`: remove `unsafe.Pointer(uintptr(v) + idx)` optimization (use `unsafe.Add` instead) 215 - `compiler`: add debug info to `//go:embed` data structures for better `-size` output 216 - `compiler`: add debug info to string constants 217 - `compiler`: fix a minor race condition 218 - `compiler`: emit correct alignment in debug info for global variables 219 - `compiler`: correctly generate reflect data for local named types 220 - `compiler`: add alloc attributes to `runtime.alloc`, reducing flash usage slightly 221 - `compiler`: for interface maps, use the original named type if available 222 - `compiler`: implement most math/bits functions as LLVM intrinsics 223 - `compiler`: ensure all defers have been seen before creating rundefers 224 * **standard library** 225 - `internal/task`: disallow blocking inside an interrupt 226 - `machine`: add `CPUReset` 227 - `machine/usb/hid`: add MediaKey support 228 - `machine/usb/hid/joystick`: move joystick under HID 229 - `machine/usb/hid/joystick`: allow joystick settings override 230 - `machine/usb/hid/joystick`: handle case where we cannot find the correct HID descriptor 231 - `machine/usb/hid/mouse`: add support for mouse back and forward 232 - `machine/usb`: add ability to override default VID, PID, manufacturer name, and product name 233 - `net`: added missing `TCPAddr` and `UDPAddr` implementations 234 - `os`: add IsTimeout function 235 - `os`: fix resource leak in `(*File).Close` 236 - `os`: add `(*File).Sync` 237 - `os`: implement `(*File).ReadDir` for wasi 238 - `os`: implement `(*File).WriteAt` 239 - `reflect`: make sure null bytes are supported in tags 240 - `reflect`: refactor this package to enable many new features 241 - `reflect`: add map type methods: `Elem` and `Key` 242 - `reflect`: add map methods: `MapIndex`, `MapRange`/`MapIter`, `SetMapIndex`, `MakeMap`, `MapKeys` 243 - `reflect`: add slice methods: `Append`, `MakeSlice`, `Slice`, `Slice3`, `Copy`, `Bytes`, `SetLen` 244 - `reflect`: add misc methods: `Zero`, `Addr`, `UnsafeAddr`, `OverflowFloat`, `OverflowInt`, `OverflowUint`, `SetBytes`, `Convert`, `CanInt`, `CanFloat`, `CanComplex`, `Comparable` 245 - `reflect`: add type methods: `String`, `PkgPath`, `FieldByName`, `FieldByIndex`, `NumMethod` 246 - `reflect`: add stubs for `Type.Method`, `CanConvert`, `ArrayOf`, `StructOf`, `MapOf` 247 - `reflect`: add stubs for channel select routines/types 248 - `reflect`: allow nil rawType to call Kind() 249 - `reflect`: ensure all ValueError panics have Kind fields 250 - `reflect`: add support for named types 251 - `reflect`: improve `Value.String()` 252 - `reflect`: set `Index` and `PkgPath` field in `Type.Field` 253 - `reflect`: `Type.AssignableTo`: you can assign anything to `interface{}` 254 - `reflect`: add type check to `Value.Field` 255 - `reflect`: let `TypeOf(nil)` return nil 256 - `reflect`: move `StructField.Anonymous` field to match upstream location 257 - `reflect`: add `UnsafePointer` for Func types 258 - `reflect`: `MapIter.Next` needs to allocate new keys/values every time 259 - `reflect`: fix `IsNil` for interfaces 260 - `reflect`: fix `Type.Name` to return an empty string for non-named types 261 - `reflect`: add `VisibleFields` 262 - `reflect`: properly handle embedded structs 263 - `reflect`: make sure `PointerTo` works for named types 264 - `reflect`: `Set`: convert non-interface to interface 265 - `reflect`: `Set`: fix direction of assignment check 266 - `reflect`: support channel directions 267 - `reflect`: print struct tags in Type.String() 268 - `reflect`: properly handle read-only values 269 - `runtime`: allow custom-gc SetFinalizer and clarify KeepAlive 270 - `runtime`: implement KeepAlive using inline assembly 271 - `runtime`: check for heap allocations inside interrupts 272 - `runtime`: properly turn pointer into empty interface when hashing 273 - `runtime`: improve map size hint usage 274 - `runtime`: zero map key/value on deletion to so GC doesn't see them 275 - `runtime`: print the address where a panic happened 276 - `runtime/debug`: stub `SetGCPercent`, `BuildInfo.Settings` 277 - `runtime/metrics`: add this package as a stub 278 - `syscall`: `Stat_t` timespec fields are Atimespec on darwin 279 - `syscall`: add `Timespec.Unix()` for wasi 280 - `syscall`: add fsync using libc 281 - `testing`: support -test.count 282 - `testing`: make test output unbuffered when verbose 283 - `testing`: add -test.skip 284 - `testing`: move runtime.GC() call to runN to match upstream 285 - `testing`: add -test.shuffle to order randomize test and benchmark order 286 * **targets** 287 - `arm64`: fix register save/restore to include vector registers 288 - `attiny1616`: add support for this chip 289 - `cortexm`: refactor EnableInterrupts and DisableInterrupts to avoid `arm.AsmFull` 290 - `cortexm`: enable functions in RAM for go & cgo 291 - `cortexm`: convert SystemStack from `AsmFull` to C inline assembly 292 - `cortexm`: fix crash due to wrong stack size offset 293 - `nrf`: samd21, stm32: add flash API 294 - `nrf`: fix memory issue in ADC read 295 - `nrf`: new peripheral type for nrf528xx chips 296 - `nrf`: implement target mode 297 - `nrf`: improve ADC and add oversampling, longer sample time, and reference voltage 298 - `rp2040`: change calling order for device enumeration fix to do first 299 - `rp2040`: rtc delayed interrupt 300 - `rp2040`: provide better errors for invalid pins on I2C and SPI 301 - `rp2040`: change uart to allow for a single pin 302 - `rp2040`: implement Flash interface 303 - `rp2040`: remove SPI `DataBits` property 304 - `rp2040`: unify all linker scripts using LDFLAGS 305 - `rp2040`: remove SPI deadline for improved performance 306 - `rp2040`: use 4MHz as default frequency for SPI 307 - `rp2040`: implement target mode 308 - `rp2040`: use DMA for send-only SPI transfers 309 - `samd21`: rearrange switch case for get pin cfg 310 - `samd21`: fix issue with WS2812 driver by making pin accesses faster 311 - `samd51`: enable CMCC cache for greatly improved performance 312 - `samd51`: remove extra BK0RDY clear 313 - `samd51`: implement Flash interface 314 - `samd51`: use correct SPI frequency 315 - `samd51`: remove extra BK0RDY clear 316 - `samd51`: fix ADC multisampling 317 - `wasi`: allow users to set the `runtime_memhash_tsip` or `runtime_memhash_fnv` build tags 318 - `wasi`: set `WASMTIME_BACKTRACE_DETAILS` when running in wasmtime. 319 - `wasm`: implement the `//go:wasmimport` directive 320 * **boards** 321 - `gameboy-advance`: switch to use register definitions in device/gba 322 - `gameboy-advance`: rename display and make pointer receivers 323 - `gopher-badge`: Added Gopher Badge support 324 - `lorae5`: add needed definition for UART2 325 - `lorae5`: correct mapping for I2C bus, add pin mapping to enable power 326 - `pinetime`: update the target file (rename from pinetime-devkit0) 327 - `qtpy`: fix bad pin assignment 328 - `wioterminal`: fix pin definition of BCM13 329 - `xiao`: Pins D4 & D5 are I2C1. Use pins D2 & D3 for I2C0. 330 - `xiao`: add DefaultUART 331 332 333 0.27.0 334 --- 335 336 * **general** 337 - all: update musl 338 - all: remove "acm:"` prefix for USB vid/pid pair 339 - all: add support for LLVM 15 340 - all: use DWARF version 4 341 - all: add initial (incomplete) support for Go 1.20 342 - all: add `-gc=custom` option 343 - `main`: print ldflags including ThinLTO flags with -x 344 - `main`: fix error message when a serial port can't be accessed 345 - `main`: add `-timeout` flag to allow setting how long TinyGo will try looking for a MSD volume for flashing 346 - `test`: print PASS on pass when running standalone test binaries 347 - `test`: fix printing of benchmark output 348 - `test`: print package name when compilation failed (not just when the test failed) 349 * **compiler** 350 - refactor to support LLVM 15 351 - `builder`: print compiler commands while building a library 352 - `compiler`: fix stack overflow when creating recursive pointer types (fix for LLVM 15+ only) 353 - `compiler`: allow map keys and values of ≥256 bytes 354 - `cgo`: add support for `C.float` and `C.double` 355 - `cgo`: support anonymous enums included in multiple Go files 356 - `cgo`: add support for bitwise operators 357 - `interp`: add support for constant icmp instructions 358 - `transform`: fix memory corruption issues 359 * **standard library** 360 - `machine/usb`: remove allocs in USB ISR 361 - `machine/usb`: add `Port()` and deprecate `New()` to have the API better match the singleton that is actually being returned 362 - `machine/usb`: change HID usage-maximum to 0xFF 363 - `machine/usb`: add USB HID joystick support 364 - `machine/usb`: change to not send before endpoint initialization 365 - `net`: implement `Pipe` 366 - `os`: add stub for `os.Chtimes` 367 - `reflect`: stub out `Type.FieldByIndex` 368 - `reflect`: add `Value.IsZero` method 369 - `reflect`: fix bug in `.Field` method when the field fits in a pointer but the parent doesn't 370 - `runtime`: switch some `panic()` calls in the gc to `runtimePanic()` for consistency 371 - `runtime`: add xorshift-based fastrand64 372 - `runtime`: fix alignment for arm64, arm, xtensa, riscv 373 - `runtime`: implement precise GC 374 - `runtime/debug`: stub `PrintStack` 375 - `sync`: implement simple pooling in `sync.Pool` 376 - `syscall`: stubbed `Setuid`, Exec and friends 377 - `syscall`: add more stubs as needed for Go 1.20 support 378 - `testing`: implement `t.Setenv` 379 - `unsafe`: add support for Go 1.20 slice/string functions 380 * **targets** 381 - `all`: do not set stack size per board 382 - `all`: update picolibc to v1.7.9 383 - `atsame5x`: fix CAN extendedID handling 384 - `atsame5x`: reduce heap allocation 385 - `avr`: drop GNU toolchain dependency 386 - `avr`: fix .data initialization for binaries over 64kB 387 - `avr`: support ThinLTO 388 - `baremetal`: implements calloc 389 - `darwin`: fix `syscall.Open` on darwin/arm64 390 - `darwin`: fix error with `tinygo lldb` 391 - `esp`: use LLVM Xtensa linker instead of Espressif toolchain 392 - `esp`: use ThinLTO for Xtensa 393 - `esp32c3`: add SPI support 394 - `linux`: include musl `getpagesize` function in release 395 - `nrf51`: add ADC implementation 396 - `nrf52840`: add PDM support 397 - `riscv`: add "target-abi" metadata flag 398 - `rp2040`: remove mem allocation in GPIO ISR 399 - `rp2040`: avoid allocating clock on heap 400 - `rp2040`: add basic GPIO support for PIO 401 - `rp2040`: fix USB interrupt issue 402 - `rp2040`: fix RP2040-E5 USB errata 403 - `stm32`: always set ADC pins to pullups floating 404 - `stm32f1`, `stm32f4`: fix ADC by clearing the correct bit for rank after each read 405 - `stm32wl`: Fix incomplete RNG initialisation 406 - `stm32wlx`: change order for init so clock speeds are set before peripheral start 407 - `wasi`: makes wasmtime "run" explicit 408 - `wasm`: fix GC scanning of allocas 409 - `wasm`: allow custom malloc implementation 410 - `wasm`: remove `-wasm-abi=` flag (use `-target` instead) 411 - `wasm`: fix scanning of the stack 412 - `wasm`: fix panic when allocating 0 bytes using malloc 413 - `wasm`: always run wasm-opt even with `-scheduler=none` 414 - `wasm`: avoid miscompile with ThinLTO 415 - `wasm`: allow the emulator to expand `{tmpDir}` 416 - `wasm`: support ThinLTO 417 - `windows`: update mingw-w64 version to avoid linker warning 418 - `windows`: add ARM64 support 419 * **boards** 420 - Add Waveshare RP2040 Zero 421 - Add Arduino Leonardo support 422 - Add Adafruit KB2040 423 - Add Adafruit Feather M0 Express 424 - Add Makerfabs ESP32C3SPI35 TFT Touchscreen board 425 - Add Espressif ESP32-C3-DevKit-RUST-1 board 426 - `lgt92`: fix OpenOCD configuration 427 - `xiao-rp2040`: fix D9 and D10 constants 428 - `xiao-rp2040`: add pin definitions 429 430 0.26.0 431 --- 432 433 * **general** 434 - remove support for LLVM 13 435 - remove calls to deprecated ioutil package 436 - move from `os.IsFoo` to `errors.Is(err, ErrFoo)` 437 - fix for builds using an Android host 438 - make interp timeout configurable from command line 439 - ignore ports with VID/PID if there is no candidates 440 - drop support for Go 1.16 and Go 1.17 441 - update serial package to v1.3.5 for latest bugfixes 442 - remove GOARM from `tinygo info` 443 - add flag for setting the goroutine stack size 444 - add serial port monitoring functionality 445 * **compiler** 446 - `cgo`: implement support for static functions 447 - `cgo`: fix panic when FuncType.Results is nil 448 - `compiler`: add aliases for `edwards25519/field.feMul` and `field.feSquare` 449 - `compiler`: fix incorrect DWARF type in some generic parameters 450 - `compiler`: use LLVM math builtins everywhere 451 - `compiler`: replace some math operation bodies with LLVM intrinsics 452 - `compiler`: replace math aliases with intrinsics 453 - `compiler`: fix `unsafe.Sizeof` for chan and map values 454 - `compileopts`: use tags parser from buildutil 455 - `compileopts`: use backticks for regexp to avoid extra escapes 456 - `compileopts`: fail fast on duplicate values in target field slices 457 - `compileopts`: fix windows/arm target triple 458 - `compileopts`: improve error handling when loading target/*.json 459 - `compileopts`: add support for stlink-dap programmer 460 - `compileopts`: do not complain about `-no-debug` on MacOS 461 - `goenv`: support `GOOS=android` 462 - `interp`: fix reading from external global 463 - `loader`: fix link error for `crypto/internal/boring/sig.StandardCrypto` 464 * **standard library** 465 - rename assembly files to .S extension 466 - `machine`: add PWM peripheral comments to pins 467 - `machine`: improve UARTParity slightly 468 - `machine`: do not export DFU_MAGIC_* constants on nrf52840 469 - `machine`: rename `PinInputPullUp`/`PinInputPullDown` 470 - `machine`: add `KHz`, `MHz`, `GHz` constants, deprecate `TWI_FREQ_*` constants 471 - `machine`: remove level triggered pin interrupts 472 - `machine`: do not expose `RESET_MAGIC_VALUE` 473 - `machine`: use `NoPin` constant where appropriate (instead of `0` for example) 474 - `net`: sync net.go with Go 1.18 stdlib 475 - `os`: add `SyscallError.Timeout` 476 - `os`: add `ErrProcessDone` error 477 - `reflect`: implement `CanInterface` and fix string `Index` 478 - `runtime`: make `MemStats` available to leaking collector 479 - `runtime`: add `MemStats.TotalAlloc` 480 - `runtime`: add `MemStats.Mallocs` and `Frees` 481 - `runtime`: add support for `time.NewTimer` and `time.NewTicker` 482 - `runtime`: implement `resetTimer` 483 - `runtime`: ensure some headroom for the GC to run 484 - `runtime`: make gc and scheduler asserts settable with build tags 485 - `runtime/pprof`: add `WriteHeapProfile` 486 - `runtime/pprof`: `runtime/trace`: stub some additional functions 487 - `sync`: implement `Map.LoadAndDelete` 488 - `syscall`: group WASI consts by purpose 489 - `syscall`: add WASI `{D,R}SYNC`, `NONBLOCK` FD flags 490 - `syscall`: add ENOTCONN on darwin 491 - `testing`: add support for -benchmem 492 * **targets** 493 - remove USB vid/pid pair of bootloader 494 - `esp32c3`: remove unused `UARTStopBits` constants 495 - `nrf`: implement `GetRNG` function 496 - `nrf`: `rp2040`: add `machine.ReadTemperature` 497 - `nrf52`: cleanup s140v6 and s140v7 uf2 targets 498 - `rp2040`: implement semi-random RNG based on ROSC based on pico-sdk 499 - `wasm`: add summary of wasm examples and fix callback bug 500 - `wasm`: do not allow undefined symbols (`--allow-undefined`) 501 - `wasm`: make sure buffers returned by `malloc` are kept until `free` is called 502 - `windows`: save and restore xmm registers when switching goroutines 503 * **boards** 504 - add Pimoroni's Tufty2040 505 - add XIAO ESP32C3 506 - add Adafruit QT2040 507 - add Adafruit QT Py RP2040 508 - `esp32c3-12f`: `matrixportal-m4`: `p1am-100`: remove duplicate build tags 509 - `hifive1-qemu`: remove this emulated board 510 - `wioterminal`: add UART3 for RTL8720DN 511 - `xiao-ble`: fix usbpid 512 513 514 0.25.0 515 --- 516 517 * **command line** 518 - change to ignore PortReset failures 519 * **compiler** 520 - `compiler`: darwin/arm64 is aarch64, not arm 521 - `compiler`: don't clobber X18 and FP registers on darwin/arm64 522 - `compiler`: fix issue with methods on generic structs 523 - `compiler`: do not try to build generic functions 524 - `compiler`: fix type names for generic named structs 525 - `compiler`: fix multiple defined function issue for generic functions 526 - `compiler`: implement `unsafe.Alignof` and `unsafe.Sizeof` for generic code 527 * **standard library** 528 - `machine`: add DTR and RTS to Serialer interface 529 - `machine`: reorder pin definitions to improve pin list on tinygo.org 530 - `machine/usb`: add support for MIDI 531 - `machine/usb`: adjust buffer alignment (samd21, samd51, nrf52840) 532 - `machine/usb/midi`: add `NoteOn`, `NoteOff`, and `SendCC` methods 533 - `machine/usb/midi`: add definition of MIDI note number 534 - `runtime`: add benchmarks for memhash 535 - `runtime`: add support for printing slices via print/println 536 * **targets** 537 - `avr`: fix some apparent mistake in atmega1280/atmega2560 pin constants 538 - `esp32`: provide hardware pin constants 539 - `esp32`: fix WDT reset on the MCH2022 badge 540 - `esp32`: optimize SPI transmit 541 - `esp32c3`: provide hardware pin constants 542 - `esp8266`: provide hardware pin constants like `GPIO2` 543 - `nrf51`: define and use `P0_xx` constants 544 - `nrf52840`, `samd21`, `samd51`: unify bootloader entry process 545 - `nrf52840`, `samd21`, `samd51`: change usbSetup and sendZlp to public 546 - `nrf52840`, `samd21`, `samd51`: refactor handleStandardSetup and initEndpoint 547 - `nrf52840`, `samd21`, `samd51`: improve usb-device initialization 548 - `nrf52840`, `samd21`, `samd51`: move usbcdc to machine/usb/cdc 549 - `rp2040`: add usb serial vendor/product ID 550 - `rp2040`: add support for usb 551 - `rp2040`: change default for serial to usb 552 - `rp2040`: add support for `machine.EnterBootloader` 553 - `rp2040`: turn off pullup/down when input type is not specified 554 - `rp2040`: make picoprobe default openocd interface 555 - `samd51`: add support for `DAC1` 556 - `samd51`: improve TRNG 557 - `wasm`: stub `runtime.buffered`, `runtime.getchar` 558 - `wasi`: make leveldb runtime hash the default 559 * **boards** 560 - add Challenger RP2040 LoRa 561 - add MCH2022 badge 562 - add XIAO RP2040 563 - `clue`: remove pins `D21`..`D28` 564 - `feather-rp2040`, `macropad-rp2040`: fix qspi-flash settings 565 - `xiao-ble`: add support for flash-1200-bps-reset 566 - `gopherbot`, `gopherbot2`: add these aliases to simplify for newer users 567 568 569 0.24.0 570 --- 571 572 * **command line** 573 - remove support for go 1.15 574 - remove support for LLVM 11 and LLVM 12 575 - add initial Go 1.19 beta support 576 - `test`: fix package/... syntax 577 * **compiler** 578 - add support for the embed package 579 - `builder`: improve error message for "command not found" 580 - `builder`: add support for ThinLTO on MacOS and Windows 581 - `builder`: free LLVM objects after use, to reduce memory leaking 582 - `builder`: improve `-no-debug` error messages 583 - `cgo`: be more strict: CGo now requires every Go file to import the headers it needs 584 - `compiler`: alignof(func) is 1 pointer, not 2 585 - `compiler`: add support for type parameters (aka generics) 586 - `compiler`: implement `recover()` built-in function 587 - `compiler`: support atomic, volatile, and LLVM memcpy-like functions in defer 588 - `compiler`: drop support for macos syscalls via inline assembly 589 - `interp`: do not try to interpret past task.Pause() 590 - `interp`: fix some buggy localValue handling 591 - `interp`: do not unroll loops 592 - `transform`: fix MakeGCStackSlots that caused a possible GC bug on WebAssembly 593 * **standard library** 594 - `os`: enable os.Stdin for baremetal target 595 - `reflect`: add `Value.UnsafePointer` method 596 - `runtime`: scan GC globals conservatively on Windows, MacOS, Linux and Nintendo Switch 597 - `runtime`: add per-map hash seeds 598 - `runtime`: handle nil map write panics 599 - `runtime`: add stronger hash functions 600 - `syscall`: implement `Getpagesize` 601 * **targets** 602 - `atmega2560`: support UART1-3 + example for uart 603 - `avr`: use compiler-rt for improved float64 support 604 - `avr`: simplify timer-based time 605 - `avr`: fix race condition in stack write 606 - `darwin`: add support for `GOARCH=arm64` (aka Apple Silicon) 607 - `darwin`: support `-size=short` and `-size=full` flag 608 - `rp2040`: replace sleep 'busy loop' with timer alarm 609 - `rp2040`: align api for `PortMaskSet`, `PortMaskClear` 610 - `rp2040`: fix GPIO interrupts 611 - `samd21`, `samd51`, `nrf52840`: add support for USBHID (keyboard / mouse) 612 - `wasm`: update wasi-libc version 613 - `wasm`: use newer WebAssembly features 614 * **boards** 615 - add Badger 2040 616 - `matrixportal-m4`: attach USB DP to the correct pin 617 - `teensy40`: add I2C support 618 - `wioterminal`: fix I2C definition 619 620 621 0.23.0 622 --- 623 624 * **command line** 625 - add `-work` flag 626 - add Go 1.18 support 627 - add LLVM 14 support 628 - `run`: add support for command-line parameters 629 - `build`: calculate default output path if `-o` is not specified 630 - `build`: add JSON output 631 - `test`: support multiple test binaries with `-c` 632 - `test`: support flags like `-v` on all targets (including emulated firmware) 633 * **compiler** 634 - add support for ThinLTO 635 - use compiler-rt from LLVM 636 - `builder`: prefer GNU build ID over Go build ID for caching 637 - `builder`: add support for cross compiling to Darwin 638 - `builder`: support machine outlining pass in stacksize calculation 639 - `builder`: disable asynchronous unwind tables 640 - `compileopts`: fix emulator configuration on non-amd64 Linux architectures 641 - `compiler`: move allocations > 256 bytes to the heap 642 - `compiler`: fix incorrect `unsafe.Alignof` on some 32-bit architectures 643 - `compiler`: accept alias for slice `cap` builtin 644 - `compiler`: allow slices of empty structs 645 - `compiler`: fix difference in aliases in interface methods 646 - `compiler`: make `RawSyscall` an alias for `Syscall` 647 - `compiler`: remove support for memory references in `AsmFull` 648 - `loader`: only add Clang header path for CGo 649 - `transform`: fix poison value in heap-to-stack transform 650 * **standard library** 651 - `internal/fuzz`: add this package as a shim 652 - `os`: implement readdir for darwin and linux 653 - `os`: add `DirFS`, which is used by many programs to access readdir. 654 - `os`: isWine: be compatible with older versions of wine, too 655 - `os`: implement `RemoveAll` 656 - `os`: Use a `uintptr` for `NewFile` 657 - `os`: add stubs for `exec.ExitError` and `ProcessState.ExitCode` 658 - `os`: export correct values for `DevNull` for each OS 659 - `os`: improve support for `Signal` by fixing various bugs 660 - `os`: implement `File.Fd` method 661 - `os`: implement `UserHomeDir` 662 - `os`: add `exec.ProcessState` stub 663 - `os`: implement `Pipe` for darwin 664 - `os`: define stub `ErrDeadlineExceeded` 665 - `reflect`: add stubs for more missing methods 666 - `reflect`: rename `reflect.Ptr` to `reflect.Pointer` 667 - `reflect`: add `Value.FieldByIndexErr` stub 668 - `runtime`: fix various small GC bugs 669 - `runtime`: use memzero for leaking collector instead of manually zeroing objects 670 - `runtime`: implement `memhash` 671 - `runtime`: implement `fastrand` 672 - `runtime`: add stub for `debug.ReadBuildInfo` 673 - `runtime`: add stub for `NumCPU` 674 - `runtime`: don't inline `runtime.alloc` with `-gc=leaking` 675 - `runtime`: add `Version` 676 - `runtime`: add stubs for `NumCgoCall` and `NumGoroutine` 677 - `runtime`: stub {Lock,Unlock}OSThread on Windows 678 - `runtime`: be able to deal with a very small heap 679 - `syscall`: make `Environ` return a copy of the environment 680 - `syscall`: implement getpagesize and munmap 681 - `syscall`: `wasi`: define `MAP_SHARED` and `PROT_READ` 682 - `syscall`: stub mmap(), munmap(), MAP_SHARED, PROT_READ, SIGBUS, etc. on nonhosted targets 683 - `syscall`: darwin: more complete list of signals 684 - `syscall`: `wasi`: more complete list of signals 685 - `syscall`: stub `WaitStatus` 686 - `syscall/js`: allow copyBytesTo(Go|JS) to use `Uint8ClampedArray` 687 - `testing`: implement `TempDir` 688 - `testing`: nudge type TB closer to upstream; should be a no-op change. 689 - `testing`: on baremetal platforms, use simpler test matcher 690 * **targets** 691 - `atsamd`: fix usbcdc initialization when `-serial=uart` 692 - `atsamd51`: allow higher frequency when using SPI 693 - `esp`: support CGo 694 - `esp32c3`: add support for input pin 695 - `esp32c3`: add support for GPIO interrupts 696 - `esp32c3`: add support to receive UART data 697 - `rp2040`: fix PWM bug at high frequency 698 - `rp2040`: fix some minor I2C bugs 699 - `rp2040`: fix incorrect inline assembly 700 - `rp2040`: fix spurious i2c STOP during write+read transaction 701 - `rp2040`: improve ADC support 702 - `wasi`: remove `--export-dynamic` linker flag 703 - `wasm`: remove heap allocator from wasi-libc 704 * **boards** 705 - `circuitplay-bluefruit`: move pin mappings so board can be compiled for WASM use in Playground 706 - `esp32-c3-12f`: add the ESP32-C3-12f Kit 707 - `m5stamp-c3`: add pin setting of UART 708 - `macropad-rp2040`: add the Adafruit MacroPad RP2040 board 709 - `nano-33-ble`: typo in LPS22HB peripheral definition and documentation (#2579) 710 - `teensy41`: add the Teensy 4.1 board 711 - `teensy40`: add ADC support 712 - `teensy40`: add SPI support 713 - `thingplus-rp2040`: add the SparkFun Thing Plus RP2040 board 714 - `wioterminal`: add DefaultUART 715 - `wioterminal`: verify written data when flashing through OpenOCD 716 - `xiao-ble`: add XIAO BLE nRF52840 support 717 718 719 0.22.0 720 --- 721 722 * **command line** 723 - add asyncify to scheduler flag help 724 - support -run for tests 725 - remove FreeBSD target support 726 - add LLVM 12 and LLVM 13 support, use LLVM 13 by default 727 - add support for ARM64 MacOS 728 - improve help 729 - check /run/media as well as /media on Linux for non-debian-based distros 730 - `test`: set cmd.Dir even when running emulators 731 - `info`: add JSON output using the `-json` flag 732 * **compiler** 733 - `builder`: fix off-by-one in size calculation 734 - `builder`: handle concurrent library header rename 735 - `builder`: use flock to avoid double-compiles 736 - `builder`: use build ID as cache key 737 - `builder`: add -fno-stack-protector to musl build 738 - `builder`: update clang header search path to look in /usr/lib 739 - `builder`: explicitly disable unwind tables for ARM 740 - `cgo`: add support for `C.CString` and related functions 741 - `compiler`: fix ranging over maps with particular map types 742 - `compiler`: add correct debug location to init instructions 743 - `compiler`: fix emission of large object layouts 744 - `compiler`: work around AVR atomics bugs 745 - `compiler`: predeclare runtime.trackPointer 746 - `interp`: work around AVR function pointers in globals 747 - `interp`: run goroutine starts and checks at runtime 748 - `interp`: always run atomic and volatile loads/stores at runtime 749 - `interp`: bump timeout to 180 seconds 750 - `interp`: handle type assertions on nil interfaces 751 - `loader`: eliminate goroot cache inconsistency 752 - `loader`: respect $GOROOT when running `go list` 753 - `transform`: allocate the correct amount of bytes in an alloca 754 - `transform`: remove switched func lowering 755 * **standard library** 756 - `crypto/rand`: show error if platform has no rng 757 - `device/*`: add `*_Msk` field for each bit field and avoid duplicates 758 - `device/*`: provide Set/Get for each register field described in the SVD files 759 - `internal/task`: swap stack chain when switching goroutines 760 - `internal/task`: remove `-scheduler=coroutines` 761 - `machine`: add `Device` string constant 762 - `net`: add bare Interface implementation 763 - `net`: add net.Buffers 764 - `os`: stub out support for some features 765 - `os`: obey TMPDIR on unix, TMP on Windows, etc 766 - `os`: implement `ReadAt`, `Mkdir`, `Remove`, `Stat`, `Lstat`, `CreateTemp`, `MkdirAll`, `Chdir`, `Chmod`, `Clearenv`, `Unsetenv`, `Setenv`, `MkdirTemp`, `Rename`, `Seek`, `ExpandEnv`, `Symlink`, `Readlink` 767 - `os`: implement `File.Stat` 768 - `os`: fix `IsNotExist` on nonexistent path 769 - `os`: fix opening files on WASI in read-only mode 770 - `os`: work around lack of `syscall.seek` on 386 and arm 771 - `reflect`: make sure indirect pointers are handled correctly 772 - `runtime`: allow comparing interfaces 773 - `runtime`: use LLVM intrinsic to read the stack pointer 774 - `runtime`: strengthen hashmap hash function for structs and arrays 775 - `runtime`: fix float/complex hashing 776 - `runtime`: fix nil map dereference 777 - `runtime`: add realloc implementation to GCs 778 - `runtime`: handle negative sleep times 779 - `runtime`: correct GC scan bounds 780 - `runtime`: remove extalloc GC 781 - `rumtime`: implement `__sync` libcalls as critical sections for most microcontrollers 782 - `runtime`: add stubs for `Func.FileLine` and `Frame.PC` 783 - `sync`: fix concurrent read-lock on write-locked RWMutex 784 - `sync`: add a package doc 785 - `sync`: add tests 786 - `syscall`: add support for `Mmap` and `Mprotect` 787 - `syscall`: fix array size for mmap slice creation 788 - `syscall`: enable `Getwd` in wasi 789 - `testing`: add a stub for `CoverMode` 790 - `testing`: support -bench option to run benchmarks matching the given pattern. 791 - `testing`: support b.SetBytes(); implement sub-benchmarks. 792 - `testing`: replace spaces with underscores in test/benchmark names, as upstream does 793 - `testing`: implement testing.Cleanup 794 - `testing`: allow filtering subbenchmarks with the `-bench` flag 795 - `testing`: implement `-benchtime` flag 796 - `testing`: print duration 797 - `testing`: allow filtering of subtests using `-run` 798 * **targets** 799 - `all`: change LLVM features to match vanilla Clang 800 - `avr`: use interrupt-based timer which is much more accurate 801 - `nrf`: fix races in I2C 802 - `samd51`: implement TRNG for randomness 803 - `stm32`: pull-up on I2C lines 804 - `stm32`: fix timeout for i2c comms 805 - `stm32f4`, `stm32f103`: initial implementation for ADC 806 - `stm32f4`, `stm32f7`, `stm32l0x2`, `stm32l4`, `stm32l5`, `stm32wl`: TRNG implementation in crypto/rand 807 - `stm32wl`: add I2C support 808 - `windows`: add support for the `-size=` flag 809 - `wasm`: add support for `tinygo test` 810 - `wasi`, `wasm`: raise default stack size to 16 KiB 811 * **boards** 812 - add M5Stack 813 - add lorae5 (stm32wle) support 814 - add Generic Node Sensor Edition 815 - add STM32F469 Discovery 816 - add M5Stamp C3 817 - add Blues Wireless Swan 818 - `bluepill`: add definitions for ADC pins 819 - `stm32f4disco`: add definitions for ADC pins 820 - `stm32l552ze`: use supported stlink interface 821 - `microbit-v2`: add some pin definitions 822 823 824 0.21.0 825 --- 826 827 * **command line** 828 - drop support for LLVM 10 829 - `build`: drop support for LLVM targets in the -target flag 830 - `build`: fix paths in error messages on Windows 831 - `build`: add -p flag to set parallelism 832 - `lldb`: implement `tinygo lldb` subcommand 833 - `test`: use emulator exit code instead of parsing test output 834 - `test`: pass testing arguments to wasmtime 835 * **compiler** 836 - use -opt flag for optimization level in CFlags (-Os, etc) 837 - `builder`: improve accuracy of the -size=full flag 838 - `builder`: hardcode some more frame sizes for __aeabi_* functions 839 - `builder`: add support for -size= flag for WebAssembly 840 - `cgo`: fix line/column reporting in syntax error messages 841 - `cgo`: support function definitions in CGo headers 842 - `cgo`: implement rudimentary C array decaying 843 - `cgo`: add support for stdio in picolibc and wasi-libc 844 - `cgo`: run CGo parser per file, not per CGo fragment 845 - `compiler`: fix unintentionally exported math functions 846 - `compiler`: properly implement div and rem operations 847 - `compiler`: add support for recursive function types 848 - `compiler`: add support for the `go` keyword on interface methods 849 - `compiler`: add minsize attribute for -Oz 850 - `compiler`: add "target-cpu" and "target-features" attributes 851 - `compiler`: fix indices into strings and arrays 852 - `compiler`: fix string compare functions 853 - `interp`: simplify some code to avoid some errors 854 - `interp`: support recursive globals (like linked lists) in globals 855 - `interp`: support constant globals 856 - `interp`: fix reverting of extractvalue/insertvalue with multiple indices 857 - `transform`: work around renamed return type after merging LLVM modules 858 * **standard library** 859 - `internal/bytealg`: fix indexing error in Compare() 860 - `machine`: support Pin.Get() function when the pin is configured as output 861 - `net`, `syscall`: Reduce code duplication by switching to internal/itoa. 862 - `os`: don't try to read executable path on baremetal 863 - `os`: implement Getwd 864 - `os`: add File.WriteString and File.WriteAt 865 - `reflect`: fix type.Size() to account for struct padding 866 - `reflect`: don't construct an interface-in-interface value 867 - `reflect`: implement Value.Elem() for interface values 868 - `reflect`: fix Value.Index() in a specific case 869 - `reflect`: add support for DeepEqual 870 - `runtime`: add another set of invalid unicode runes to encodeUTF8() 871 - `runtime`: only initialize os.runtime_args when needed 872 - `runtime`: only use CRLF on baremetal systems for println 873 - `runtime/debug`: stub `debug.SetMaxStack` 874 - `runtime/debug`: stub `debug.Stack` 875 - `testing`: add a stub for t.Parallel() 876 - `testing`: add support for -test.short flag 877 - `testing`: stub B.ReportAllocs() 878 - `testing`: add `testing.Verbose` 879 - `testing`: stub `testing.AllocsPerRun` 880 * **targets** 881 - fix gen-device-svd to handle 64-bit values 882 - add CPU and Features property to all targets 883 - match LLVM triple to the one Clang uses 884 - `atsam`: simplify definition of SERCOM UART, I2C and SPI peripherals 885 - `atsam`: move I2S0 to machine file 886 - `esp32`: fix SPI configuration 887 - `esp32c3`: add support for GDB debugging 888 - `esp32c3`: add support for CPU interrupts 889 - `esp32c3`: use tasks scheduler by default 890 - `fe310`: increase CPU frequency from 16MHz to 320MHz 891 - `fe310`: add support for bit banging drivers 892 - `linux`: build static binaries using musl 893 - `linux`: reduce binary size by calling `write` instead of `putchar` 894 - `linux`: add support for GOARM 895 - `riscv`: implement 32-bit atomic operations 896 - `riscv`: align the heap to 16 bytes 897 - `riscv`: switch to tasks-based scheduler 898 - `rp2040`: add CPUFrequency() 899 - `rp2040`: improve I2C baud rate configuration 900 - `rp2040`: add pin interrupt API 901 - `rp2040`: refactor PWM code and fix Period calculation 902 - `stm32f103`: fix SPI 903 - `stm32f103`: make SPI frequency selection more flexible 904 - `qemu`: signal correct exit code to QEMU 905 - `wasi`: run C/C++ constructors at startup 906 - `wasm`: ensure heapptr is aligned 907 - `wasm`: update wasi-libc dependency 908 - `wasm`: wasi: use asyncify 909 - `wasm`: support `-scheduler=none` 910 - `windows`: add support for Windows (amd64 only for now) 911 * **boards** 912 - `feather-stm32f405`, `feather-rp2040`: add I2C pin names 913 - `m5stack-core2`: add M5Stack Core2 914 - `nano-33-ble`: SoftDevice s140v7 support 915 - `nano-33-ble`: add constants for more on-board pins 916 917 918 0.20.0 919 --- 920 921 * **command line** 922 - add support for Go 1.17 923 - improve Go version detection 924 - add support for the Black Magic Probe (BMP) 925 - add a flag for creating cpu profiles 926 * **compiler** 927 - `builder:` list libraries at the end of the linker command 928 - `builder:` strip debug information at link time instead of at compile time 929 - `builder:` add missing error check for `ioutil.TempFile()` 930 - `builder:` simplify running of jobs 931 - `compiler:` move LLVM math builtin support into the compiler 932 - `compiler:` move math aliases from the runtime to the compiler 933 - `compiler:` add aliases for many hashing packages 934 - `compiler:` add `*ssa.MakeSlice` bounds tests 935 - `compiler:` fix max possible slice 936 - `compiler:` add support for new language features of Go 1.17 937 - `compiler:` fix equally named structs in different scopes 938 - `compiler:` avoid zero-sized alloca in channel operations 939 - `interp:` don't ignore array indices for untyped objects 940 - `interp:` keep reverted package initializers in order 941 - `interp:` fix bug in compiler-time/run-time package initializers 942 - `loader:` fix panic in CGo files with syntax errors 943 - `transform:` improve GC stack slot pass to work around a bug 944 * **standard library** 945 - `crypto/rand`: switch to `arc4random_buf` 946 - `math:` fix `math.Max` and `math.Min` 947 - `math/big`: fix undefined symbols error 948 - `net:` add MAC address implementation 949 - `os:` implement `os.Executable` 950 - `os:` add `SEEK_SET`, `SEEK_CUR`, and `SEEK_END` 951 - `reflect:` add StructField.IsExported method 952 - `runtime:` reset heapptr to heapStart after preinit() 953 - `runtime:` add `subsections_via_symbols` to assembly files on darwin 954 - `testing:` add subset implementation of Benchmark 955 - `testing:` test testing package using `tinygo test` 956 - `testing:` add support for the `-test.v` flag 957 * **targets** 958 - `386:` bump minimum requirement to the Pentium 4 959 - `arm:` switch to Thumb instruction set on ARM 960 - `atsamd:` fix copy-paste error for atsamd21/51 calibTrim block 961 - `baremetal`,`wasm`: support command line params and environment variables 962 - `cortexm:` fix stack overflow because of unaligned stacks 963 - `esp32c3:` add support for the ESP32-C3 from Espressif 964 - `nrf52840:` fix ram size 965 - `nxpmk66f18:` fix a suspicious bitwise operation 966 - `rp2040:` add SPI support 967 - `rp2040:` add I2C support 968 - `rp2040:` add PWM implementation 969 - `rp2040:` add openocd configuration 970 - `stm32:` add support for PortMask* functions for WS2812 support 971 - `unix:` fix time base for time.Now() 972 - `unix:` check for mmap error and act accordingly 973 - `wasm:` override dlmalloc heap implementation from wasi-libc 974 - `wasm:` align heap to 16 bytes 975 - `wasm:` add support for the crypto/rand package 976 * **boards** 977 - add `DefaultUART` to adafruit boards 978 - `arduino-mkrwifi1010:` add board definition for Arduino MKR WiFi 1010 979 - `arduino-mkrwifi1010:` fix pin definition of `NINA_RESETN` 980 - `feather-nrf52:` fix pin definition of uart 981 - `feather-rp2040:` add pin name definition 982 - `gameboy-advance:` fix ROM header 983 - `mdbt50qrx-uf2:` add Raytac MDBT50Q-RX Dongle with TinyUF2 984 - `nano-rp2040:` define `NINA_SPI` and fix wifinina pins 985 - `teensy40:` enable hardware UART reconfiguration, fix receive watermark interrupt 986 987 988 0.19.0 989 --- 990 991 * **command line** 992 - don't consider compile-only tests as failing 993 - add -test flag for `tinygo list` 994 - escape commands while printing them with the -x flag 995 - make flash-command portable and safer to use 996 - use `extended-remote` instead of `remote` in GDB 997 - detect specific serial port IDs based on USB vid/pid 998 - add a flag to the command line to select the serial implementation 999 * **compiler** 1000 - `cgo`: improve constant parser 1001 - `compiler`: support chained interrupt handlers 1002 - `compiler`: add support for running a builtin in a goroutine 1003 - `compiler`: do not emit nil checks for loading closure variables 1004 - `compiler`: skip context parameter when starting regular goroutine 1005 - `compiler`: refactor method names 1006 - `compiler`: add function and global section pragmas 1007 - `compiler`: implement `syscall.rawSyscallNoError` in inline assembly 1008 - `interp`: ignore inline assembly in markExternal 1009 - `interp`: fix a bug in pointer cast workaround 1010 - `loader`: fix testing a main package 1011 * **standard library** 1012 - `crypto/rand`: replace this package with a TinyGo version 1013 - `machine`: make USBCDC global a pointer 1014 - `machine`: make UART objects pointer receivers 1015 - `machine`: define Serial as the default output 1016 - `net`: add initial support for net.IP 1017 - `net`: add more net compatibility 1018 - `os`: add stub for os.ReadDir 1019 - `os`: add FileMode constants from Go 1.16 1020 - `os`: add stubs required for net/http 1021 - `os`: implement process related functions 1022 - `reflect`: implement AppendSlice 1023 - `reflect`: add stubs required for net/http 1024 - `runtime`: make task.Data a 64-bit integer to avoid overflow 1025 - `runtime`: expose memory stats 1026 - `sync`: implement NewCond 1027 - `syscall`: fix int type in libc version 1028 * **targets** 1029 - `cortexm`: do not disable interrupts on abort 1030 - `cortexm`: bump default stack size to 2048 bytes 1031 - `nrf`: avoid heap allocation in waitForEvent 1032 - `nrf`: don't trigger a heap allocation in SPI.Transfer 1033 - `nrf52840`: add support for flashing with the BOSSA tool 1034 - `rp2040`: add support for GPIO input 1035 - `rp2040`: add basic support for ADC 1036 - `rp2040`: gpio and adc pin definitions 1037 - `rp2040`: implement UART 1038 - `rp2040`: patch elf to checksum 2nd stage boot 1039 - `stm32`: add PWM for most chips 1040 - `stm32`: add support for pin interrupts 1041 - `stm32f103`: add support for PinInputPullup / PinInputPulldown 1042 - `wasi`: remove wasm build tag 1043 * **boards** 1044 - `feather-rp2040`: add support for this board 1045 - `feather-nrf52840-sense`: add board definition for this board 1046 - `pca10059`: support flashing from Windows 1047 - `nano-rp2040`: add this board 1048 - `nano-33-ble`: add support for this board 1049 - `pico`: add the Raspberry Pi Pico board with the new RP2040 chip 1050 - `qtpy`: add pin for neopixels 1051 - all: add definition for ws2812 for supported boards 1052 1053 1054 0.18.0 1055 --- 1056 1057 * **command line** 1058 - drop support for Go 1.11 and 1.12 1059 - throw an error when no target is specified on Windows 1060 - improve error messages in `getDefaultPort()`, support for multiple ports 1061 - remove `-cflags` and `-ldflags` flags 1062 - implement `-ldflags="-X ..."` 1063 - add `-print-allocs` flag that lets you print all heap allocations 1064 - openocd commands in tinygo command line 1065 - add `-llvm-features` parameter 1066 - match `go test` output 1067 - discover USB ports only, this will ignore f.ex. bluetooth 1068 - use physicmal path instead of cached GOROOT in function getGoroot 1069 - add goroot for snap installs 1070 * **compiler** 1071 - `builder`: add support for `-opt=0` 1072 - `builder`, `compiler`: compile and cache packages in parallel 1073 - `builder`: run interp per package 1074 - `builder`: cache C and assembly file outputs 1075 - `builder`: add support for `-x` flag to print commands 1076 - `builder`: add optsize attribute while building the package 1077 - `builder`: run function passes per package 1078 - `builder`: hard code Clang compiler 1079 - `compiler`: do not use `llvm.GlobalContext()` 1080 - `compiler`: remove SimpleDCE pass 1081 - `compiler`: do not emit nil checks for `*ssa.Alloc` instructions 1082 - `compiler`: merge `runtime.typecodeID` and runtime.typeInInterface 1083 - `compiler`: do not check for impossible type asserts 1084 - `compiler`: fix use of global context: `llvm.Int32Type()` 1085 - `compiler`: add interface IR test 1086 - `compiler`: fix lack of method name in interface matching 1087 - `compiler`: fix "fragment covers entire variable" bug 1088 - `compiler`: optimize string literals and globals 1089 - `compiler`: decouple func lowering from interface type codes 1090 - `compiler`: add function attributes to some runtime calls 1091 - `compiler`: improve position information in error messages 1092 - `cgo`: add support for CFLAGS in .c files 1093 - `interp`: support GEP on fixed (MMIO) addresses 1094 - `interp`: handle `(reflect.Type).Elem()` 1095 - `interp`: add support for runtime.interfaceMethod 1096 - `interp`: make toLLVMValue return an error instead of panicking 1097 - `interp`: add support for switch statement 1098 - `interp`: fix phi instruction 1099 - `interp`: remove map support 1100 - `interp`: support extractvalue/insertvalue with multiple operands 1101 - `transform`: optimize string comparisons against "" 1102 - `transform`: optimize `reflect.Type` `Implements()` method 1103 - `transform`: fix bug in interface lowering when signatures are renamed 1104 - `transform`: don't rely on struct name of `runtime.typecodeID` 1105 - `transform`: use IPSCCP pass instead of the constant propagation pass 1106 - `transform`: fix func lowering assertion failure 1107 - `transform`: do not lower zero-sized alloc to alloca 1108 - `transform`: split interface and reflect lowering 1109 * **standard library** 1110 - `runtime`: add dummy debug package 1111 - `machine`: fix data shift/mask in newUSBSetup 1112 - `machine`: make `machine.I2C0` and similar objects pointers 1113 - `machine`: unify usbcdc code 1114 - `machine`: refactor PWM support 1115 - `machine`: avoid heap allocations in USB code 1116 - `reflect`: let `reflect.Type` be of interface type 1117 - `reflect`: implement a number of stub functions 1118 - `reflect`: check for access in the `Interface` method call 1119 - `reflect`: fix `AssignableTo` and `Implements` methods 1120 - `reflect`: implement `Value.CanAddr` 1121 - `reflect`: implement `Sizeof` and `Alignof` for func values 1122 - `reflect`: implement `New` function 1123 - `runtime`: implement command line arguments in hosted environments 1124 - `runtime`: implement environment variables for Linux 1125 - `runtime`: improve timers on nrf, and samd chips 1126 * **targets** 1127 - all: use -Qunused-arguments only for assembly files 1128 - `atmega1280`: add PWM support 1129 - `attiny`: remove dummy UART 1130 - `atsamd21`: improve SPI 1131 - `atsamd51`: fix PWM support in atsamd51p20 1132 - `atsamd5x`: improve SPI 1133 - `atsamd51`, `atsame5x`: unify samd51 and same5x 1134 - `atsamd51`, `atsamd21`: fix `ADC.Get()` value at 8bit and 10bit 1135 - `atsame5x`: add support for CAN 1136 - `avr`: remove I2C stubs from attiny support 1137 - `cortexm`: check for `arm-none-eabi-gdb` and `gdb-multiarch` commands 1138 - `cortexm`: add `__isr_vector` symbol 1139 - `cortexm`: disable FPU on Cortex-M4 1140 - `cortexm`: clean up Cortex-M target files 1141 - `fe310`: fix SPI read 1142 - `gameboy-advance`: Fix RGBA color interpretation 1143 - `nrf52833`: add PWM support 1144 - `stm32l0`: use unified UART logic 1145 - `stm32`: move f103 (bluepill) to common i2c code 1146 - `stm32`: separate altfunc selection for UART Tx/Rx 1147 - `stm32`: i2c implementation for F7, L5 and L4 MCUs 1148 - `stm32`: make SPI CLK fast to fix data issue 1149 - `stm32`: support SPI on L4 series 1150 - `unix`: avoid possible heap allocation with `-opt=0` 1151 - `unix`: use conservative GC by default 1152 - `unix`: use the tasks scheduler instead of coroutines 1153 - `wasi`: upgrade WASI version to wasi_snapshot_preview1 1154 - `wasi`: darwin: support basic file io based on libc 1155 - `wasm`: only export explicitly exported functions 1156 - `wasm`: use WASI ABI for exit function 1157 - `wasm`: scan globals conservatively 1158 * **boards** 1159 - `arduino-mega1280`: add support for the Arduino Mega 1280 1160 - `arduino-nano-new`: Add Arduino Nano w/ New Bootloader target 1161 - `atsame54-xpro`: add initial support this board 1162 - `feather-m4-can`: add initial support for this board 1163 - `grandcentral-m4`: add board support for Adafruit Grand Central M4 (SAMD51) 1164 - `lgt92`: update to new UART structure 1165 - `microbit`: remove LED constant 1166 - `microbit-v2`: add support for S113 SoftDevice 1167 - `nucleol432`: add support for this board 1168 - `nucleo-l031k6`: add this board 1169 - `pca10059`: initial support for this board 1170 - `qtpy`: fix msd-volume-name 1171 - `qtpy`: fix i2c setting 1172 - `teensy40`: move txBuffer allocation to UART declaration 1173 - `teensy40`: add UART0 as alias for UART1 1174 1175 1176 0.17.0 1177 1178 --- 1179 * **command line** 1180 - switch to LLVM 11 for static builds 1181 - support gdb debugging with AVR 1182 - add support for additional openocd commands 1183 - add `-x` flag to print commands 1184 - use LLVM 11 by default when linking LLVM dynamically 1185 - update go-llvm to use LLVM 11 on macOS 1186 - bump go.bug.st/serial to version 1.1.2 1187 - do not build LLVM with libxml to work around a bugo on macOS 1188 - add support for Go 1.16 1189 - support gdb daemonization on Windows 1190 - remove support for LLVM 9, to fix CI 1191 - kill OpenOCD if it does not exit with a regular quit signal 1192 - support `-ocd-output` on Windows 1193 * **compiler** 1194 - `builder`: parallelize most of the build 1195 - `builder`: remove unused cacheKey parameter 1196 - `builder`: add -mcpu flag while building libraries 1197 - `builder`: wait for running jobs to finish 1198 - `cgo`: add support for variadic functions 1199 - `compiler`: fix undefined behavior in wordpack 1200 - `compiler`: fix incorrect "exported function" panic 1201 - `compiler`: fix non-int integer constants (fixing a crash) 1202 - `compiler`: refactor and add tests 1203 - `compiler`: emit a nil check when slicing an array pointer 1204 - `compiler`: saturate float-to-int conversions 1205 - `compiler`: test float to int conversions and fix upper-bound calculation 1206 - `compiler`: support all kinds of deferred builtins 1207 - `compiler`: remove ir package 1208 - `compiler`: remove unnecessary main.main call workaround 1209 - `compiler`: move the setting of attributes to getFunction 1210 - `compiler`: create runtime types lazily when needed 1211 - `compiler`: move settings to a separate Config struct 1212 - `compiler`: work around an ARM backend bug in LLVM 1213 - `interp`: rewrite entire package 1214 - `interp`: fix alignment of untyped globals 1215 - `loader`: use name "main" for the main package 1216 - `loader`: support imports from vendor directories 1217 - `stacksize`: add support for DW_CFA_offset_extended 1218 - `transform`: show better error message in coroutines lowering 1219 * **standard library** 1220 - `machine`: accept configuration struct for ADC parameters 1221 - `machine`: make I2C.Configure signature consistent 1222 - `reflect`: implement PtrTo 1223 - `runtime`: refactor to simplify stack switching 1224 - `runtime`: put metadata at the top end of the heap 1225 * **targets** 1226 - `atsam`: add a length check to findPinPadMapping 1227 - `atsam`: improve USBCDC 1228 - `atsam`: avoid infinite loop when USBCDC is disconnected 1229 - `avr`: add SPI support for Atmega based chips 1230 - `avr`: use Clang for compiling C and assembly files 1231 - `esp32`: implement task based scheduler 1232 - `esp32`: enable the FPU 1233 - `esp8266`: implement task based scheduler 1234 - `esp`: add compiler-rt library 1235 - `esp`: add picolibc 1236 - `nrf`: refactor code a bit to reduce duplication 1237 - `nrf`: use SPIM peripheral instead of the legacy SPI peripheral 1238 - `nrf`: update nrfx submodule to latest commit 1239 - `nrf52840`: ensure that USB CDC interface is only initialized once 1240 - `nrf52840`: improve USBCDC 1241 - `stm32`: use stm32-rs SVDs which are of much higher quality 1242 - `stm32`: harmonization of UART logic 1243 - `stm32`: replace I2C addressable interface with simpler type 1244 - `stm32`: fix i2c and add stm32f407 i2c 1245 - `stm32`: revert change that adds support for channels in interrupts 1246 - `wasm`: implement a growable heap 1247 - `wasm`: fix typo in wasm_exec.js, syscall/js.valueLoadString() 1248 - `wasm`: Namespaced Wasm Imports so they don't conflict across modules, or reserved LLVM IR 1249 - `wasi`: support env variables based on libc 1250 - `wasi`: specify wasi-libc in a different way, to improve error message 1251 * **boards** 1252 - `matrixportal-m4`: add support for board Adafruit Matrix Portal M4 1253 - `mkr1000`: add this board 1254 - `nucleo-f722ze`: add this board 1255 - `clue`: correct volume name and add alias for release version of Adafruit Clue board 1256 - `p1am-100`: add support for the P1AM-100 (similar to Arduino MKR) 1257 - `microbit-v2`: add initial support based on work done by @alankrantas thank you! 1258 - `lgt92`: support for STM32L0 MCUs and Dragino LGT92 device 1259 - `nicenano`: nice!nano board support 1260 - `circuitplay-bluefruit`: correct internal I2C pin mapping 1261 - `clue`: correct for lack of low frequency crystal 1262 - `digispark`: split off attiny85 target 1263 - `nucleo-l552ze`: implementation with CLOCK, LED, and UART 1264 - `nrf52840-mdk-usb-dongle`: add this board 1265 1266 0.16.0 1267 --- 1268 1269 * **command-line** 1270 - add initial support for LLVM 11 1271 - make lib64 clang include path check more robust 1272 - `build`: improve support for GOARCH=386 and add tests 1273 - `gdb`: add support for qemu-user targets 1274 - `test`: support non-host tests 1275 - `test`: add support for -c and -o flags 1276 - `test`: implement some benchmark stubs 1277 * **compiler** 1278 - `builder`: improve detection of clang on Fedora 1279 - `compiler`: fix floating point comparison bugs 1280 - `compiler`: implement negate for complex numbers 1281 - `loader`: fix linkname in test binaries 1282 - `transform`: add missing return pointer restore for regular coroutine tail 1283 calls 1284 * **standard library** 1285 - `machine`: switch default frequency to 4MHz 1286 - `machine`: clarify caller's responsibility in `SetInterrupt` 1287 - `os`: add `LookupEnv()` stub 1288 - `reflect`: implement `Swapper` 1289 - `runtime`: fix UTF-8 decoding 1290 - `runtime`: gc: use raw stack access whenever possible 1291 - `runtime`: use dedicated printfloat32 1292 - `runtime`: allow ranging over a nil map 1293 - `runtime`: avoid device/nxp dependency in HardFault handler 1294 - `testing`: implement dummy Helper method 1295 - `testing`: add Run method 1296 * **targets** 1297 - `arm64`: add support for SVCall intrinsic 1298 - `atsamd51`: avoid panic when configuring SPI with SDI=NoPin 1299 - `avr`: properly support the `.rodata` section 1300 - `esp8266`: implement `Pin.Get` function 1301 - `nintendoswitch`: fix crash when printing long lines (> 120) 1302 - `nintendoswitch`: add env parser and removed unused stuff 1303 - `nrf`: add I2C error checking 1304 - `nrf`: give more flexibility in picking SPI speeds 1305 - `nrf`: fix nrf52832 flash size 1306 - `stm32f103`: support wakeups from interrupts 1307 - `stm32f405`: add SPI support 1308 - `stm32f405`: add I2C support 1309 - `wasi`: add support for this target 1310 - `wasi`: use 'generic' ABI by default 1311 - `wasi`: remove --no-threads flag from wasm-ld 1312 - `wasm`: add instanceof support for WebAssembly 1313 - `wasm`: use fixed length buffer for putchar 1314 * **boards** 1315 - `d1mini`: add this ESP8266 based board 1316 - `esp32`: use board definitions instead of chip names 1317 - `qtpy`: add board definition for Adafruit QTPy 1318 - `teensy40`: add this board 1319 1320 0.15.0 1321 --- 1322 1323 * **command-line** 1324 - add cached GOROOT to info subcommand 1325 - embed git-hash in tinygo-dev executable 1326 - implement tinygo targets to list usable targets 1327 - use simpler file copy instead of file renaming to avoid issues on nrf52840 UF2 bootloaders 1328 - use ToSlash() to specify program path 1329 - support flashing esp32/esp8266 directly from tinygo 1330 - when flashing call PortReset only on other than openocd 1331 * **compiler** 1332 - `compileopts`: add support for custom binary formats 1333 - `compiler`: improve display of goroutine wrappers 1334 - `interp`: don't panic in the Store method 1335 - `interp`: replace some panics with error messages 1336 - `interp`: show error line in first line of the traceback 1337 - `loader`: be more robust when creating the cached GOROOT 1338 - `loader`: rewrite/refactor much of the code to use go list directly 1339 - `loader`: use ioutil.TempDir to create a temporary directory 1340 - `stacksize`: deal with DW_CFA_advance_loc1 1341 * **standard library** 1342 - `runtime`: use waitForEvents when appropriate 1343 * **wasm** 1344 - `wasm`: Remove --no-threads from wasm-ld calls. 1345 - `wasm`: update wasi-libc dependency 1346 * **targets** 1347 - `arduino-mega2560`: fix flashing on Windows 1348 - `arm`: automatically determine stack sizes 1349 - `arm64`: make dynamic loader structs and constants private 1350 - `avr`: configure emulator in board files 1351 - `cortexm`: fix stack size calculation with interrupts 1352 - `flash`: add openocd settings to atsamd21 / atsamd51 1353 - `flash`: add openocd settings to nrf5 1354 - `microbit`: reelboard: flash using OpenOCD when needed 1355 - `nintendoswitch`: Add dynamic loader for runtime loading PIE sections 1356 - `nintendoswitch`: fix import cycle on dynamic_arm64.go 1357 - `nintendoswitch`: Fix invalid memory read / write in print calls 1358 - `nintendoswitch`: simplified assembly code 1359 - `nintendoswitch`: support outputting .nro files directly 1360 * **boards** 1361 - `arduino-zero`: Adding support for the Arduino Zero (#1365) 1362 - `atsamd2x`: fix BAUD value 1363 - `atsamd5x`: fix BAUD value 1364 - `bluepill`: Enable stm32's USART2 for the board and map it to UART1 tinygo's device 1365 - `device/atsamd51x`: add all remaining bitfield values for PCHCTRLm Mapping 1366 - `esp32`: add libgcc ROM functions to linker script 1367 - `esp32`: add SPI support 1368 - `esp32`: add support for basic GPIO 1369 - `esp32`: add support for the Espressif ESP32 chip 1370 - `esp32`: configure the I/O matrix for GPIO pins 1371 - `esp32`: export machine.PortMask* for bitbanging implementations 1372 - `esp8266`: add support for this chip 1373 - `machine/atsamd51x,runtime/atsamd51x`: fixes needed for full support for all PWM pins. Also adds some useful constants to clarify peripheral clock usage 1374 - `machine/itsybitsy-nrf52840`: add support for Adafruit Itsybitsy nrf52840 (#1243) 1375 - `machine/stm32f4`: refactor common code and add new build tag stm32f4 (#1332) 1376 - `nrf`: add SoftDevice support for the Circuit Playground Bluefruit 1377 - `nrf`: call sd_app_evt_wait when the SoftDevice is enabled 1378 - `nrf52840`: add build tags for SoftDevice support 1379 - `nrf52840`: use higher priority for USB-CDC code 1380 - `runtime/atsamd51x`: use PCHCTRL_GCLK_SERCOMX_SLOW for setting clocks on all SERCOM ports 1381 - `stm32f405`: add basic UART handler 1382 - `stm32f405`: add STM32F405 machine/runtime, and new board/target feather-stm32f405 1383 * **build** 1384 - `all`: run test binaries in the correct directory 1385 - `build`: Fix arch release job 1386 - `ci`: run `tinygo test` for known-working packages 1387 - `ci`: set git-fetch-depth to 1 1388 - `docker`: fix the problem with the wasm build (#1357) 1389 - `Makefile`: check whether submodules have been downloaded in some common cases 1390 * **docs** 1391 - add ESP32, ESP8266, and Adafruit Feather STM32F405 to list of supported boards 1392 1393 0.14.1 1394 --- 1395 * **command-line** 1396 - support for Go 1.15 1397 * **compiler** 1398 - loader: work around Windows symlink limitation 1399 1400 0.14.0 1401 --- 1402 * **command-line** 1403 - fix `getDefaultPort()` on non-English Windows locales 1404 - compileopts: improve error reporting of unsupported flags 1405 - fix test subcommand 1406 - use auto-retry to locate MSD for UF2 and HEX flashing 1407 - fix touchSerialPortAt1200bps on Windows 1408 - support package names with backslashes on Windows 1409 * **compiler** 1410 - fix a few crashes due to named types 1411 - add support for atomic operations 1412 - move the channel blocked list onto the stack 1413 - fix -gc=none 1414 - fix named string to `[]byte` slice conversion 1415 - implement func value and builtin defers 1416 - add proper parameter names to runtime.initAll, to fix a panic 1417 - builder: fix picolibc include path 1418 - builder: use newer version of gohex 1419 - builder: try to determine stack size information at compile time 1420 - builder: remove -opt=0 1421 - interp: fix sync/atomic.Value load/store methods 1422 - loader: add Go module support 1423 - transform: fix debug information in func lowering pass 1424 - transform: do not special-case zero or one implementations of a method call 1425 - transform: introduce check for method calls on nil interfaces 1426 - transform: gc: track 0-index GEPs to fix miscompilation 1427 * **cgo** 1428 - Add LDFlags support 1429 * **standard library** 1430 - extend stdlib to allow import of more packages 1431 - replace master/slave terminology with appropriate alternatives (MOSI->SDO 1432 etc) 1433 - `internal/bytealg`: reimplement bytealg in pure Go 1434 - `internal/task`: fix nil panic in (*internal/task.Stack).Pop 1435 - `os`: add Args and stub it with mock data 1436 - `os`: implement virtual filesystem support 1437 - `reflect`: add Cap and Len support for map and chan 1438 - `runtime`: fix return address in scheduler on RISC-V 1439 - `runtime`: avoid recursion in printuint64 function 1440 - `runtime`: replace ReadRegister with AsmFull inline assembly 1441 - `runtime`: fix compilation errors when using gc.extalloc 1442 - `runtime`: add cap and len support for chans 1443 - `runtime`: refactor time handling (improving accuracy) 1444 - `runtime`: make channels work in interrupts 1445 - `runtime/interrupt`: add cross-chip disable/restore interrupt support 1446 - `sync`: implement `sync.Cond` 1447 - `sync`: add WaitGroup 1448 * **targets** 1449 - `arm`: allow nesting in DisableInterrupts and EnableInterrupts 1450 - `arm`: make FPU configuration consistent 1451 - `arm`: do not mask fault handlers in critical sections 1452 - `atmega2560`: fix pin mapping for pins D2, D5 and the L port 1453 - `atsamd`: return an error when an incorrect PWM pin is used 1454 - `atsamd`: add support for pin change interrupts 1455 - `atsamd`: add DAC support 1456 - `atsamd21`: add more ADC pins 1457 - `atsamd51`: fix ROM / RAM size on atsamd51j20 1458 - `atsamd51`: add more pins 1459 - `atsamd51`: add more ADC pins 1460 - `atsamd51`: add pin change interrupt settings 1461 - `atsamd51`: extend pinPadMapping 1462 - `arduino-nano33`: use (U)SB flag to ensure that device can be found when 1463 not on default port 1464 - `arduino-nano33`: remove (d)ebug flag to reduce console noise when flashing 1465 - `avr`: use standard pin numbering 1466 - `avr`: unify GPIO pin/port code 1467 - `avr`: add support for PinInputPullup 1468 - `avr`: work around codegen bug in LLVM 10 1469 - `avr`: fix target triple 1470 - `fe310`: remove extra println left in by mistake 1471 - `feather-nrf52840`: add support for the Feather nRF52840 1472 - `maixbit`: add board definition and dummy runtime 1473 - `nintendoswitch`: Add experimental Nintendo Switch support without CRT 1474 - `nrf`: expose the RAM base address 1475 - `nrf`: add support for pin change interrupts 1476 - `nrf`: add microbit-s110v8 target 1477 - `nrf`: fix bug in SPI.Tx 1478 - `nrf`: support debugging the PCA10056 1479 - `pygamer`: add Adafruit PyGamer support 1480 - `riscv`: fix interrupt configuration bug 1481 - `riscv`: disable linker relaxations during gp init 1482 - `stm32f4disco`: add new target with ST-Link v2.1 debugger 1483 - `teensy36`: add Teensy 3.6 support 1484 - `wasm`: fix event handling 1485 - `wasm`: add --no-demangle linker option 1486 - `wioterminal`: add support for the Seeed Wio Terminal 1487 - `xiao`: add support for the Seeed XIAO 1488 1489 0.13.1 1490 --- 1491 * **standard library** 1492 - `runtime`: do not put scheduler and GC code in the same section 1493 - `runtime`: copy stack scan assembly for GBA 1494 * **boards** 1495 - `gameboy-advance`: always use ARM mode instead of Thumb mode 1496 1497 1498 0.13.0 1499 --- 1500 * **command line** 1501 - use `gdb-multiarch` for debugging Cortex-M chips 1502 - support `tinygo run` with simavr 1503 - support LLVM 10 1504 - support Go 1.14 1505 - retry 3 times when attempting to do a 1200-baud reset 1506 * **compiler** 1507 - mark the `abort` function as noreturn 1508 - fix deferred calls to exported functions 1509 - add debug info for local variables 1510 - check for channel size limit 1511 - refactor coroutine lowering 1512 - add `dereferenceable_or_null` attribute to pointer parameters 1513 - do not perform nil checking when indexing slices and on `unsafe.Pointer` 1514 - remove `runtime.isnil` hack 1515 - use LLVM builtins for runtime `memcpy`/`memmove`/`memzero` functions 1516 - implement spec-compliant shifts on negative/overflow 1517 - support anonymous type asserts 1518 - track pointer result of string concatenation for GC 1519 - track PHI nodes for GC 1520 - add debug info to goroutine start wrappers 1521 - optimize comparing interface values against nil 1522 - fix miscompilation when deferring an interface call 1523 - builder: include picolibc for most baremetal targets 1524 - builder: run tools (clang, lld) as separate processes 1525 - builder: use `-fshort-enums` consistently 1526 - interp: add support for constant type asserts 1527 - interp: better support for interface operations 1528 - interp: include backtrace with error 1529 - transform: do not track const globals for GC 1530 - transform: replace panics with source locations 1531 - transform: fix error in interface lowering pass 1532 - transform: make coroutine lowering deterministic 1533 - transform: fix miscompilation in func lowering 1534 * **cgo** 1535 - make `-I` and `-L` paths absolute 1536 * **standard library** 1537 - `machine`: set the USB VID and PID to the manufacturer values 1538 - `machine`: correct USB CDC composite descriptors 1539 - `machine`: move `errors.New` calls to globals 1540 - `runtime`: support operations on nil maps 1541 - `runtime`: fix copy builtin return value on AVR 1542 - `runtime`: refactor goroutines 1543 - `runtime`: support `-scheduler=none` on most platforms 1544 - `runtime`: run package initialization in the main goroutine 1545 - `runtime`: export `malloc` / `free` for use from C 1546 - `runtime`: add garbage collector that uses an external allocator 1547 - `runtime`: scan callee-saved registers while marking the stack 1548 - `runtime`: remove recursion from conservative GC 1549 - `runtime`: fix blocking select on nil channel 1550 - `runtime/volatile`: include `ReplaceBits` method 1551 - `sync`: implement trivial `sync.Map` 1552 * **targets** 1553 - `arm`: use `-fomit-frame-pointer` 1554 - `atmega1284`: support this chip for testing purposes 1555 - `atsamd51`: make QSPI available on all boards 1556 - `atsamd51`: add support for ADC1 1557 - `atsamd51`: use new interrupt registration in UART code 1558 - `attiny`: clean up pin definitions 1559 - `avr`: use the correct RAM start address 1560 - `avr`: pass the correct `-mmcu` flag to the linker 1561 - `avr`: add support for tasks scheduler (disabled by default) 1562 - `avr`: fix linker problem with overlapping program/data areas 1563 - `nrf`: fix typo in pin configuration options 1564 - `nrf`: add lib/nrfx/mdk to include dirs 1565 - `nrf52840`: implement USB-CDC 1566 - `riscv`: implement VirtIO target and add RISC-V integration test 1567 - `riscv`: add I2C support for the HiFive1 rev B board 1568 - `stm32`: refactor GPIO pin handling 1569 - `stm32`: refactor UART code 1570 - `stm32f4`: add SPI 1571 - `wasm`: support Go 1.14 (breaking previous versions) 1572 - `wasm`: support `syscall/js.CopyBytesToJS` 1573 - `wasm`: sync polyfills from Go 1.14. 1574 * **boards** 1575 - `arduino-mega2560`: add the Arduino Mega 2560 1576 - `clue-alpha`: add the Adafruit CLUE Alpha 1577 - `gameboy-advance`: enable debugging with GDB 1578 - `particle-argon`: add the Particle Argon board 1579 - `particle-boron`: add the Particle Boron board 1580 - `particle-xenon`: add the Particle Xenon board 1581 - `reelboard`: add `reelboard-s140v7` SoftDevice target 1582 1583 0.12.0 1584 --- 1585 * **command line** 1586 - add initial FreeBSD support 1587 - remove getting a serial port in gdb subcommand 1588 - add support for debugging through JLinkGDBServer 1589 - fix CGo when cross compiling 1590 - remove default port check for Digispark as micronucleus communicates directly using HID 1591 - differentiate between various serial/USB error messages 1592 * **builder** 1593 - improve detection of Clang headers 1594 * **compiler** 1595 - fix assertion on empty interface 1596 - don't crash when encountering `types.Invalid` 1597 - revise defer to use heap allocations when running a variable number of times 1598 - improve error messages for failed imports 1599 - improve "function redeclared" error 1600 - add globaldce pass to start of optimization pipeline 1601 - add support for debugging globals 1602 - implement RISC-V CSR operations as intrinsics 1603 - add support for CGO_ENABLED environment variable 1604 - do not emit debug info for extern globals (bugfix) 1605 - add support for interrupts 1606 - implement maps for arbitrary keys 1607 - interp: error location for "unknown GEP" error 1608 - wasm-abi: create temporary allocas in the entry block 1609 * **cgo** 1610 - add support for symbols in `#define` 1611 - fix a bug in number tokenization 1612 * **standard library** 1613 - `machine`: avoid bytes package in USB logic 1614 - `runtime`: fix external address declarations 1615 - `runtime`: provide implementation for `internal/bytealg.IndexByte` 1616 * **targets** 1617 - `atsamd51`: fix volatile usage 1618 - `atsamd51`: fix ADC, updating to 12-bits precision 1619 - `atsamd51`: refactor SPI pin configuration to only look at pin numbers 1620 - `atsamd51`: switch UART to use new pin configuration 1621 - `atsamd51`: fix obvious bug in I2C code 1622 - `atsamd51`: use only the necessary UART interrupts 1623 - `atsamd51`: refactor I2C pin handling to auto-detect pin mode 1624 - `avr`: use a garbage collector 1625 - `fe310`: use CLINT peripheral for timekeeping 1626 - `fe310`: add support for PLIC interrupts 1627 - `fe310`: implement UART receive interrupts 1628 - `riscv`: support sleeping in QEMU 1629 - `riscv`: add bare-bones interrupt support 1630 - `riscv`: print exception PC and code 1631 - `wasm`: implement memcpy and memset 1632 - `wasm`: include wasi-libc 1633 - `wasm`: use wasi ABI for basic startup/stdout 1634 * **boards** 1635 - `arduino`: make avrdude command line compatible with Windows 1636 - `arduino-nano`: add this board 1637 - `arduino-nano33`: fix UART1 and UART2 1638 - `circuitplay-bluefruit`: add this board 1639 - `digispark`: add clock speed and pin mappings 1640 - `gameboy-advance`: include compiler-rt in build 1641 - `gameboy-advance`: implement interrupt handler 1642 - `hifive1b`: add support for gdb subcommand 1643 - `pyportal`: add this board 1644 - `pyportal`: remove manual SPI pin mapping as now handled by default 1645 1646 1647 0.11.0 1648 --- 1649 * **command line** 1650 - add support for QEMU in `gdb` subcommand 1651 - use builtin Clang when building statically, dropping the clang-9 dependency 1652 - search for default serial port on both macOS and Linux 1653 - windows: support `tinygo flash` directly by using win32 wmi 1654 * **compiler** 1655 - add location information to the IR checker 1656 - make reflection sidetables constant globals 1657 - improve error locations in goroutine lowering 1658 - interp: improve support for maps with string keys 1659 - interp: add runtime fallback for mapassign operations 1660 * **standard library** 1661 - `machine`: add support for `SPI.Tx()` on play.tinygo.org 1662 - `machine`: rename `CPU_FREQUENCY` to `CPUFrequency()` 1663 * **targets** 1664 - `adafruit-pybadge`: add Adafruit Pybadge 1665 - `arduino-nano33`: allow simulation on play.tinygo.org 1666 - `arduino-nano33`: fix default SPI pin numbers to be D13/D11/D12 1667 - `circuitplay-express`: allow simulation on play.tinygo.org 1668 - `hifive1-qemu`: add target for testing RISC-V bare metal in QEMU 1669 - `riscv`: fix heap corruption due to changes in LLVM 9 1670 - `riscv`: add support for compiler-rt 1671 - `qemu`: rename to `cortex-m-qemu` 1672 1673 0.10.0 1674 --- 1675 * **command line** 1676 - halt GDB after flashing with `gdb` subcommand 1677 - fix a crash when using `-ocd-output` 1678 - add `info` subcommand 1679 - add `-programmer` flag 1680 * **builder** 1681 - macos: use llvm@8 instead of just llvm in paths 1682 - add `linkerscript` key to target JSON files 1683 - write a symbol table when writing out the compiler-rt lib 1684 - make Clang header detection more robust 1685 - switch to LLVM 9 1686 * **compiler** 1687 - fix interface miscompilation with reflect 1688 - fix miscompile of static goroutine calls to closures 1689 - fix `todo: store` panic 1690 - fix incorrect starting value for optimized allocations in a loop 1691 - optimize coroutines on non-Cortex-M targets 1692 - fix crash for programs which have heap allocations but never hit the GC 1693 - add support for async interface calls 1694 - fix inserting non-const values in a const global 1695 - interp: improve error reporting 1696 - interp: implement comparing ptrtoint to 0 1697 * **cgo** 1698 - improve diagnostics 1699 - implement the constant parser (for `#define`) as a real parser 1700 - rename reserved field names such as `type` 1701 - avoid `"unsafe" imported but not used` error 1702 - include all enums in the CGo Go AST 1703 - add support for nested structs and unions 1704 - implement `#cgo CFLAGS` 1705 * **standard library** 1706 - `reflect`: add implementation of array alignment 1707 - `runtime`: improve scheduler performance when no goroutines are queued 1708 - `runtime`: add blocking select 1709 - `runtime`: implement interface equality in non-trivial cases 1710 - `runtime`: add AdjustTimeOffset to update current time 1711 - `runtime`: only implement CountString for required platforms 1712 - `runtime`: use MSP/PSP registers for scheduling on Cortex-M 1713 * **targets** 1714 - `arm`: add system timer registers 1715 - `atmega`: add port C GPIO support 1716 - `atsamd21`: correct handling of pins >= 32 1717 - `atsamd21`: i2s initialization fixes 1718 - `atsamd51`: fix clock init code 1719 - `atsamd51`: correct initialization for RTC 1720 - `atsamd51`: fix pin function selection 1721 - `atsamd51`: pin method cleanup 1722 - `atsamd51`: allow setting pin mode for each of the SPI pins 1723 - `atsamd51`: correct channel init and pin map for ADC based on ItsyBitsy-M4 1724 - `feather-m4`: add Adafruit Feather M4 board 1725 - `hifive1b`: add support for SPI1 1726 - `hifive1b`: fix compiling in simulation 1727 - `linux`: fix time on arm32 1728 - `metro-m4`: add support for Adafruit Metro M4 Express Airlift board 1729 - `metro-m4`: fixes for UART2 1730 - `pinetime-devkit0`: add support for the PineTime dev kit 1731 - `x9pro`: add support for this smartwatch 1732 - `pca10040-s132v6`: add support for SoftDevice 1733 - `pca10056-s140v7`: add support for SoftDevice 1734 - `arduino-nano33`: added SPI1 connected to NINA-W102 chip on Arduino Nano 33 IOT 1735 1736 0.9.0 1737 --- 1738 * **command line** 1739 - implement 1200-baud UART bootloader reset when flashing boards that support 1740 it 1741 - flash using mass-storage device for boards that support it 1742 - implement `tinygo env` 1743 - add support for Windows (but not yet producing Windows binaries) 1744 - add Go version to `tinygo env` 1745 - update SVD files for up-to-date peripheral interfaces 1746 * **compiler** 1747 - add `//go:align` pragma 1748 - fix bug related to type aliases 1749 - add support for buffered channels 1750 - remove incorrect reflect optimization 1751 - implement copying slices in init interpretation 1752 - add support for constant indices with a named type 1753 - add support for recursive types like linked lists 1754 - fix miscompile of function nil panics 1755 - fix bug related to goroutines 1756 * **standard library** 1757 - `machine`: do not check for nil slices in `SPI.Tx` 1758 - `reflectlite`: add support for Go 1.13 1759 - `runtime`: implement `internal/bytealg.CountString` 1760 - `sync`: properly handle nil `New` func in `sync.Pool` 1761 * **targets** 1762 - `arduino`: fix .bss section initialization 1763 - `fe310`: implement `Pin.Get` 1764 - `gameboy-advance`: support directly outputting .gba files 1765 - `samd`: reduce code size by avoiding reflection 1766 - `samd21`: do not hardcode pin numbers for peripherals 1767 - `stm32f103`: avoid issue with `time.Sleep` less than 200µs 1768 1769 0.8.0 1770 --- 1771 * **command line** 1772 - fix parsing of beta Go versions 1773 - check the major/minor installed version of Go before compiling 1774 - validate `-target` flag better to not panic on an invalid target 1775 * **compiler** 1776 - implement full slice expression: `s[:2:4]` 1777 - fix a crash when storing a linked list in an interface 1778 - fix comparing struct types by making type IDs more unique 1779 - fix some bugs in IR generation 1780 - add support for linked lists in reflect data 1781 - implement `[]rune` to string conversion 1782 - implement support for `go` on func values 1783 * **standard library** 1784 - `reflect`: add support for named types 1785 - `reflect`: add support for `t.Bits()` 1786 - `reflect`: add basic support for `t.AssignableTo()` 1787 - `reflect`: implement `t.Align()` 1788 - `reflect`: add support for struct types 1789 - `reflect`: fix bug in `v.IsNil` and `v.Pointer` for addressable values 1790 - `reflect`: implement support for array types 1791 - `reflect`: implement `t.Comparable()` 1792 - `runtime`: implement stack-based scheduler 1793 - `runtime`: fix bug in the sleep queue of the scheduler 1794 - `runtime`: implement `memcpy` for Cortex-M 1795 - `testing`: implement stub `testing.B` struct 1796 - `testing`: add common test logging methods such as Errorf/Fatalf/Printf 1797 * **targets** 1798 - `386`: add support for linux/386 syscalls 1799 - `atsamd21`: make SPI pins configurable so that multiple SPI ports can be 1800 used 1801 - `atsamd21`: correct issue with invalid first reading coming from ADC 1802 - `atsamd21`: add support for reset-to-bootloader using 1200baud over USB-CDC 1803 - `atsamd21`: make pin selection more flexible for peripherals 1804 - `atsamd21`: fix minimum delay in `time.Sleep` 1805 - `atsamd51`: fix minimum delay in `time.Sleep` 1806 - `nrf`: improve SPI write-only speed, by making use of double buffering 1807 - `stm32f103`: fix SPI frequency selection 1808 - `stm32f103`: add machine.Pin.Get method for reading GPIO values 1809 - `stm32f103`: allow board specific UART usage 1810 - `nucleo-f103rb`: add support for NUCLEO-F103RB board 1811 - `itsybitsy-m4`: add support for this board with a SAMD51 family chip 1812 - `cortex-m`: add support for `arm.SystemReset()` 1813 - `gameboy-advance`: add initial support for the GameBoy Advance 1814 - `wasm`: add `//go:wasm-module` magic comment to set the wasm module name 1815 - `wasm`: add syscall/js.valueSetIndex support 1816 - `wasm`: add syscall/js.valueInvoke support 1817 1818 0.7.1 1819 --- 1820 * **targets** 1821 - `atsamd21`: add support for the `-port` flag in the flash subcommand 1822 1823 0.7.0 1824 --- 1825 * **command line** 1826 - try more locations to find Clang built-in headers 1827 - add support for `tinygo test` 1828 - build current directory if no package is specified 1829 - support custom .json target spec with `-target` flag 1830 - use zversion.go to detect version of GOROOT version 1831 - make initial heap size configurable for some targets (currently WebAssembly 1832 only) 1833 * **cgo** 1834 - add support for bitfields using generated getters and setters 1835 - add support for anonymous structs 1836 * **compiler** 1837 - show an error instead of panicking on duplicate function definitions 1838 - allow packages like github.com/tinygo-org/tinygo/src/\* by aliasing it 1839 - remove `//go:volatile` support 1840 It has been replaced with the runtime/volatile package. 1841 - allow poiners in map keys 1842 - support non-constant syscall numbers 1843 - implement non-blocking selects 1844 - add support for the `-tags` flag 1845 - add support for `string` to `[]rune` conversion 1846 - implement a portable conservative garbage collector (with support for wasm) 1847 - add the `//go:noinline` pragma 1848 * **standard library** 1849 - `os`: add `os.Exit` and `syscall.Exit` 1850 - `os`: add several stubs 1851 - `runtime`: fix heap corruption in conservative GC 1852 - `runtime`: add support for math intrinsics where supported, massively 1853 speeding up some benchmarks 1854 - `testing`: add basic support for testing 1855 * **targets** 1856 - add support for a generic target that calls `__tinygo_*` functions for 1857 peripheral access 1858 - `arduino-nano33`: add support for this board 1859 - `hifive1`: add support for this RISC-V board 1860 - `reelboard`: add e-paper pins 1861 - `reelboard`: add `PowerSupplyActive` to enable voltage for on-board devices 1862 - `wasm`: put the stack at the start of linear memory, to detect stack 1863 overflows 1864 1865 0.6.0 1866 --- 1867 * **command line** 1868 - some portability improvements 1869 - make `$GOROOT` more robust and configurable 1870 - check for Clang at the Homebrew install location as fallback 1871 * **compiler driver** 1872 - support multiple variations of LLVM commands, for non-Debian distributions 1873 * **compiler** 1874 - improve code quality in multiple ways 1875 - make panic configurable, adding trap on panic 1876 - refactor many internal parts of the compiler 1877 - print all errors encountered during compilation 1878 - implement calling function values of a named type 1879 - implement returning values from blocking functions 1880 - allow larger-than-int values to be sent across a channel 1881 - implement complex arithmetic 1882 - improve hashmap support 1883 - add debuginfo for function arguments 1884 - insert nil checks on stores (increasing code size) 1885 - implement volatile operations as compiler builtins 1886 - add `//go:inline` pragma 1887 - add build tags for the Go stdlib version 1888 * **cgo** 1889 - implement `char`, `enum` and `void*` types 1890 - support `#include` for builtin headers 1891 - improve typedef/struct/enum support 1892 - only include symbols that are necessary, for broader support 1893 - mark external function args as `nocapture` 1894 - implement support for some `#define` constants 1895 - implement support for multiple CGo files in a single package 1896 - **standard library** 1897 - `machine`: remove microbit matrix (moved to drivers repository) 1898 - `machine`: refactor pins to use `Pin` type instead of `GPIO` 1899 - `runtime`: print more interface types on panic, including `error` 1900 * **targets** 1901 - `arm`: print an error on HardFault (including stack overflows) 1902 - `atsamd21`: fix a bug in the ADC peripheral 1903 - `atsamd21`: add support for I2S 1904 - `feather-m0`: add support for this board 1905 - `nrf51`: fix a bug in I2C 1906 - `stm32f103xx`: fix a bug in I2C 1907 - `syscall`: implement `Exit` on unix 1908 - `trinket-m0`: add support for this board 1909 - `wasm`: make _main_ example smaller 1910 - `wasm`: don't cache wasm file in the server, for ease of debugging 1911 - `wasm`: work around bug #41508 that caused a deadlock while linking 1912 - `wasm`: add support for `js.FuncOf` 1913 1914 0.5.0 1915 --- 1916 - **compiler driver** 1917 - use `wasm-ld` instead of `wasm-ld-8` on macOS 1918 - drop dependency on `llvm-ar` 1919 - fix linker script includes when running outside `TINYGOROOT` 1920 - **compiler** 1921 - switch to LLVM 8 1922 - add support for the Go 1.12 standard library (Go 1.11 is still supported) 1923 - work around lack of escape analysis due to nil checks 1924 - implement casting named structs and pointers to them 1925 - fix int casting to use the source signedness 1926 - fix some bugs around `make([]T, …)` with uncommon index types 1927 - some other optimizations 1928 - support interface asserts in interp for "math/rand" support 1929 - resolve all func value targets at compile time (wasm-only at the moment) 1930 - **cgo** 1931 - improve diagnostics 1932 - implement C `struct`, `union`, and arrays 1933 - fix CGo-related crash in libclang 1934 - implement `C.struct_` types 1935 - **targets** 1936 - all baremetal: pretend to be linux/arm instead of js/wasm 1937 - `avr`: improve `uintptr` support 1938 - `cortexm`: implement memmove intrinsic generated by LLVM 1939 - `cortexm`: use the lld linker instead of `arm-none-eabi-ld` 1940 - `darwin`: use custom syscall package that links to libSystem.dylib 1941 - `microbit`: add blink example 1942 - `samd21`: support I2C1 1943 - `samd21`: machine/atsamd21: correct pad/pin handling when using both UART 1944 and USBCDC interfaces at same time 1945 - `stm32f4discovery`: add support for this board 1946 - `wasm`: support async func values 1947 - `wasm`: improve documentation and add extra example 1948 1949 0.4.1 1950 --- 1951 - **compiler** 1952 - fix `objcopy` replacement to include the .data section in the firmware image 1953 - use `llvm-ar-7` on Linux to fix the Docker image 1954 1955 0.4.0 1956 --- 1957 - **compiler** 1958 - switch to the hardfloat ABI on ARM, which is more widely used 1959 - avoid a dependency on `objcopy` (`arm-none-eabi-objcopy` etc.) 1960 - fix a bug in `make([]T, n)` where `n` is 64-bits on a 32-bit platform 1961 - adapt to a change in the AVR backend in LLVM 8 1962 - directly support the .uf2 firmware format as used on Adafruit boards 1963 - fix a bug when calling `panic()` at init time outside of the main package 1964 - implement nil checks, which results in a ~5% increase in code size 1965 - inline slice bounds checking, which results in a ~1% decrease in code size 1966 - **targets** 1967 - `samd21`: fix a bug in port B pins 1968 - `samd21`: implement SPI peripheral 1969 - `samd21`: implement ADC peripheral 1970 - `stm32`: fix a bug in timekeeping 1971 - `wasm`: fix a bug in `wasm_exec.js` that caused corruption in linear memory 1972 when running on Node.js. 1973 1974 0.3.0 1975 --- 1976 - **compiler** 1977 - remove old `-initinterp` flag 1978 - add support for macOS 1979 - **cgo** 1980 - add support for bool/float/complex types 1981 - **standard library** 1982 - `device/arm`: add support to disable/enable hardware interrupts 1983 - `machine`: add CPU frequency for nrf-based boards 1984 - `syscall`: add support for darwin/amd64 1985 - **targets** 1986 - `circuitplay_express`: add support for this board 1987 - `microbit`: add regular pin constants 1988 - `samd21`: fix time function for goroutine support 1989 - `samd21`: add support for USB-CDC (serial over USB) 1990 - `samd21`: add support for pins in port B 1991 - `samd21`: add support for pullup and pulldown pins 1992 - `wasm`: add support for Safari in example 1993 1994 1995 0.2.0 1996 --- 1997 - **command line** 1998 - add version subcommand 1999 - **compiler** 2000 - fix a bug in floating point comparisons with NaN values 2001 - fix a bug when calling `panic` in package initialization code 2002 - add support for comparing `complex64` and `complex128` 2003 - **cgo** 2004 - add support for external globals 2005 - add support for pointers and function pointers 2006 - **standard library** 2007 - `fmt`: initial support, `fmt.Println` works 2008 - `math`: support for most/all functions 2009 - `os`: initial support (only stdin/stdout/stderr) 2010 - `reflect`: initial support 2011 - `syscall`: add support for amd64, arm, and arm64