DEV Community

Callebe Josué Cantú
Callebe Josué Cantú

Posted on

Estou criando minha própria linguagem de programação em Python

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")
Enter fullscreen mode Exit fullscreen mode

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)