← L'édition
DevNouveau2 min de lecture

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 »

Illustration de l'article — tinygo.org
Image : tinygo.org

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 recover sur 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.