0Pricing
Lua Academy · Leçon

Gérer l’état et les erreurs

Utilisez lua_pcall pour effectuer des appels protégés et gérer les erreurs dans la couche C.

Gérer l’état et les erreurs est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Plusieurs états Lua

Vous pouvez exécuter plusieurs instances de lua_State dans le même processus. Chacune est totalement indépendante : variables globales et piles distinctes, sans mémoire partagée par défaut.

États de threads

lua_newthread(L) crée un thread fils (coroutine) qui partage le même environnement global, mais possède sa propre pile. C’est ainsi que les coroutines Lua sont implémentées en C.

Partager des données entre états

Les données ne peuvent pas être transmises directement entre des états Lua indépendants. Sérialisez-les en chaînes ou utilisez des structures de mémoire partagée côté C, accessibles via des données utilisateur.

Appels protégés ou bruts

lua_pcall intercepte les erreurs (en utilisant setjmp/longjmp en interne). lua_call propage les erreurs et interrompt le programme. Utilisez toujours lua_pcall en production.

// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
  const char *err = lua_tostring(L, -1);
  lua_pop(L, 1);
  // handle error
}

Objets d’erreur

Les erreurs en Lua peuvent être n’importe quelle valeur — pas seulement des chaînes. error({code=404, msg="not found"}) empile une table comme erreur. Le code C la lit sur la pile en cas d’échec de pcall.

Gestionnaire de panique

Si une erreur échappe à un pcall (par exemple depuis une fonction C appelée sans protection), Lua appelle le gestionnaire de panique défini via lua_atpanic(L, fn) avant de s’interrompre.

// C code
lua_atpanic(L, function(lua_State *L) {
  fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
  exit(1);
  return 0;
});

Restauration de la pile en cas d’erreur

Après une erreur de lua_pcall, la pile est restaurée dans l’état qu’elle avait avant l’appel (moins la fonction et les arguments, plus l’objet d’erreur au sommet).

Nettoyage de l’état

Fermez toujours l’état avec lua_close(L) lorsque vous avez terminé. Cela déclenche tous les finaliseurs __gc et libère toute la mémoire allouée.

Sécurité des threads

Un état Lua n’est pas sûr pour les threads. N’appelez jamais simultanément deux fonctions de l’API C sur le même état. Utilisez un état par thread du système d’exploitation, ou un mutex pour sérialiser les accès.

Allocateur mémoire

Par défaut, Lua utilise realloc. Fournissez un allocateur personnalisé avec lua_newstate(allocFn, ud) pour suivre la mémoire, imposer des limites ou utiliser des zones d’allocation personnalisées.

Bac à sable avec plusieurs états

Exécutez le code non fiable dans un état Lua nouveau et isolé, sans ouvrir les bibliothèques standard. Tout plantage ou épuisement des ressources reste limité à cet état.

Question sur la gestion des erreurs

Quelle est la différence entre lua_call et lua_pcall ?

Récapitulatif : gérer l’état et les erreurs

Utilisez lua_pcall (jamais lua_call) en production. Définissez un gestionnaire de panique pour une récupération en dernier recours. Utilisez un état par thread. Utilisez plusieurs états isolés pour le bac à sable. Appelez toujours lua_close pour effectuer le nettoyage.

Questions Fréquemment Posées

La leçon « Gérer l’état et les erreurs » est-elle gratuite ?

Oui — le texte complet de « Gérer l’état et les erreurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Gérer l’état et les erreurs » ?

Utilisez lua_pcall pour effectuer des appels protégés et gérer les erreurs dans la couche C. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Gérer l’état et les erreurs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Modèle de pile de l’API C de Lua
  2. Appeler des fonctions Lua depuis C
  3. Enregistrer des fonctions C dans Lua
  4. Gérer l’état et les erreurs
← Retour à Lua Academy