Há algum tempo comecei um projeto chamado Exper.
A ideia era simples: aprender mais sobre interpretadores e design de linguagens criando minha própria linguagem de programação.
No início ela era extremamente simples, mas aos poucos foi ganhando recursos como:
- Variáveis
- Funções
- Structs
- Loops
- Condicionais
- Listas
- Interpolação de strings
Hoje a Exper já consegue executar programas relativamente grandes.
O que mais tem me ajudado no desenvolvimento não são exemplos pequenos, mas sim um RPG de texto que estou criando para testar a linguagem.
Esse RPG força a implementação de recursos reais:
- Inventário
- Objetos
- Combate
- Estruturas de dados
- Passagem por referência
- Manipulação de listas
Curiosamente, a maior parte dos bugs aparece apenas quando tentamos construir algo real.
Por exemplo, recentemente descobri problemas relacionados a passagem por referência e mutabilidade ao implementar um sistema de inventário para poções.
Esse tipo de problema dificilmente apareceria em exemplos simples de calculadora.
Exemplo da linguagem
struct Player {
name,
hp = 100
}
player = Player()
player.name = "Callebe"
console.log("{player.name} possui {player.hp} HP")
O que aprendi até agora
Criar uma linguagem é muito mais difícil do que parece.
Quando você acredita que terminou:
- Surge um problema de escopo.
- Depois um problema de mutabilidade.
- Depois um problema de parsing.
- Depois um problema de listas.
- Depois um problema de referências.
Mas é justamente isso que torna o projeto interessante.
Próximos passos
- Melhorar suporte a métodos
- Operadores compostos
- Sistema de módulos
- Classes
- Exceções
O objetivo não é criar um concorrente para Python ou JavaScript.
O objetivo é aprender como essas linguagens funcionam internamente.
E, até agora, a Exper tem sido uma excelente professora.
Código completo aqui
Top comments (0)