[Rafael Carício] Implementando uma Toy Programming Language

Tudo que uma linguagem de programação precisa é de uma estrutura de loop, expressões, listas e funções. Concordam?

[update] - algumas linguagens não tem nenhuma estrutura de loop. Como Haskell que usa pattern matching pra resolver o problema de estruturas de controle e recursão para loops.

Estou implementando uma linguagem sem nome (ainda usando um nome temporário), e estou pensando em implementar o básico que uma linguagem moderna precisa. Estou implementando para aprimorar meus próprios conhecimentos sobre programação e relembrar coisas que aprendi na época da faculdade. Aqui vai um exemplo da sintaxe da linguagem que estou implementando:

Tudo na linguagem é função, expressão, lista e valor. Inclusive o “if”. Que nela é uma função que é definida na propria linguagem:

E usado desta foma:

O “*” informa ao interpretador que estou querendo referenciar a variável “k” no escopo dinâmico (escopo onde a função está sendo executada) e não no escopo local interno da função, onde modificações a esta variável não fariam diferença para o escopo onde a função foi chamada (caso exista uma variável com o mesmo nome).
Na linguagem existe também apenas uma estrutura de loop que é o “while”. E funciona da seguinte forma:

Com o “while” eu posso definir como é minha estrutura de “for”. Assim:

E usar da seguinte forma:

Assim o valor de “a” é [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. E outra coisa interessante que posso definir é a função “map”, que ficaria da seguinte forma:

Nesta linguagem o comportamento do “map” é o mesmo do “for each” pois uma função SEMPRE retorna um valor nem que ele seja “Null”.
Com o essas funções previamente definidas, podemos implementar uma função de “filter” e ficaria assim:

Os “_” underlines nestas funções servem para não conflitar com nome das variáveis do escopo onde o programador vai usar.

Quem quiser saber mais sobre este projeto pode acompanhar pelo github. Aceito reclamações, xingamentos, elogios e etc.

https://github.com/rafaelcaricio/unamed