Lua Academy · Lezione

Gestione dello stato e degli errori

Utilizzi lua_pcall per le chiamate protette e gestisca gli errori nel livello C.

Lezione 4 di 413 passaggi

Gestione dello stato e degli errori è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Più stati Lua

È possibile eseguire più istanze di lua_State nello stesso processo. Ognuna è completamente indipendente: globali separati, stack separati e nessuna memoria condivisa per impostazione predefinita.

Stati dei thread

lua_newthread(L) crea un thread figlio (coroutine) che condivide lo stesso ambiente globale, ma dispone di uno stack proprio. È così che le coroutine Lua vengono implementate in C.

Condivisione dei dati tra stati

I dati non possono essere passati direttamente tra stati Lua indipendenti. Li serializzi in stringhe oppure utilizzi strutture di memoria condivisa lato C accessibili tramite userdata.

Chiamate protette e chiamate dirette

lua_pcall intercetta gli errori (utilizza setjmp/longjmp internamente). lua_call propaga gli errori e interrompe il programma. Utilizzi sempre lua_pcall in produzione.

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

Oggetti errore

In Lua, gli errori possono essere valori qualsiasi, non solo stringhe. error({code=404, msg="not found"}) inserisce una tabella come errore. In caso di errore di pcall, il codice C la legge dallo stack.

Gestore di panic

Se un errore sfugge a una pcall, ad esempio da una funzione C chiamata senza protezione, Lua chiama il gestore di panic impostato tramite lua_atpanic(L, fn) prima di interrompersi.

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

Ripristino dello stack in caso di errore

Dopo un errore di lua_pcall, lo stack viene ripristinato allo stato precedente alla chiamata, meno la funzione e gli argomenti, più l'oggetto errore in cima.

Pulizia dello stato

Chiuda sempre lo stato con lua_close(L) al termine. Questo attiva tutti i finalizzatori __gc e libera tutta la memoria allocata.

Sicurezza dei thread

Uno stato Lua non è thread-safe. Non chiami mai contemporaneamente due funzioni della C API sullo stesso stato. Utilizzi uno stato per ogni thread del sistema operativo oppure un mutex per serializzare l'accesso.

Allocatore di memoria

Per impostazione predefinita, Lua utilizza realloc. Fornisca un allocatore personalizzato con lua_newstate(allocFn, ud) per monitorare la memoria, imporre limiti o utilizzare pool personalizzati.

Sandbox con più stati

Esegua il codice non attendibile in uno stato Lua nuovo e isolato, senza aprire le librerie standard. Qualsiasi arresto anomalo o esaurimento delle risorse rimane confinato a quello stato.

Domanda sulla gestione degli errori

Qual è la differenza tra lua_call e lua_pcall?

Riepilogo: gestione dello stato e degli errori

Utilizzi lua_pcall (mai lua_call) in produzione. Imposti un gestore di panic per il recupero come ultima risorsa. Mantenga uno stato per ogni thread. Utilizzi più stati isolati per la sandbox. Chiami sempre lua_close per eseguire la pulizia.

Gratis per iniziare

Impara Lua con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
40
Lezioni
159

Domande Frequenti

La lezione «Gestione dello stato e degli errori» è gratuita?

Sì — il testo completo di «Gestione dello stato e degli errori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Gestione dello stato e degli errori»?

Utilizzi lua_pcall per le chiamate protette e gestisca gli errori nel livello C. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Gestione dello stato e degli errori»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Modello dello stack dell'API C di Lua
  2. Chiamata delle funzioni Lua da C
  3. Registrazione delle funzioni C in Lua
  4. Gestione dello stato e degli errori
← Torna a Lua Academy