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