Event loop cooperativo em Lua + IO nativo e utilidades em Go - Lua extended library

28 views
Skip to first unread message

Yago Crispim

unread,
Jul 28, 2026, 9:51:52 PM (3 days ago) Jul 28
to Lua BR
Desenvolvi esse projeto para poder fazer com Lua puro o que normalmente faço em nodejs.

Pesquisando encontrei várias iniciativas, mas sempre com um setup um tanto trabalhoso ou dependentes de um runtime personalizado(Luvit ou OpenResty)

Repo: https://github.com/YagoCrispim/lua_extended_library

O que busquei neste projeto foi ter IO assíncrono, diversas utilidades e principalmente, algo que pudesse ser adicionado em qualquer projeto em andamento sem depender de package-manager ou scripts de build.

O projeto é escrito em Lua e Go. Do lado do Lua, há um event loop cooperativo e os bindings para as funções nativas. Do lado do Go, está o código nativo, onde uso goroutines para executar as tarefas de IO.

Estou adicionando funcionalidades que uso nos meus projetos pessoais, além de outras que acho interessante ter. Creio que pode ser útil para quem está querendo desenvolver para web, como vi em conversas recentes por aqui, tendo em vista que Go é reconhecido nessa area.

Implementado até o momento: FS, OS, Path, Timer, Crypto, String, Regex
Implementação parcial: HTTP
Pendente: JSON, Net/TCP

Leandro Vital Catarin

unread,
Jul 29, 2026, 11:42:13 AM (3 days ago) Jul 29
to Lua BR

O suporte a I/O assíncrono em Lua não é uma novidade. Projetos como lua-http, construído sobre cqueues, já oferecem um modelo cooperativo baseado em corrotinas para aplicações cliente e servidor HTTP. O próprio cqueues disponibiliza uma infraestrutura para sockets, DNS, TLS, timers e outros mecanismos de I/O assíncrono.

Também existem iniciativas com objetivos semelhantes, como o Luvit, que oferece um conjunto de APIs para desenvolvimento de aplicações de rede e web inspirado no ecossistema Node.js.

Nesse contexto, o lua_extended_library se posiciona como mais uma alternativa dentro desse ecossistema. Sua arquitetura combina uma camada escrita em Lua, responsável pelo event loop cooperativo e pelos bindings, com uma camada nativa desenvolvida em Go, responsável pela execução das operações de I/O utilizando goroutines.

Yago Crispim

unread,
Jul 29, 2026, 1:36:31 PM (3 days ago) Jul 29
to lua...@googlegroups.com
Resposta gerada por ia? Kkk

Leandro Vital Catarin

unread,
Jul 29, 2026, 1:53:03 PM (3 days ago) Jul 29
to Lua BR
Yago, não foi gerada por IA, mas pedi para o chat revisar ser não tinha nenhum erro ortográfico ou concordância, acabou ficando muito formal kkkkk 

Leandro Vital Catarin

unread,
Jul 29, 2026, 2:12:22 PM (3 days ago) Jul 29
to Lua BR
Mas sobre o suporte a I/O async em Lua, não é novidade. Eu já uso Lua com o lua-http, que implementa sobre cqueues, e o utilizo para obter processos com sockets. Já o Luvit é implementado sobre LuaJIT/Lua 5.1, inspirado no Node.js. Essas implementações fazem o mesmo que a sua biblioteca, que implementa uma camada em Lua com chamadas para Go utilizando goroutines.

obs: esse texto não foi escrito com IA. 

Yago Crispim

unread,
Jul 29, 2026, 4:33:24 PM (3 days ago) Jul 29
to lua...@googlegroups.com
Tranquilo kkk
Perguntei se era só Ia pq não ia nem responder.

Então, a maior motivação que tive para fazer esse projeto foi a conveniência.

Para usar o lua-http eu preciso do luarocks e isso por si só já é uma dor de cabeça e muitas vezes as builds quebram e a instalação do Luarocks quebra(Principalmente no Windows).

Já o Luvit tentei usar e não consegui por causa de alguns também.

Devido a toda essa dor de cabeça, quando quero fazer algo como manipular arquivos eu prefiro usar os.execute ao invés de qualquer outra coisa porque é sempre um pé no saco, mas eu queria algo mais confiável e portável.

Com essa lib a única coisa que preciso para usar tudo isso é ter dois arquivos: a biblioteca compartilhada e o arquivo lua com os tipos e os bindings.

Sem lua rocks, sem runtime customizada e sem dor de cabeça. Tudo resolvido com um simples require.

Outra coisa muito importantes pra mim: usar lua PUC Rio oficial. Nada de projeto abandonado ou ideias de estender a sintaxe como estão planejando para o LuaJIT.

Ainda não fiz, mas irei disponibilizar as builds para cada OS na página de release do github. Assim a pessoal não precisa de nada no sistema dela além de Lua e o binário da biblioteca.

A “standard library” vem por padrão nas linguagens. Escolhi o nome “extended library” para tentar refletir que esse projeto deve ser tão simples de usar que pareça algo natural da linguagem e não um ambiente totalmente diferente como o Luvit ou que precise de setup complicado como o LuaRocks.

E http é só uma das coisas que são async nesse projeto.

Preciso melhorar readme.md para ontem kkkk

Yago Crispim

unread,
Jul 29, 2026, 4:39:58 PM (3 days ago) Jul 29
to lua...@googlegroups.com
Inclusive, se quiser testar: pode executar o “make build” e “make test” para rodar os testes. A build da lib fica na pasta dist.

Pode copiar os arquivos de build para outro projeto e testar tbm. O binário é estático.

Na pasta de”tests” tem os testes escritos em lua que já servem como exemplos de uso também.
Reply all
Reply to author
Forward
0 new messages