Como implementei uma linguagem de programação
Logotipo da linguagem de programação 3BC Fonte: Arquivo pessoal
Em busca de produzir conteúdo de programação que não é tão comum para minhas lives na plataforma da Twitch. Tive uma ideia de um projeto de algumas semanas que seria uma linguagem esotérica me inspirando em tecnologias antigas que utilizavam cartões perfurados, assim surgiu a 3BC Lang que foi uma das melhores ideias que tive na minha carreira profissional se transformando em um projeto que levo para a vida.
Essa linguagem começou ser implementada em novembro de 2020 e foi finalizada um mês depois. Apesar de precisar de uns acabamentos técnicos, apresentei para um amigo (Carlos Eduardo) que gostou muito por introduzir o conceito de baixo nível para iniciantes e demonstrar como seria trabalhar com cartões perfurados de uma maneira mais fácil. Em seguida tive muitos amigos e colegas de trabalho (2020 e 2021) que fizeram questão de aprender a utilizar a 3BC Lang.
Assim tive um incentivo de procurar e corrigir todos os erros e problemas, sempre priorizando não acrescentar novos bugs ao invés de adicionar novas funcionalidades. Me tornando mais crítico ao criar softwares. Finalmente começando entender os fundamentos de base e consolidar as teorias da computação com a prática.
A seguir alguns conhecimentos que adquiri enquanto trabalhava na linguagem
- Algorítimos e Estrutura de dados
- listas (lifo, fifo...)
- árvores (avl, llrbt, bt...)
- grafos
- Arquitetura de processadores
- registradores
- opcodes
- buffers
- Circuitos eletrônicos
- somador completo
- flipflops
- demultiplexadores
- barramentos
- Teoria dos autômatos
- Logica Combinacional
- Máquina de Estados
- funções computáveis
- Testes automatizados
- testes estáticos
- testes unitários
- testes de cobertura
- testes de integração
Geralmente todos esses itens citados acima estão na grade curricular do curso de graduação de Engenharia da Computação, tendo uma cadeira de Compiladores e Interpretadores no final do curso. Mesmo não sendo graduado consegui adquirir os conhecimentos necessários citados na lista acima, mas tenho objetivo de me graduar futuramente para aprofundar mais meus conhecimentos nessas áreas acima citadas.
EVOLUÇÃO DO PROJETO NO PRIMEIRO SEMESTRE
No primeiro mês do semestre implementei o mínimo necessário (turing completeness) para considerar uma linguagem de programação. Com pequenos exemplos no projeto de como fazer cálculos matemáticos e com suporte para Windows, Mac e Linux e com suporte muito limitado para o embarcado de Arduino uno. Esse mês foi utilizado para apresentar o protótipo do que seria o projeto. No segundo mês corrigi um erro complexo de manipulação de memória que deixava o terminal inutilizável após testar a linguagem até que reiniciasse o computador. No terceiro mês comecei estudar sobre testes unitários, integração continua e adicionei ao projeto. No quarto mês fiquei exclusivamente corrigindo pequenos erros e melhorando o suporte para outras plataformas.
Foi no quinto mês que comecei a perceber o potencial da linguagem e adicionei novas funcionalidades, inclusive suporte a números negativos que não me preocupavam anteriormente. Essa atualização deixou a 3BC Lang mais rápida e 60% mais leve. Foi decidido também trocar o tipo de licença de código aberto para software livre, pelo interesse de estudar questões Legais da computação e no sexto mês comecei trabalhar em um importante recurso para manipulação da memória pelos usuários da linguagem, que foi finalizado no próximo semestre.
ÚLTIMO SEMESTRE DA EVOLUÇÃO DO PROJETO
No sétimo mês com o encerramento do recurso para manipulação de memória iniciado anteriormente, foi adicionado suporte para ponteiros (recurso importante para gerenciamento de memória) iniciado também no final do semestre anterior. No oitavo mês foi adicionado suporte para GPIO (entrada e saída genéricas) que é utilizado para controlar LEDs, motores e receber sinais de botões e sensores. Somente no nono mês da evolução do projeto que terminou o suporte para Embarcado Arduino uno. Se iniciou um novo trabalho para suportar a utilização da linguagem em computadores da década de 70 (Apple II e Commodore 64). O projeto também completou 99.9% de cobertura de teste e foi removido dependência com a Tecnologia C++ e só agora foi adicionado o suporte de um paradigma que fosse estruturado (procedimental) e foram removidos recursos inutilizáveis para os usuários e por fim a partir do decimo mês até o decimo segundo trabalhei na otimização da 3BC Lang, correções de bugs escrevi manuais de erros, guia, tutorial da utilização, funcionamento do código e novos exemplos.
Teremos novas atualizações do projeto!
- Autor: Rodrigo Dornelles
fiquei interessado em testar a linguagem :)
VOCÊ é uma maquina absurda! deveira postar aqui também a sua engine de jogos!!!