TinyGo

「Go を制約の厳しい場所で動かすために、互換性を一部捨てて作り直した代替コンパイラ」という発想。マイコン・WASM・CLI のようにバイナリサイズと実行環境が厳しいターゲットを、Go の言語のまま狙う。実装・ソース・バージョンの事実は github-com-tinygo-org-tinygo、ここは位置づけと設計思想を扱う。

Go コンパイラの地図

Go の実装は1つではない。狙いで棲み分ける。

実装バックエンド性格向く先
gc(公式)自前高速ビルド・並行 GC・完全互換サーバ/デスクトップ
gccgoGCCGCC 最適化資産を利用既存 GCC 環境
TinyGoLLVM極小バイナリ・サブセットMCU・WASM/WASI・CLI

公式 gc が「速く・完全に」なら、TinyGo は「小さく・届く範囲を広げる」方向に振った別実装。

設計思想: サブセット + 専用ランタイム

TinyGo の本質は「フル互換を目指さない」決断。言語の一部機能(reflect 多用・一部 stdlib)を切り、ランタイム(goroutine スケジューラ・GC)をターゲット向けに作り替えることで、gc では数 MB になる出力を KB 級にする。

これは 制約と引き換えに別の自由を得る典型 — 「どこでも動く完全互換」を捨て、「極小・組込み可能」という到達範囲を買う。だから判断軸は明快:

一般化: 「大きな言語を小さく作り直す」

TinyGo の戦略は Go 固有でない。汎用言語の機能を削り、制約環境(組込み/エッジ)向けの軽量実装を別に作るという反復するパターンで、Ruby に対する mruby と同型。汎用性を捨ててニッチを取りに行く、言語実装の一系譜。

関連

Graph