Executando verificação de segurança...
6

Como eu criei um compilador em Python (é sério)


Sim, eu criei uma linguagem de programação em Python!

Parece algo estranho de se dizer mas eu tive a mirabolante ideia de criar do zero uma linguagem de programação compilada e implementar o compilador em Python! Mas como eu fiz isso?

A mágica do LLVM...

Basicamente, essa é a resposta. Eu utilizei a biblioteca llvmlite para fazer com que o programa fosse compilado para LLVM e ter pelo menos uma performance adequada...

A implementação atual da linguagem é de aproximadamente 800 linhas de código Python.

Recomendo que leia o meu outro post sobre LLVM para entender melhor o que ele é e como utilizá-lo para aprender mais sobre computação aqui

Como funciona?

A linguagem que eu inventei se chama Pile (pilha em Inglês) e tem tudo a ver sobre como ela funciona!

Essa linguagem utiliza um paradigma de programação praticamente esotérico e muito esquecido. É utilizado o paradigma baseado em pilha (stack-oriented) como o único e principal paradigma da linguagem. Eu recomendo que acessem o repositório oficial para darem uma olhada!

Encerramento

Muito obrigado por ler e visite o repositório original em marc-dantas/pile

Carregando publicação patrocinada...
2

Caraca q top, esse é o tipo de coisa que eu acharia legal aprender a mexer.. Acho que depende de um conjunto de conhecimentos mais baixo nível que há um tempo busco encontrar.
vou dar uma olhada!

1

Realmente. É necessário ter certo conhecimento baixo-nível. Mas eu achei a biblioteca até bem fácil de mecher (llvmlite) mas um problema grande que encontrei nessa biblioteca foi a documentação, mas você consegue encontrar algumas respostas mais satisfatórias no ChatGPT. Recomendo que assista um canal (caso entenda Inglês) chamado Tsoding Daily no YouTube.

1
2
2
1

Eita, ainda criou uma entrada no escolang wiki! Achei bem corajoso da sua parte usar o llvm, para mim parece um bicho de 7 cabeças. e sobre linguagem de stack escrita em python, tem o Porth, ela é uma implementação de forth, que é uma lang baseada em stack, com adicioes função para low level progamming. Ela também é escrita em python, mas cria um texto em ASM, que é passado para um montador (compilador de assembly) para gerar o binário

1

Sim!!! Inclusive eu me inspirei muito nessa linguagem para fazer a minha. Ela foi criada também em python por um Russo chamado Alexey Kutepov que faz umas streams na twitch muito legais! Eu assisti todos os vídeos do desenvolvimento do porth para me ajudar a fazer essa. (link da playlist aqui). Eu achava que ninguem do Brasil conhecia essa linguagem, descoberta incrível!

Sobre o LLVM eu achei meio complicado na primeira parte mas eu fui aprendendo devagarzinho e consegui utilizar um binding do LLVM para python chamado llvmlite que funciona muito bem!

1

Eu também estou aprendendo sobre compiladores e interpretadores a mais de 1 ano!

Parei pra estudar zig com este propósito. Me adicione no discord, vai que um dia a gente marque de fazer uma lang inovadora.

add lá @nexus_prime

1
1

Nossa muito bom, conheço pouco desta área e sua postagem me abriu os olhos para mais uma forma de tentar deixar o codigo em python mais performático.

1

Bacana, tenho um projeto semelhante em desenvolvimento juntamente com um colega, estamos estruturando o interpretador do Python em C++ do zero, quem quiser colaborar será bem-vindo: https://github.com/BRCode4Fun/Python-Interpreter

A vantagem de trabalhar em projetos low-level como esse é que desenvolvem um domínio absurdo da linguagem em si, além de ser um hobby pras horas vagas.

1

Caramba mano. Dei uma olhada no teu repositório e achei muito interessante. Gostaria de contribuir mas eu sou mt noob com C++. Se quiser que eu ajude me add no discord: @marcdev_

1
1

Sensacional! Tive que fazer também a implementação de um compilador simplificado pra um trabalho da faculdade, no meu caso, fiz utilizando o ANTLR, e foi um compilador de Go para Assembly MIPS. No fim, era possível escrever um mini programa de calculadora nele! Uma dúvida, utilizando python você achou tranquilo navegar pela AST e gerar código? Você define o parser com uma BNF também?
Caso queira ver a minha implementação, está aqui: https://github.com/matheuslenke/Go-Compiler

1

Que massa mano! Eu gosto bastante de mecher com o ANTLR. Ja usei ele com Java pra parsear XML e é bem interessante!

(edit)

Sobre a sua dúvida: Na minha linguagem, especificamente, a parte de sintaxe é bastante ofuscada. Por ser uma linguagem que utiliza Reverse Polish Notation e por ser Concatenativa. Teoricamente não existe sintaxe na minha linguagem! O AST é completamente inexistente na implementação do Pile. O que existe é uma sequência de operações que são checadas e mudam a stack (pilha). Eu gostaria de mecher mais com linguagens com AST de verdade. Acho que é um campo de algoritmos e estruturas de dados muito interessante.