Filo
Linguagem de script mínima, determinística e segura para embutir regras e validações em aplicações Go.
Construí o Filo para um problema que aparece toda vez que tento dar poder de script ao usuário final sem destruir o servidor.
Os caminhos óbvios são ruins: ou a linguagem embutida é fraca demais para ser útil, ou poderosa demais para ser segura. Eu queria a outra opção – pequena o suficiente para o usuário comum escrever regras curtas (validações, expressões, lógica de campo) e fechada o suficiente para não derrubar nada.
Filo é um Lisp com sintaxe mínima. Escolhi Lisp porque é a sintaxe mais barata de implementar e a mais previsível para quem nunca programou. (+ 1 2) é evidente. (if (< idade 18) "menor" "adulto") também. Não dá pra esconder lógica em ornamento sintático.
O runtime nasceu com restrições explícitas: limite de passos, limite de recursão, timeout via context.Context, recover() em volta do executor. Nenhum script causa panic no servidor. Sem acesso a arquivo, rede ou syscall – só o que eu registro explicitamente como builtin a partir do Go.
Casos de uso que motivaram o projeto:
- builder genérico estilo RAD;
- plataforma de RPG com regras customizáveis;
- aplicações configuráveis por usuário ou administrador.
O nome vem do italiano filo (“fio”). Pronúncia: FEE-lo.
A documentação completa, builtins, exemplos e a API de integração com Go estão no repositório.