TinyGoは本家Go言語の組み込み向けのサブセット版。
本家Go言語はPOSIX-OSに対する機能依存が大きく、リッチなランタイムを持っています。その為、本来はOSを持たない組み込み用途には不向きでした。
TinyGoはPOSIX-OSに依存する機能を簡易的な実装で代用しつつLLVM(コンパイラを作る為のフレームワーク)を使って組み込み向けアーキテクチャをサポートするGo言語のコンパイラです。
つまりサポートするCPUアーキテクチャはLLVMがサポートするものを前提にしています。
興味深い
現状の主なサポートターゲット
- Arduino Uno
- BBC:Microbit
- BLUEPILL
- CIRCUIT PLAYGROUND EXPRESS
- DIGISPARK
- ITSYBITSY M0
- PCA10031
- PCA10040
- PCA10056
- NRF52840-MDK
- REEL BOARD
- WebAssembly
Nordic系チップへの対応が優先的に進んでいます。 WebAssembly出力はLLVMがサポートしていたこともあり副産物的にサポートされました。
本家のGo言語は最近WebAssembly出力が可能になったんですが、成果物のサイズがTinyGoの方が十分の一程度とコンパクトなのでWebへの利用が拡大しそうな兆候が現れてきています。