0Pricing
Lua Academy · Aula

Gerenciamento de estado e tratamento de erros

Use lua_pcall para chamadas protegidas e trate erros na camada C.

Gerenciamento de estado e tratamento de erros é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Vários estados Lua

Você pode executar várias instâncias de lua_State no mesmo processo. Cada uma é totalmente independente: possui globais e pilhas separadas e, por padrão, não compartilha memória.

Estados de threads

lua_newthread(L) cria uma thread filha (corrotina) que compartilha o mesmo ambiente global, mas tem sua própria pilha. É assim que as corrotinas Lua são implementadas em C.

Compartilhando dados entre estados

Os dados não podem ser passados diretamente entre estados Lua independentes. Serialize-os em strings ou use estruturas de memória compartilhada no lado C, acessíveis por meio de userdata.

Chamadas protegidas versus chamadas brutas

lua_pcall captura erros (usa setjmp/longjmp internamente). lua_call propaga os erros e encerra o programa. Sempre use lua_pcall em produção.

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

Objetos de erro

Os erros em Lua podem ser qualquer valor — não apenas strings. error({code=404, msg="not found"}) coloca uma tabela como erro. O código C a lê da pilha quando pcall falha.

Manipulador de pânico

Se um erro escapar de um pcall (por exemplo, de uma função C chamada sem proteção), Lua chama o manipulador de pânico definido por lua_atpanic(L, fn) antes de ser encerrado.

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

Restauração da pilha em caso de erro

Após um erro de lua_pcall, a pilha é restaurada ao estado anterior à chamada (sem a função e os argumentos, mas com o objeto de erro no topo).

Limpeza do estado

Sempre feche o estado com lua_close(L) quando terminar. Isso aciona todos os finalizadores __gc e libera toda a memória alocada.

Segurança de threads

Um estado Lua não é seguro para uso em threads. Nunca chame duas funções da API C no mesmo estado simultaneamente. Use um estado por thread do OS ou um mutex para serializar o acesso.

Alocador de memória

Por padrão, Lua usa realloc. Forneça um alocador personalizado com lua_newstate(allocFn, ud) para rastrear a memória, impor limites ou usar pools personalizados.

Sandbox com vários estados

Execute código não confiável em um estado Lua novo e isolado, sem bibliotecas padrão abertas. Qualquer falha ou esgotamento de recursos ficará contido nesse estado.

Pergunta sobre tratamento de erros

Qual é a diferença entre lua_call e lua_pcall?

Recapitulação: gerenciando estados e erros

Use lua_pcall (nunca lua_call) em produção. Defina um manipulador de pânico para recuperação em último caso. Mantenha um estado por thread. Use vários estados isolados para criar sandboxes. Sempre chame lua_close para fazer a limpeza.

Perguntas Frequentes

A aula “Gerenciamento de estado e tratamento de erros” é grátis?

Sim — o texto completo de “Gerenciamento de estado e tratamento de erros” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Gerenciamento de estado e tratamento de erros”?

Use lua_pcall para chamadas protegidas e trate erros na camada C. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Gerenciamento de estado e tratamento de erros”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Modelo de pilha da API C do Lua
  2. Chamando funções Lua a partir de C
  3. Registrando funções C no Lua
  4. Gerenciamento de estado e tratamento de erros
← Voltar para Lua Academy