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

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 [ ]

  1. "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" ]
  2. dump: Operação simples para escrever na tela o último valor no topo da pilha. Agora a plha fica vazia, já que o dump 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. 1: O valor numérico 1 é empurrado para o topo da pilha. [ 1 ]
  2. 2: O valor numérico 2 é empurrado para o topo da pilha. [ 1 2 ]
  3. +: Operação de soma entre os dois últimos valores da pilha, nesse caso resultando em 3. [ 3 ]
  4. 2: O valor numérico 2 é empurrado para o topo da pilha. [ 3 2 ]
  5. *: Operação de multiplicação entre os dois últimos valores da pilha, nesse caso resultando em 6. [ 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.

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.

Carregando publicação patrocinada...
3

Muito Bom. Brasil tá precisando de gente assim que pensa, cria e inova.
Estudando Python na área de SpeechToText e TextToSpeach com comando de voz. Caminho longo e complicad mas tô no caminho e andando. Todos os dias aprendo algo novo.

2
1
1

Que massa!

eu também estou desenvolvendo uma a um tempo e ja fiz uns 3 posts aqui na plataforma, mas a sua claramente é melhor do que a minha kk, acho interessante saber coisas que nós usamos no dia a dia como funcionam por baixo dos panos

1

Excelente iniciativa! Estou começando a explorar o mundo de Rust e pretendo estudar o projeto para contribuir no que eu puder. Na faculdade, desenvolvi um interpretador em Java e foi um processo extremamente interessante e desafiador.

1

Me fez lembrar da programação em calculadora da família da HP 48. Essas calculadoras tem justamente uma liguagem baseado em pilha chamada de RPL (Reverse Polonese Language)

2

Exatamente. No README.md do repositório tem uma breve explicação sobre a Notação Polonesa Reversa (ou Reverse Polish Notation). Calculadoras de economia como a HP 12C também utilizam esse recurso. MUUUITO mais eficiente para cálculos em termos de custo computacional para avaliação e execução das expressões.

1

Na HP48, tem a anotação direta e a indireta. Ex: podemos ter uma operacao

《 IF 2 > 1 THEN 5 END 》

Ou a forma indireta usando a stack

《 2 1 > 5 IFT 》

explicando

  • colocando 1 e 2 na pilha
  • operador > compara primeiro e segundo elemento da pilha
  • colocando 5 na pilha
  • IFT verifica se o segundo elementa da pilha é verdadeiro e retorna o primeiro elemento, se for false. Não retorna o segundo elemento

Lembro que me divertia fazendo a programação na forma indireta.

2

O Pile funciona basicamente da mesma forma! Eu tenho aqui em casa uma 12C, inclusive foi uma das minhas principais inspirações para a criação do Pile.

Na verdade a principal inspiração foi de outra linguagem stack-based criada por um russo que faz streams de programação na twitch que acompanho desde 2019. O nome dele é Alexey Kutepov e ele criou o Porth, minha inspiração para o Pile.

Eu sinceramente acho ele um dos (senão o melhor) criador de conteúdo de programação em geral que programadores intermediários e avançados devem acompanhar. Ele tem um canal no Youtube onde ele posta as lives dele: @TsodingDaily. Recomendo demais assistir a ele!

1

Olá, me chamo Renan, tenho projetos parecidos:

Sehol
Catnet Runtime

Eu gostei de sua linguagem, nome criativo, bem construída e bem elegante, com algumas integrações pode virar um grande projeto, já pensou assim? Queria só discutir uma coisa...

Eu tentei divulgar, mas devido ser iniciante e ainda está esperimental, não tive o mesmo alcance, só queria uma coisa, como posso encontrar pessoas como eu? Contribuidores, colaboradores ou amigos. É difícil para mim, que é autista, conhecer e expressar ideias, só queria poder ter a habilidade de criar um canal no YouTube e mostrar o tanto de ideias e coisas que eu quero expressar, mas socializar é expresessar não é para qualquer um.

1

Cara, o principal meio que eu consegui encontrar pessoas como eu foi pelo Discord.

Se quiser me chama la que eu te mando uns convites pra uns servidores legais pra encontrar gente. O discord pode parecer meio complexo mas já fiz amizades muito interessantes e intelectuais kkkk.

Me chama la no nick marc.dantas que a gente também pode fazer uma parceria legal!
Valeu!

(edit)
Dei uma olhada no teu código nos repositórios e achei muito interessante!

1

Massa, a sintaxe é tipo um Lisp invertido, conhece? Nela, as operações vem primeiro e os argumentos depois, algo como:
(- (/ (* (+ 2 2) 3) 4) 3)

o resultado desse troço aí em cima é 0

1

Muito legal cara. Eu também estou quebrando a cabeça mexendo com computadores. Atualmente estou pegando muitas referências do compilador do C#, o Roslyn. Tenho um projeto no github que está como privado, muita coisa nem compila porque são uns testes que eu estava fazendo, porém tem um projeto de teste que eu uso pra ver se o q eu estou fazendo esta funcionando. Estou tentando melhorar um pouco a estrutura, mas sempre fica mais complexo. Pegar referências do Roslyn foi a forma que eu mais avancei nesse projeto, mas ele é super complexo, tem milhares de coisas que eu não preciso implementar pra fazer o que eu quero. Mas é isso... Já consegui até emitir algumas instruções da CIL (Common Intermediate Language).

1

Parabéns pelo projeto e pela ideia da linguagem, parece um paradigma bem divertido de ensinar e aprender, mas com certeza tem uma dificuldade gigante na implementação do compilador. Sei disso por que meu TCC é uma linguagem mas com foco em deep learning.

Ainda está utilizando LLVM ou Rust puro?

2

Que massa cara!

Estou usando o Rust puro, por enquanto nem tenho dependências no projeto kkk.
É um interpretador totalmente em Rust.