Meu compilador Pascal e arte contemporânea polonesa

Origens


Vários anos atrás eu escrevi um compilador Pascal. A motivação era simples: quando adolescente, aprendi com meus primeiros livros didáticos de programação que um compilador é uma coisa muito sofisticada. Essa alegação acabou se tornando um desafio e exigida para ser testada pela experiência.

imagem
ha.art.pl

Primeiro, surgiu um compilador simplista PL / 0 e, posteriormente, um compilador Pascal quase totalmente funcional para MS-DOS. Minha fonte de inspiração foi o livro Compiler Construction , de Niklaus Wirth, o inventor da linguagem Pascal. Não me importo se as visões de Wirth agora são consideradas obsoletas e não têm conexões diretas com o mainstream da TI, ou se a moda do design do compilador mudou. É suficiente saber que suas técnicas ainda são simples, elegantes e - por último mas não menos importante - trazem muita diversão , pois é mais atraente analisar uma fonte de programa com um analisador de descida recursivo manuscrito e gerar o código da máquina, em vez de chamar yaccs , bisontes e todos os seus descendentes.

O destino do meu compilador não foi tão trivial. Ele viveu duas vidas: a primeira em minhas próprias mãos e a segunda nas mãos de antiquários de computadores da Polônia.

Xd pascal


Meu compilador recém-nascido foi nomeado XD Pascal . Ele suportava todas as instruções Pascal, exceto goto e with . O primeiro parecia ser difícil de implementar, pois destruiria a estrutura perfeitamente hierárquica do programa. Este último poderia tornar as regras de escopo simples ambíguas.

Todos os principais tipos de dados também foram suportados. Além do escopo, estavam apenas os números inteiros, os conjuntos, as enumerações e os registros de variantes não assinados - mas, obviamente, todos esses itens não são as necessidades diárias. No entanto, não pude negar a mim mesmo o prazer de introduzir números de ponto flutuante e a aritmética do FP87 8087 - esse foi o impacto do meu vício profissional em cálculos de engenharia.

Ao implementar procedimentos e funções, tive medo de que a recursão e o armazenamento de variáveis ​​locais na pilha fossem um grande problema. No entanto, uma dificuldade real específica de Pascal estava nas sub-rotinas aninhadas. Pode-se ter um desejo inocente de acessar a variável local de uma sub-rotina externa a partir da interna. No entanto, a sub-rotina interna não possui o endereço do quadro da pilha para o externo, ou seja, não sabe qual origem usar com o deslocamento variável. Este endereço deve ser passado para a sub-rotina interna como um argumento oculto adicional. Suponho que foi essa dificuldade que forçou os projetistas de C a abandonar completamente o agrupamento de sub-rotinas. Mas Pascal ainda os possui, e esse recurso não pode ser ignorado.

O gerador de código criou os executáveis ​​COM mais simples para o MS-DOS em modo real. As instruções da máquina foram geradas diretamente, sem nenhum montador ou vinculador externo. Usei registradores de 32 bits para dados, mas o endereçamento permaneceu em 16 bits (um par segmento / deslocamento).

O modelo de memória era semelhante ao modelo 'pequeno' (se alguém ainda se lembra dessa terminologia da era de 16 bits): o código, os dados e a pilha ocupavam um segmento de 64 kbytes cada.

imagem
Uso de memória

Gerar EXEs e alternar os segmentos em tempo real parecia muito difícil, e as rígidas limitações do modelo "pequeno" me obrigaram a dizer adeus à autocompilação. Certamente vi alguns compiladores de autocompilação cujo código se encaixava bem em apenas um segmento (por exemplo, Context ). No entanto, eles raramente poderiam fazer algo útil além dessa capacidade de se compilar. Em vez disso, desejei tornar meu compilador adequado para cálculos e gráficos numéricos. É por isso que incluí, entre outros exemplos, os fractais, o método de Gauss para resolver equações lineares, a rápida transformação de Fourier e até o filtro Kalman para estimar os erros do sistema de navegação inercial.

imagem
Fragmento de conjunto de Mandelbrot

imagem
Transformação rápida de Fourier

imagem
Estimativa de erro do sistema de navegação inercial

