Uma linguagem de programação em italiano? Interpretada em PHP? Como assim?
Olá, pessoas!
Recentemente voltei a estudar design de linguagens de programação. Acho que é um conhecimento que vale a pena pra qualquer programador, independente da área: entender não só por cima, mas também por baixo dos panos, como as linguagens funcionam, como são construídas e como rodam. Pode ser que você nunca chegue a usar esse conhecimento no dia a dia, mas isso não é motivo pra deixar de aprender.
Crafting Interpreters
Se você quer começar a entender e construir suas próprias linguagens, recomendo demais o Crafting Interpreters. É uma das portas de entrada mais didáticas que existem no assunto.
Confesso que a minha primeira linguagem não nasceu da leitura do livro, e sim depois de ver o Alexey Kutepov, o Tsoding, construindo uma linguagem stack-based inspirada em Forth em Python. Fui atrás e criei a Beremiz, uma stack-based feita em Lua, inspirada no Porth do próprio Tsoding.
E aí entra a Codice
Dessa vez decidi construir uma linguagem com sintaxe "c-like". Chamei ela de Codice, "código" em italiano.
A ideia por trás do nome não é só estética: ao mesmo tempo que exercito conhecimento de construção de linguagens, aproveito pra estudar italiano, já que todas as palavras-chave, mensagens de erro e nomes de conceitos da linguagem são em italiano. E quem sabe também sirva de porta de entrada pra falantes do idioma que queiram aprender programação, do mesmo jeito que temos o Portugol, a Égua, o Delégua e o Birl para o português:
- https://pt.wikipedia.org/wiki/Portugol
- https://egua.dev/
- https://github.com/designLiquido/delegua
- https://birl-language.github.io/
Por que PHP?
Porque a Codice não tem nenhuma ambição de ser uma linguagem útil ou com aplicação real, é uma toy language, feita por diversão e aprendizado. Muita gente que está começando na programação acha que precisa aprender ferramentas ou linguagens específicas pra "poder" construir certas coisas, quando na real você pode validar qualquer ideia na linguagem que você já conhece, do seu jeito.
Óbvio que uma linguagem interpretada em PHP nunca vai ter a performance de algo feito "do jeito certo", mas performance nunca foi o objetivo aqui. Depois de madura, nada impede a Codice de ser reescrita em outra linguagem, compilada para bytecode ou até rodando sobre a JVM (o que, aliás, pretendo fazer no futuro).
Um gostinho da sintaxe
Hoje a Codice já tem lexer, parser e um interpretador tree-walking rodando de ponta a ponta, com tipos stringa, booleano, nullo, intero e decimale:
stampa("Interi: ", 42, ", ", 1_000_000);
stampa("Decimali: ", 3.14, ", ", .5, ", ", 1_234.567_89, ", ", 67.);
stampa("Booleani: ", vero, ", ", falso);
stampa("Nullo: ", nullo);
Saída:
Interi: 42, 1000000
Decimali: 3.14, 0.5, 1234.56789, 67.0
Booleani: vero, falso
Nullo: nullo
Ainda não tem variáveis, controle de fluxo nem funções definidas pelo usuário, ainda está bem no início. Mas o pipeline completo já funciona, incluindo um REPL simples.
Acompanhe o desenvolvimento
O código está no meu GitHub, aberto e público: https://github.com/AdaiasMagdiel/codice
É isso, galera. Até mais e obrigado pelos peixes!