TinyGo 0.42 comble son retard avec la gestion du recover
La version 0.42 de TinyGo apporte enfin la prise en charge de la fonction recover, permettant d'intercepter les paniques à l'exécution sur microcontrôleurs. Le compilateur embarqué intègre également le support de Go 1.27, migre vers LLVM 22 et permet d'exécuter des applications Go directement au démarrage UEFI.
Fil « Publication de la version 0.42 de TinyGo avec gestion de la fonction recover »

Le projet TinyGo, le compilateur Go adapté aux microcontrôleurs et au WebAssembly (format binaire exécutable pour runtime léger), passe en version 0.42. Cette mise à jour comble l'un des plus anciens écarts avec la distribution officielle de Go : la capacité d'intercepter les paniques système (runtime panics) à l'exécution.
Jusqu'à présent, un déréférencement de pointeur nul ou une division par zéro arrêtait immédiatement le programme sur la carte. Désormais, TinyGo 0.42 prend en charge la fonction recover() associée aux instructions defer (exécutions différées en fin de fonction). La capture gère les accès hors limites dans les tranches (slices), les cartes (maps) ou les accès canaux (channels). Seules les erreurs fatales comme le dépassement de mémoire (out of memory) restent irrécupérables. Cette avancée débloque également les fonctions t.Skip et t.Fatal dans le paquet de tests d'origine.
Un exemple d'interception de panique
Voici comment s'utilise désormais l'interception d'erreur sur microcontrôleur :
package main
import "fmt"
func SafeExecute() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Panique interceptée :", r)
}
}()
var ptr *int
*ptr = 42 // Déréférencement nul, désormais capturable
}
Modernisation de la chaîne de compilation
Outre la gestion des exceptions, cette version aligne TinyGo sur les dernières évolutions de l'écosystème Go et de son outillage :
- Prise en charge de Go 1.27 : support des méthodes génériques grâce à la mise à niveau des outils d'analyse de code.
- Passage à LLVM 22 : adoption de la dernière version de l'infrastructure de compilation LLVM (Low Level Virtual Machine), tout en conservant la compatibilité avec LLVM 19 et 20.
- Gestion des plateformes : ajout d'un gestionnaire d'exceptions vectorisées sur Windows et support du
recoversur l'architecture processeur ouverte riscv64.
Du démarrage UEFI aux puces ESP32 et STM32
L'une des nouveautés expérimentales majeures est l'arrivée d'une cible UEFI (Unified Extensible Firmware Interface, le micrologiciel qui initialise le matériel avant le lancement du système d'exploitation). Il devient possible d'écrire un programme en Go et de l'exécuter directement au boot de la machine, les goroutines (threads légers de Go) étant gérées par l'ordonnanceur par défaut.
Côté microcontrôleurs, les puces ESP32 bénéficient du support du Wi-Fi (via le paquet espradio), du Bluetooth sur les variantes C3/S3, ainsi que du flash XIP (eXecute In Place, mécanisme exécutant le code directement depuis la mémoire flash sans le charger en mémoire RAM). La gamme STM32 reçoit quant à elle un nouveau pilote USB OTG et la prise en charge de nouvelles cartes de développement.