Apresentando a minha linguagem de programação que criei do zero (e um convite para participar do meu projeto)
Introdução
Anteriormente, já havia postado sobre linguagens de programação, mais especificamente sobre o compilador que eu fiz 100% em Python. Infelizmente acabei descartando esse projeto em prol do que falarei nesse post.
Se quiser ler o post anterior, acesse aqui
Sobre o que eu estou falando
Esse post é sobre um projeto que eu estou desenvolvendo. De forma simples, é uma linguagem de programação interpretada bem simples e com propósito educacional. O nome da linguagem é Pile
e é implementada em Rust.
Como já mencionei, o projeto do Pile é bem mais antigo. A primeira versão do que hoje seria o Pile era inicialmente chamado de Somescript e implementado em Python. Depois evoluiu para o Pile compilado em LLVM (como citado no meu post anterior) e agora estou em um reboot da linguagem implementado em Rust. Dessa vez o projeto chegou num nível nunca antes chegado pelas iterações anteriores.
O Pile é um projeto bem ambicioso e desejo compartilhá-lo com mais pessoas, principalmente em território nacional por conta do meu amor pelo nosso país e o incentivo a mais projetos de tecnologia no Brasil.
Esse post também é um convite para você que deseja colaborar com essa ideia ambiciosa. Mas antes de tudo, vamos explicar o que realmente é o Pile e como estou desenvolvendo ele.
O que é o Pile?
Pile é uma linguagem de programação baseada em pilha, concatenativa e interpretada com propósito educativo.
Pile é criado para ensinar lógica de programação e manipulação de pilhas de forma educativa e acessível. No Pile, não existem variáveis no sentido convencional; tudo é empilhado e manipulado diretamente na stack (pilha), promovendo um paradigma onde operações e algoritmos são feitos através da reorganização, duplicação e remoção de itens da pilha.
O conceito desse paradigma é descrito de tal forma que os valores podem ser "empurrados" (push) ou "retirados" (pop ou drop) em uma estrutura de dados linear. Cada valor ou operação age sobre o topo da pilha, e as operações em Pile, como dup
(duplicar), swap
(trocar), drop
(remover), etc. são fundamentais para manipular dados e fazer sua lógica.
Esse paradigma de manipulação direta da pilha cria um desafio para o modo de pensar convencional do programador (estudande) e incentiva a pensar de forma sequencial e organizada, entendendo o fluxo de dados e operações como uma série de manipulações no topo da pilha.
Inicialmente, o paradigma dessa linguagem pode ser muito confuso e ilegível. Mas a partir do ponto que você entende como tudo funciona, o código passa a ficar mais lógico.
Como fazer programas em Pile?
Aqui está um trecho de código que implementa a funcão da sequência de Fibonacci em Pile:
proc fib
0 1
loop
dup N >= if
dup dump
over over +
else stop end
end
end
def N 400 end
fib
Pode parecer bem pouco legível né? Vamos começar com algo mais simples, um Hello World:
"Hello World" dump
Vamos fazer um passo a passo de como o Pile faria para executar esse programa para cada operação que passamos:
Inicialmente, a pilha do programa está vazia, representada como [ ]
"Hello World"
: Pode não parecer, mas qualquer valor que você expressa no Pile é uma operação também. Nesse caso, a operação seria de empurrar a string "Hello World" no topo da pilha.[ "Hello World" ]
dump
: Operação simples para escrever na tela o último valor no topo da pilha. Agora a plha fica vazia, já que odump
utilizou o valor que estava lá.[ ]
Outro exemplo com operações matemáticas:
1 2 + 2 * dump
Inicialmente, a pilha do programa está vazia, representada como [ ]
1
: O valor numérico 1 é empurrado para o topo da pilha.[ 1 ]
2
: O valor numérico 2 é empurrado para o topo da pilha.[ 1 2 ]
+
: Operação de soma entre os dois últimos valores da pilha, nesse caso resultando em 3.[ 3 ]
2
: O valor numérico 2 é empurrado para o topo da pilha.[ 3 2 ]
*
: Operação de multiplicação entre os dois últimos valores da pilha, nesse caso resultando em 6.[ 6 ]
dump
: E por fim, escrevemos o resultado na tela.[ ]
Eu poderia continuar dando mais exemplos aqui por muito tempo, mas vocês não gostariam de ler taaanto texto assim. Acho que deu para entender o conceito da minha linguagem.
Meu convite para você
Como já mencionei, esse post é também um convite para você que deseja construir uma comunidade comigo. O Pile ainda está no início de sua vida e gostaria muito que um de vocês fossem os primeiros a se juntarem comigo e criarmos uma ferramenta muito interessante juntos.
Não me interesso por uma comunidade gigantesca. Mas pretendo pelo menos tentar implementar a minha linguagem em escolas ou faculdades futuramente. Esse tema já é abordado em vários cursos e acho que minha lingaugem pode servir de ferramenta de aprendizado para os estudantes.
Além da intenção principal (educação), linguagens stack-based também tem um grande poder matemático para cálculos complexos e data vizualization.
O repositório oficial do código fonte da implementação do Pile está no meu Github.
- Acesse o repositório em marc-dantas/pile
Para conversar comigo, contato pelo Discord.
- Discord username:
marc.dantas
Se não puder ou não quiser participar, só uma estrelinha no repositório me ajudaria bastante!
Obrigado por ter lido.