- command line
- add initial FreeBSD support
- remove getting a serial port in gdb subcommand
- add support for debugging through JLinkGDBServer
- fix CGo when cross compiling
- remove default port check for Digispark as micronucleus communicates directly using HID
- differentiate between various serial/USB error messages
- builder
- improve detection of Clang headers
- compiler
- fix assertion on empty interface
- don't crash when encountering
types.Invalid
- revise defer to use heap allocations when running a variable number of times
- improve error messages for failed imports
- improve "function redeclared" error
- add globaldce pass to start of optimization pipeline
- add support for debugging globals
- implement RISC-V CSR operations as intrinsics
- add support for CGO_ENABLED environment variable
- do not emit debug info for extern globals (bugfix)
- add support for interrupts
- implement maps for arbitrary keys
- interp: error location for "unknown GEP" error
- wasm-abi: create temporary allocas in the entry block
- cgo
- add support for symbols in
#define
- fix a bug in number tokenization
- add support for symbols in
- standard library
machine
: avoid bytes package in USB logicruntime
: fix external address declarationsruntime
: provide implementation forinternal/bytealg.IndexByte
- targets
atsamd51
: fix volatile usageatsamd51
: fix ADC, updating to 12-bits precisionatsamd51
: refactor SPI pin configuration to only look at pin numbersatsamd51
: switch UART to use new pin configurationatsamd51
: fix obvious bug in I2C codeatsamd51
: use only the necessary UART interruptsatsamd51
: refactor I2C pin handling to auto-detect pin modeavr
: use a garbage collectorfe310
: use CLINT peripheral for timekeepingfe310
: add support for PLIC interruptsfe310
: implement UART receive interruptsriscv
: support sleeping in QEMUriscv
: add bare-bones interrupt supportriscv
: print exception PC and codewasm
: implement memcpy and memsetwasm
: include wasi-libcwasm
: use wasi ABI for basic startup/stdout
- boards
arduino
: make avrdude command line compatible with Windowsarduino-nano
: add this boardarduino-nano33
: fix UART1 and UART2circuitplay-bluefruit
: add this boarddigispark
: add clock speed and pin mappingsgameboy-advance
: include compiler-rt in buildgameboy-advance
: implement interrupt handlerhifive1b
: add support for gdb subcommandpyportal
: add this boardpyportal
: remove manual SPI pin mapping as now handled by default
- command line
- add support for QEMU in
gdb
subcommand - use builtin Clang when building statically, dropping the clang-9 dependency
- search for default serial port on both macOS and Linux
- windows: support
tinygo flash
directly by using win32 wmi
- add support for QEMU in
- compiler
- add location information to the IR checker
- make reflection sidetables constant globals
- improve error locations in goroutine lowering
- interp: improve support for maps with string keys
- interp: add runtime fallback for mapassign operations
- standard library
machine
: add support forSPI.Tx()
on play.tinygo.orgmachine
: renameCPU_FREQUENCY
toCPUFrequency()
- targets
adafruit-pybadge
: add Adafruit Pybadgearduino-nano33
: allow simulation on play.tinygo.orgarduino-nano33
: fix default SPI pin numbers to be D13/D11/D12circuitplay-express
: allow simulation on play.tinygo.orghifive1-qemu
: add target for testing RISC-V bare metal in QEMUriscv
: fix heap corruption due to changes in LLVM 9riscv
: add support for compiler-rtqemu
: rename tocortex-m-qemu
- command line
- halt GDB after flashing with
gdb
subcommand - fix a crash when using
-ocd-output
- add
info
subcommand - add
-programmer
flag
- halt GDB after flashing with
- builder
- macos: use llvm@8 instead of just llvm in paths
- add
linkerscript
key to target JSON files - write a symbol table when writing out the compiler-rt lib
- make Clang header detection more robust
- switch to LLVM 9
- compiler
- fix interface miscompilation with reflect
- fix miscompile of static goroutine calls to closures
- fix
todo: store
panic - fix incorrect starting value for optimized allocations in a loop
- optimize coroutines on non-Cortex-M targets
- fix crash for programs which have heap allocations but never hit the GC
- add support for async interface calls
- fix inserting non-const values in a const global
- interp: improve error reporting
- interp: implement comparing ptrtoint to 0
- cgo
- improve diagnostics
- implement the constant parser (for
#define
) as a real parser - rename reserved field names such as
type
- avoid
"unsafe" imported but not used
error - include all enums in the CGo Go AST
- add support for nested structs and unions
- implement
#cgo CFLAGS
- standard library
reflect
: add implementation of array alignmentruntime
: improve scheduler performance when no goroutines are queuedruntime
: add blocking selectruntime
: implement interface equality in non-trivial casesruntime
: add AdjustTimeOffset to update current timeruntime
: only implement CountString for required platformsruntime
: use MSP/PSP registers for scheduling on Cortex-M
- targets
arm
: add system timer registersatmega
: add port C GPIO supportatsamd21
: correct handling of pins >= 32atsamd21
: i2s initialization fixesatsamd51
: fix clock init codeatsamd51
: correct initialization for RTCatsamd51
: fix pin function selectionatsamd51
: pin method cleanupatsamd51
: allow setting pin mode for each of the SPI pinsatsamd51
: correct channel init and pin map for ADC based on ItsyBitsy-M4feather-m4
: add Adafruit Feather M4 boardhifive1b
: add support for SPI1hifive1b
: fix compiling in simulationlinux
: fix time on arm32metro-m4
: add support for Adafruit Metro M4 Express Airlift boardmetro-m4
: fixes for UART2pinetime-devkit0
: add support for the PineTime dev kitx9pro
: add support for this smartwatchpca10040-s132v6
: add support for SoftDevicepca10056-s140v7
: add support for SoftDevicearduino-nano33
: added SPI1 connected to NINA-W102 chip on Arduino Nano 33 IOT
- command line
- implement 1200-baud UART bootloader reset when flashing boards that support it
- flash using mass-storage device for boards that support it
- implement
tinygo env
- add support for Windows (but not yet producing Windows binaries)
- add Go version to
tinygo env
- update SVD files for up-to-date peripheral interfaces
- compiler
- add
//go:align
pragma - fix bug related to type aliases
- add support for buffered channels
- remove incorrect reflect optimization
- implement copying slices in init interpretation
- add support for constant indices with a named type
- add support for recursive types like linked lists
- fix miscompile of function nil panics
- fix bug related to goroutines
- add
- standard library
machine
: do not check for nil slices inSPI.Tx
reflectlite
: add support for Go 1.13runtime
: implementinternal/bytealg.CountString
sync
: properly handle nilNew
func insync.Pool
- targets
arduino
: fix .bss section initializationfe310
: implementPin.Get
gameboy-advance
: support directly outputting .gba filessamd
: reduce code size by avoiding reflectionsamd21
: do not hardcode pin numbers for peripheralsstm32f103
: avoid issue withtime.Sleep
less than 200µs
- command line
- fix parsing of beta Go versions
- check the major/minor installed version of Go before compiling
- validate
-target
flag better to not panic on an invalid target
- compiler
- implement full slice expression:
s[:2:4]
- fix a crash when storing a linked list in an interface
- fix comparing struct types by making type IDs more unique
- fix some bugs in IR generation
- add support for linked lists in reflect data
- implement
[]rune
to string conversion - implement support for
go
on func values
- implement full slice expression:
- standard library
reflect
: add support for named typesreflect
: add support fort.Bits()
reflect
: add basic support fort.AssignableTo()
reflect
: implementt.Align()
reflect
: add support for struct typesreflect
: fix bug inv.IsNil
andv.Pointer
for addressable valuesreflect
: implement support for array typesreflect
: implementt.Comparable()
runtime
: implement stack-based schedulerruntime
: fix bug in the sleep queue of the schedulerruntime
: implementmemcpy
for Cortex-Mtesting
: implement stubtesting.B
structtesting
: add common test logging methods such as Errorf/Fatalf/Printf
- targets
386
: add support for linux/386 syscallsatsamd21
: make SPI pins configurable so that multiple SPI ports can be usedatsamd21
: correct issue with invalid first reading coming from ADCatsamd21
: add support for reset-to-bootloader using 1200baud over USB-CDCatsamd21
: make pin selection more flexible for peripheralsatsamd21
: fix minimum delay intime.Sleep
atsamd51
: fix minimum delay intime.Sleep
nrf
: improve SPI write-only speed, by making use of double bufferingstm32f103
: fix SPI frequency selectionstm32f103
: add machine.Pin.Get method for reading GPIO valuesstm32f103
: allow board specific UART usagenucleo-f103rb
: add support for NUCLEO-F103RB boarditsybitsy-m4
: add support for this board with a SAMD51 family chipcortex-m
: add support forarm.SystemReset()
gameboy-advance
: add initial support for the GameBoy Advancewasm
: add//go:wasm-module
magic comment to set the wasm module namewasm
: add syscall/js.valueSetIndex supportwasm
: add syscall/js.valueInvoke support
- targets
atsamd21
: add support for the-port
flag in the flash subcommand
- command line
- try more locations to find Clang built-in headers
- add support for
tinygo test
- build current directory if no package is specified
- support custom .json target spec with
-target
flag - use zversion.go to detect version of GOROOT version
- make initial heap size configurable for some targets (currently WebAssembly only)
- cgo
- add support for bitfields using generated getters and setters
- add support for anonymous structs
- compiler
- show an error instead of panicking on duplicate function definitions
- allow packages like github.com/tinygo-org/tinygo/src/* by aliasing it
- remove
//go:volatile
support
It has been replaced with the runtime/volatile package. - allow poiners in map keys
- support non-constant syscall numbers
- implement non-blocking selects
- add support for the
-tags
flag - add support for
string
to[]rune
conversion - implement a portable conservative garbage collector (with support for wasm)
- add the
//go:noinline
pragma
- standard library
os
: addos.Exit
andsyscall.Exit
os
: add several stubsruntime
: fix heap corruption in conservative GCruntime
: add support for math intrinsics where supported, massively speeding up some benchmarkstesting
: add basic support for testing
- targets
- add support for a generic target that calls
__tinygo_*
functions for peripheral access arduino-nano33
: add support for this boardhifive1
: add support for this RISC-V boardreelboard
: add e-paper pinsreelboard
: addPowerSupplyActive
to enable voltage for on-board deviceswasm
: put the stack at the start of linear memory, to detect stack overflows
- add support for a generic target that calls
- command line
- some portability improvements
- make
$GOROOT
more robust and configurable - check for Clang at the Homebrew install location as fallback
- compiler driver
- support multiple variations of LLVM commands, for non-Debian distributions
- compiler
- improve code quality in multiple ways
- make panic configurable, adding trap on panic
- refactor many internal parts of the compiler
- print all errors encountered during compilation
- implement calling function values of a named type
- implement returning values from blocking functions
- allow larger-than-int values to be sent across a channel
- implement complex arithmetic
- improve hashmap support
- add debuginfo for function arguments
- insert nil checks on stores (increasing code size)
- implement volatile operations as compiler builtins
- add
//go:inline
pragma - add build tags for the Go stdlib version
- cgo
- implement
char
,enum
andvoid*
types - support
#include
for builtin headers - improve typedef/struct/enum support
- only include symbols that are necessary, for broader support
- mark external function args as
nocapture
- implement support for some
#define
constants - implement support for multiple CGo files in a single package
- implement
- standard library
machine
: remove microbit matrix (moved to drivers repository)machine
: refactor pins to usePin
type instead ofGPIO
runtime
: print more interface types on panic, includingerror
- targets
arm
: print an error on HardFault (including stack overflows)atsamd21
: fix a bug in the ADC peripheralatsamd21
: add support for I2Sfeather-m0
: add support for this boardnrf51
: fix a bug in I2Cstm32f103xx
: fix a bug in I2Csyscall
: implementExit
on unixtrinket-m0
: add support for this boardwasm
: make main example smallerwasm
: don't cache wasm file in the server, for ease of debuggingwasm
: work around bug #41508 that caused a deadlock while linkingwasm
: add support forjs.FuncOf
- compiler driver
- use
wasm-ld
instead ofwasm-ld-8
on macOS - drop dependency on
llvm-ar
- fix linker script includes when running outside
TINYGOROOT
- use
- compiler
- switch to LLVM 8
- add support for the Go 1.12 standard library (Go 1.11 is still supported)
- work around lack of escape analysis due to nil checks
- implement casting named structs and pointers to them
- fix int casting to use the source signedness
- fix some bugs around
make([]T, …)
with uncommon index types - some other optimizations
- support interface asserts in interp for "math/rand" support
- resolve all func value targets at compile time (wasm-only at the moment)
- cgo
- improve diagnostics
- implement C
struct
,union
, and arrays - fix CGo-related crash in libclang
- implement
C.struct_
types
- targets
- all baremetal: pretend to be linux/arm instead of js/wasm
avr
: improveuintptr
supportcortexm
: implement memmove intrinsic generated by LLVMcortexm
: use the lld linker instead ofarm-none-eabi-ld
darwin
: use custom syscall package that links to libSystem.dylibmicrobit
: add blink examplesamd21
: support I2C1samd21
: machine/atsamd21: correct pad/pin handling when using both UART and USBCDC interfaces at same timestm32f4discovery
: add support for this boardwasm
: support async func valueswasm
: improve documentation and add extra example
- compiler
- fix
objcopy
replacement to include the .data section in the firmware image - use
llvm-ar-7
on Linux to fix the Docker image
- fix
- compiler
- switch to the hardfloat ABI on ARM, which is more widely used
- avoid a dependency on
objcopy
(arm-none-eabi-objcopy
etc.) - fix a bug in
make([]T, n)
wheren
is 64-bits on a 32-bit platform - adapt to a change in the AVR backend in LLVM 8
- directly support the .uf2 firmware format as used on Adafruit boards
- fix a bug when calling
panic()
at init time outside of the main package - implement nil checks, which results in a ~5% increase in code size
- inline slice bounds checking, which results in a ~1% decrease in code size
- targets
samd21
: fix a bug in port B pinssamd21
: implement SPI peripheralsamd21
: implement ADC peripheralstm32
: fix a bug in timekeepingwasm
: fix a bug inwasm_exec.js
that caused corruption in linear memory when running on Node.js.
- compiler
- remove old
-initinterp
flag - add support for macOS
- remove old
- cgo
- add support for bool/float/complex types
- standard library
device/arm
: add support to disable/enable hardware interruptsmachine
: add CPU frequency for nrf-based boardssyscall
: add support for darwin/amd64
- targets
circuitplay_express
: add support for this boardmicrobit
: add regular pin constantssamd21
: fix time function for goroutine supportsamd21
: add support for USB-CDC (serial over USB)samd21
: add support for pins in port Bsamd21
: add support for pullup and pulldown pinswasm
: add support for Safari in example
- command line
- add version subcommand
- compiler
- fix a bug in floating point comparisons with NaN values
- fix a bug when calling
panic
in package initialization code - add support for comparing
complex64
andcomplex128
- cgo
- add support for external globals
- add support for pointers and function pointers
- standard library
fmt
: initial support,fmt.Println
worksmath
: support for most/all functionsos
: initial support (only stdin/stdout/stderr)reflect
: initial supportsyscall
: add support for amd64, arm, and arm64