Um jeito novo de programar em BASIC

Neste mês de dezembro acabei escrevendo uma ferramenta um tanto quanto interessante, ao qual chamei de Inliner e que permite escrever programas em BASIC de um “jeito bonito” a partir de qualquer editor de textos sem a preocupação com numeração de linhas e todo o resto pois ela cuidará disto para você.

Funcionalidades

O Inliner não altera a sintaxe da linguagem BASIC mas adiciona alguns recursos novos para melhorar a documentação dos programas por garantir um uso mais extensivo de comentários (que podem ou não ser exportados após a conversão), a legibilidade ao permitir que comandos longos sejam quebradas e até melhorar a manutenção com o uso de definições que  podem funcionar como constantes — reduzindo assim a ocorrência de magic numbers — ou então pequenas macros.

Programa de exemplo

Para dar uma ideia de como o Inliner funciona, um programa de exemplo para MSX2:


'' Kaleidoscope (MSX2 256 colors)
' define WIDTH 255
' define HEIGHT 211
' define MAXCOLORS 256
COLOR 15,0,0
SCREEN 8
I%=RND(TIME)
main_loop:
FOR I%=0 TO {{WIDTH}} STEP 2
' pick up a color
K%={{MAXCOLORS}}*RND(1)
' left side
LINE (0,0)STEP(I%,{{HEIGHT}}),K%
LINE (0,{{HEIGHT}})STEP(I%,{{HEIGHT}}),K%
' right side
LINE ({{WIDTH}},0)STEP(I%,{{HEIGHT}}),K%
LINE ({{WIDTH}},{{HEIGHT}})STEP(I%,{{HEIGHT}}),K%
NEXT I%
GOTO {{main_loop}}

Após ser convertido pelo inliner ele fica assim:

10 ' Kaleidoscope (MSX2 256 colors)
20 COLOR 15,0,0:SCREEN 8:I%=RND(-TIME)
30 FOR I%=0 TO 255 STEP 2:K%=256*RND(1):LINE (0,0)-STEP(I%,211),K%:LI
NE (0,211)-STEP(I%,-211),K%:LINE (255,0)-STEP(-I%,211),K%:LINE (255,2
11)-STEP(-I%,-211),K%:NEXT I%:GOTO 30

E aí podendo ser executado em qualquer MSX2 ou rapidamente testado no MSX-Pen.

Finalizando

O Inliner está disponível no GitHub, além do programa propriamente dito há documentação detalhada e uma série de programas de exemplo — correções e adições são muito bem vindas — e em meu blog  há  outra publicação onde detalhei um pouco mais os recursos da ferramenta para quem ficou interessado.

10 pensou em “Um jeito novo de programar em BASIC

  1. Excelente idéia e iniciativa. Parabéns!
    Seguindo o mesmo racioncínio daria para criar um parser que pegaria um código base parecido (poderia chamar de Basic#?) e geraria código basic válido para várias plataformas.
    Fiquei até pensando em criar uma ide em moderna para fazer esse parsing de programas já integrada com emuladores para resultado.
    Já viajei na maionese e pensei numa biblioteca de funções que poderiam ser importadas, static code analyzer, optimization, asm compiler, debugger via integração com emulador, (desculpe – maconha estragada aqui)…
    Talvez isso daria um folego extra para a retrocomputação pois permitiria a criação de programas mais complexos com basic além da comodidade de programar num pc ou mac (imagina integração com github! desculpe, me empolguei de novo).

    1. Obrigado! Confesso que no começo eu pensei em coisas assim, em implementar swtich/case, do/while mas depois eu sosseguei um pouco com a ideia pois aumentaria a complexidade da ferramenta e também alteraria a sintaxe do(s) BASIC — aliás, exceto pelo uso dos {{ … }} para associar a numeração das linhas a linguagem não sofre alterações — o que poderia causar alguma confusão. Mas nada impede que a saída do programa possa ser mexida (aliás eu ando pensando em quebrar o método de parser em dois para permitir tanto o pré quanto pós processamento.

  2. Hmmm, vi seu programa do Kaleidoscópio e lembrei de uma época que disputava com os amigos para ver quem conseguiria criar alguma coisa interessante usando funções matemáticas e basic depois de digitar um programa enorme para desenhar um toro no MSX. Criei um programinha que desenhava uma figura simples mas interessante só usando funções trigonométricas do MSX.
    Além de chamar o interesse de amigos, o programa serve para explicar funções trignométricas de forma mais interessante para alunos pentelhos. lol
    Bom candidato para usar o inliner:

    5 REM Edller’s math play
    10 screen 2
    20 pi = 3.14159265
    30 for r=-pi to pi step 0.15
    40 line (128,96+90*sin(r))-(128+100*cos(r),96)
    50 next
    60 goto 60

      1. Legal.
        Performance é sempre importante.
        Na verdade só “pensei com o dedo” quando escrevi o programa em 2 minutos para mostrar pros amigos.
        Agora ficou bem melho, obrigado.

        1. Hehehe, é que eu vi a simetria e pensei, opa, só precisa calcular um lado! Ainda mais que é nesta parte matemática que o MSX mais sofre. O MSX1 ainda sofrerá um pouco no desenho das retas que ele precisará fazer pixel a pixel enquanto que no MSX2/2+/tR ele delega a tarefa para o VDP (nada como uma implementação em hardware).

    1. Opa, obrigado! A página do projeto no GitHub está com uma documentação razoavelmente completa e num inglês razoavelmente razoável. 😀

Os comentários estão fechados.