Skip to content

Releases: tinygo-org/tinygo

Release 0.7.1

27 Jul 17:05
Compare
Choose a tag to compare

This is a small bugfix release that fixes a problem on macOS, discovered while preparing for the hardware hack day on GopherCon.

  • targets
    • atsamd21: add support for the -port flag in the flash subcommand

Release 0.7.0

17 Jul 15:13
515daa7
Compare
Choose a tag to compare

Version 0.7.0 has many smaller improvements that you can see below. Some of the highlights include initial support for tinygo test, support for garbage collection in most targets including WebAssembly, and the addition of the HiFive1 rev B board, which is based on the new RISC-V architecture.

0.7.0

  • 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: add os.Exit and syscall.Exit
    • os: add several stubs
    • runtime: fix heap corruption in conservative GC
    • runtime: add support for math intrinsics where supported, massively
      speeding up some benchmarks
    • testing: 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 board
    • hifive1: add support for this RISC-V board
    • reelboard: add e-paper pins
    • reelboard: add PowerSupplyActive to enable voltage for on-board devices
    • wasm: put the stack at the start of linear memory, to detect stack
      overflows

Release 0.6.0

29 May 18:34
Compare
Choose a tag to compare

Version 0.6.0 again has many improvements. Big changes are much better CGo support, support for js.FuncOf (Go 1.12+), and support for two new boards: the Adafruit Feather M0 and the Adafruit Trinket M0. Other than that, there were lots of smaller improvements and bug fixes.

0.6.0

  • 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 and void* 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
  • standard library
    • machine: remove microbit matrix (moved to drivers repository)
    • machine: refactor pins to use Pin type instead of GPIO
    • runtime: print more interface types on panic, including error
  • targets
    • arm: print an error on HardFault (including stack overflows)
    • atsamd21: fix a bug in the ADC peripheral
    • atsamd21: add support for I2S
    • feather-m0: add support for this board
    • nrf51: fix a bug in I2C
    • stm32f103xx: fix a bug in I2C
    • syscall: implement Exit on unix
    • trinket-m0: add support for this board
    • wasm: make main example smaller
    • wasm: don't cache wasm file in the server, for ease of debugging
    • wasm: work around bug #41508 that caused a deadlock while linking
    • wasm: add support for js.FuncOf

Release 0.5.0

20 Apr 18:53
Compare
Choose a tag to compare

Version 0.5.0 has many big and small improvements. The headline changes include support for the Go standard library 1.12 in addition to the existing Go 1.11 support and a switch to LLVM 8 which improves WebAssembly support. Other notable changes are support for the stm32f4discovery and dropping the dependency on the GNU toolchain for ARM microcontrollers.

  • compiler driver
    • use wasm-ld instead of wasm-ld-8 on macOS
    • drop dependency on llvm-ar
    • fix linker script includes when running outside TINYGOROOT
  • 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: improve uintptr support
    • cortexm: implement memmove intrinsic generated by LLVM
    • cortexm: use the lld linker instead of arm-none-eabi-ld
    • darwin: use custom syscall package that links to libSystem.dylib
    • microbit: add blink example
    • samd21: support I2C1
    • samd21: machine/atsamd21: correct pad/pin handling when using both UART
      and USBCDC interfaces at same time
    • stm32f4discovery: add support for this board
    • wasm: support async func values
    • wasm: improve documentation and add extra example

Release 0.4.1

15 Mar 13:06
Compare
Choose a tag to compare

Version 0.4.1 fixes two important bugs in the compiler. One causes the .data section to not get flashed to the chip in many cases, and the other fixes a problem in the Docker container.

  • compiler
    • fix objcopy replacement to include the .data section in the firmware image
    • use llvm-ar-7 on Linux to fix the Docker image

Release 0.4.0

09 Mar 20:39
Compare
Choose a tag to compare

Version 0.4.0 has improved support for samd21-based boards and has various compiler improvements.

It currently still requires Go 1.11, support for Go 1.12 will be added in a future release.

  • 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) where n 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 pins
    • samd21: implement SPI peripheral
    • samd21: implement ADC peripheral
    • stm32: fix a bug in timekeeping
    • wasm: fix a bug in wasm_exec.js that caused corruption in linear memory when running on Node.js.

Release 0.3.0

27 Feb 12:48
1c68da8
Compare
Choose a tag to compare

Version 0.3.0 has added support for macOS and has greatly improved support for samd21-based boards.
It currently still depends on Go 1.11, support for Go 1.12 will be added in a future release.

  • compiler
    • remove old -initinterp flag
    • add support for macOS
  • cgo
    • add support for bool/float/complex types
  • standard library
    • device/arm: add support to disable/enable hardware interrupts
    • machine: add CPU frequency for nrf-based boards
    • syscall: add support for darwin/amd64
  • targets
    • circuitplay_express: add support for this board
    • microbit: add regular pin constants
    • samd21: fix time function for goroutine support
    • samd21: add support for USB-CDC (serial over USB)
    • samd21: add support for pins in port B
    • samd21: add support for pullup and pulldown pins
    • wasm: add support for Safari in example

Release 0.2.0

08 Feb 16:55
fbc2099
Compare
Choose a tag to compare

Release 0.2.0 has greatly improved standards library support.

  • 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 and complex128
  • cgo
    • add support for external globals
    • add support for pointers and function pointers
  • standard library
    • fmt: initial support, fmt.Println works
    • math: support for most/all functions
    • os: initial support (only stdin/stdout/stderr)
    • reflect: initial support
    • syscall: add support for amd64, arm, and arm64

Initial release

01 Feb 13:04
930de54
Compare
Choose a tag to compare

This is the first release of TinyGo!