Warning
Projeto experimental. APIs podem mudar sem aviso.
- Sobre o que se trata o DSLX?
- Qual o objetivo?
- Status do projeto
- Como funciona?
- O que DSLX não é
- Porque surgiu
- Licença
- Como posso contribuir
- Créditos e Referências
DSLX (ou Davi System: Lua XML) é um módulo que fornece ao Lua a capacidade de interpretar arquivos .dslx no qual permite ler código Lua e transformar o XML em Lua puro num mesmo arquivo e depois executa, parecido com o JSX.
graph TD;
A("codígo em DSLX") --> B("interpreta o lua");
A --> C("interpreta o XML");
C --> D("Transforma em Lua");
D --> E("junta os dois")
B --> E
E --> F("executa")
Fazer uma linguagem JSX-like para Lua, com a melhor eficiência, performance, dentro do que for possível, focando em Lua puro.
O projeto está em estado experimental, mesmo com uma base da estrutura bem sólida, muitas APIs e muitos conceitos podem mudar a qualquer momento. E bugs são esperados.
No .dslx qualquer função definida no ambiente do Lua pode ser chamada no formato do XML.
-- definindo em Lua
function teste(props)
local arg1, children = props.arg1, props.children
return arg1 + (children or 0)
end
-- chamando em XML
local res = <teste arg1={1}> {2} </teste>;
print(res) -- isso retornará para o usuário: 3
-- chamando self-close
print(<teste arg1={2}/>) -- isso mostra pro usuário: 2
Quando seu projeto importa o módulo do DSLX ele carrega o loader do DSLX, sobrepondo o require no ambiente no qual foi importado, permitindo importar o .dslx da mesma forma do .lua
-
não é html, html é uma linguagem web para criação de páginas, o DSLX é um Lua+XML. e XML é uma linguagem de estruturação rígida para sistemas.
-
não é um substituto do Lua, o DSLX é para funcionar em conjunto ao Lua
eu estava afim de desenvolver ferramentas Lua separadas para criar uma framework web na mesma pegada do next.js e react. para isso pensei primeiro em criar um JSX-like so que Lua. comecei pincelando a ideia manualmente e depois fui pedindo ajuda ao copilot. caso queira da uma olhada como ta o processo de criação da framework: Pudimweb
Esse módulo é MIT. Sinta-se livre para brincar e fazer o que quiser a sua fork desse projeto, mantendo os créditos :)
Qualquer um pode contribuir com o projeto. Ao encontrar qualquer problema/bug ou se tiver alguma ideia de implementação, pode abrir uma issue para relatar o problema ou fazer um fork com sua implementação.
Criado e mantido por Davi Passos.
versão em inglês joão victor
- chatgpt (5, 5.1 e 5.1-codex)
- claude 4.5 (opus e sonnet)
- gemini 3.0 pro