O que acabei conseguindo foi muito semelhante ao antigo Turbo Pascal 3.0 (sem OOP) e ao amador BeRo Tiny Pascal . O autor deste último conseguiu compilá-lo automaticamente no Windows, mas sacrificou a aritmética de ponto flutuante e muitas sutilezas da gramática, que eu desejava preservar. Entre os recursos mais modernos, meu XD Pascal recebeu os comentários de linha única no estilo Delphi ( // ) e a variável Result .

No entanto, desde o seu nascimento, meu compilador foi marcado para morrer. Pascal estava irreversivelmente fora de moda, e o MS-DOS havia se tornado arcaico muito antes. Em um dia em que mudei de um Windows XP de 32 bits para um Windows 7 de 64 bits sem máquina virtual DOS, considerei meu projeto morto.

Revival


Então, algo estranho aconteceu. Após três anos de esquecimento, uma equipe de entusiastas da retocomputação polonesa e fãs da Atari encontrou meu compilador. Parece que eles não se preocupavam muito com problemas abstratos, como autocompilação ou rigidez gramatical. Eles simplesmente precisavam de uma ferramenta de programação conveniente para sua máquina favorita. Usando meu projeto, eles construíram seu próprio compilador Mad Pascal para a arquitetura 6502. A gramática do idioma foi expandida, o suporte foi adicionado para unidades separadas com as seções de interface e implementação, a instrução goto , números inteiros não assinados, conjuntos e enumerações, código de montagem em linha. Em vez do código da máquina, o código da montagem foi gerado. Foi então traduzido por um montador de cervejas caseiras.

A aparência externa da linguagem tornou-se significativamente mais próxima do padrão de fato Pascal. Os internos do compilador parecem um tanto horríveis, as palavras reservadas são misturadas com os nomes das sub-rotinas padrão, mas isso não incomoda os desenvolvedores. Seja como for, o esforço é surpreendentemente viável: por três anos, Mad Pascal é atualizado regularmente, muitos jogos são escritos nele, os autores participam anualmente da conferência de retrocomputação Silly Venture (o link pode exigir VPN). Parece que as tradições da Atari são muito fortes na Polônia.


Um evento notável para os fãs poloneses do Atari aconteceu na primavera de 2018: o livro Robbo. Solucja ( Robbo. Walkthrough ), um exemplo de literatura experimental, foi publicado. Eu preciso enfatizar aqui que o jogo Robbo para Atari, publicado há 30 anos, ainda excita os fãs poloneses mais velhos e os enche de uma espécie de deleite patriótico. De um modo geral, não surpreende que tenha aparecido um livro inspirado no jogo. Mas o engraçado é que 60% do livro, como dizem os autores, é o tutorial passo a passo gerado pelo próprio computador da Atari. O programa de geração de texto está escrito em Mad Pascal.

imagem
graczpospolita.pl

Parece que algumas pessoas consideram o livro um ótimo exemplo de arte contemporânea:
Seria enganador tratar este livro apenas como um item de colecionador para os fãs de Robbo , ou, de maneira mais geral, para os fãs da Atari. Lidamos com um exemplo raro da interação entre a cultura de videogame e a literatura (neste caso, a literatura eletrônica), onde o ponto de partida é o 'jogo', não a 'literatura'. Para alguns, é sem sentido "arte por arte". Para outros, esse cruzamento oferece oportunidades e experiências absolutamente novas. Nada impede você de criar uma versão do Robbo que você pode concluir usando o 'passo a passo' do livro. O livro se encaixa bem com minha visão dos videogames como arte. Arte, na qual o jogador pode ser o destinatário e o criador - se durante o 'jogo' houver uma 'audiência' assistindo o jogador criando seu próprio histórico de 'jogo'. O conteúdo do livro pode ser adaptado a um espetáculo de performance com um ator que interpreta Robbo usando os elementos da explicação passo a passo do livro. Para não permanecer infundado: o desempenho baseado no Robbo. Solucja ocorreu em 11 de maio de 2018 na galeria de arte contemporânea Bunker em Cracóvia, durante a apresentação do livro que acompanha a exposição Inexaustibilidade .
Um show de performance em Cracóvia. Vale a pena ter escrito um compilador.

Source: https://habr.com/ru/post/pt440372/


All Articles