Meu compilador Pascal e arte contemporânea polonesa

As origens


Alguns anos atrás eu escrevi o compilador Pascal. A motivação era simples: na minha juventude, aprendi com meus primeiros livros de programação que o compilador é uma coisa extremamente complicada. Esta afirmação tornou-se um espinho no cérebro e acabou exigindo um julgamento.

imagem
ha.art.pl

Primeiro, nasceu o compilador PL / 0 mais simples e, a partir dele, um compilador Pascal quase totalmente funcional para MS-DOS cresceu gradualmente. Fui inspirado no livro Compiler Construction , escrito pelo criador da linguagem Pascal Nicklaus Wirth. E mesmo que as visões de Wirth já estejam desatualizadas e tenham perdido toda a conexão com as realidades da TI, e os compiladores não fazem nada como ensinou Wirth. No entanto, seus métodos ainda são simples, elegantes e o mais importante - eles trazem alegria , porque é muito mais atraente analisar o texto do programa independentemente por descida recursiva e gerar código de máquina do que pedir a ajuda de iaques , bisões e todos os seus sucessores.

O destino do meu compilador não foi o mais trivial. Ele viveu duas vidas: a primeira em minhas mãos, a segunda nas mãos de conhecedores poloneses de antiguidades de computador.

Xd pascal


Meu compilador recém-assado é chamado XD Pascal . Ele suportava todos os operadores Pascal, exceto goto e with . O primeiro parecia difícil de implementar, pois destruiu a estrutura hierárquica ideal do programa. A segunda confusão criada com o escopo dos nomes.

Todos os principais tipos de dados foram suportados. Somente números inteiros não assinados, conjuntos, enumerações e entradas de variantes foram deixados de fora do escopo - no entanto, tudo isso claramente não é uma necessidade essencial. No entanto, não pude negar a mim mesmo o prazer dos números de ponto flutuante e sua aritmética no coprocessador 8087 - isso afetou a propensão profissional aos cálculos de engenharia.

Ao implementar procedimentos e funções, tive medo de que recursão e armazenamento de variáveis ​​locais na pilha fossem um grande problema. No entanto, a dificuldade real, específica para Pascal, estava em espera em um lugar completamente diferente - no trabalho com procedimentos aninhados. Uma necessidade completamente inocente pode surgir para se referir à variável local do procedimento externo a partir do interno. No entanto, o procedimento interno não possui o endereço do quadro de pilha do procedimento externo - o procedimento interno não sabe do que ler o endereço da variável. Esse endereço sempre deve ser passado para o procedimento interno por meio de um parâmetro oculto adicional. Eu suspeito que foi essa complicação que fez os desenvolvedores de C abandonarem completamente o aninhamento de funções. No entanto, em Pascal eles são, e isso tem que ser considerado.

O gerador de código criou os executáveis ​​COM mais simples para o modo real do MS-DOS. O código da máquina foi gerado diretamente, sem a ajuda de um montador ou vinculador externo. Para os dados, usei os registradores de 32 bits da arquitetura 80386 e o ​​endereçamento permaneceu em 16 bits, na forma de um par de deslocamento de segmento.

O modelo de memória correspondeu aproximadamente ao "pequeno" (se alguém se lembrar dessa terminologia da era dos 16 bits): para um código, dados globais e uma pilha, um segmento de 64 kb foi alocado.

imagem
Uso de memória

Gerar arquivos EXE e alternar segmentos rapidamente parecia um pouco esmagador, e o escopo restrito do modelo “pequeno” me fez dizer adeus à idéia de autocompilação. Obviamente, deparei-me com compiladores de autocompilação cujo código se encaixa inteiramente em um segmento (por exemplo, Contexto ). No entanto, eles raramente sabiam como fazer algo útil além dessa autocompilação. Eu queria tornar meu compilador pelo menos um pouco adequado para cálculos numéricos e saída de gráficos. Portanto, dentre os exemplos de programas, surgiram fractais, solução de equações gaussianas lineares, transformada rápida de Fourier e até estimativa pelo filtro Kalman de erros do sistema de navegação inercial.

imagem
Fragmento do conjunto de Mandelbrot

imagem
Transformação rápida de Fourier

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

O que obtive como resultado foi, acima de tudo, semelhante ao antigo Turbo Pascal 3.0 (ainda sem OOP) e ao amador BeRo Tiny Pascal . O autor deste último lidou com a autocompilação no Windows, mas sacrificou a aritmética de ponto flutuante e muitas sutilezas da gramática que eu queria observar. Dos recursos mais modernos do meu XD Pascal, comentários de linha única ( // ) emprestados do Delphi e a Result automática Result .

No entanto, desde o meu nascimento, meu compilador foi marcado com o selo da morte. Pascal já saiu de moda irreversivelmente, e o MS-DOS se tornou um arcaico. Naquele dia, quando mudei do Windows XP de 32 bits para o Windows 7 de 64 bits sem uma máquina virtual DOS, enterrei mentalmente meu projeto.

Renascimento


Então, uma coisa estranha aconteceu. Após três anos de total esquecimento, um grupo de entusiastas da retocomputação polonesa e amantes da Atari encontrou meu compilador. Aparentemente, os problemas abstratos da autocompilação e o rigor da implementação da gramática não os preocupavam muito. Eles só precisavam de uma ferramenta de programação conveniente para o seu carro favorito. No meu projeto, eles criaram seu próprio compilador Mad Pascal para a arquitetura 6502. A gramática da linguagem cresceu, suporte a módulos com seções da interface e implementação, operador goto , números inteiros não assinados, conjuntos e enumerações, inserções de assembler. Em vez do código da máquina, o código do assembler agora é gerado. Sua transmissão final foi feita por um montador de seu próprio projeto.

Externamente, a linguagem tornou-se visivelmente mais próxima do padrão atual de Pascal. Por dentro, o compilador parece um pouco intimidador, as palavras reservadas são misturadas com os nomes dos procedimentos padrão, mas isso não incomoda os autores. Não importa como pareça, foi surpreendentemente tenaz: o Mad Pascal é atualizado regularmente há três anos, tem escrito muitos jogos e os autores falam anualmente na retroconferência do Silly Venture (o link requer uma VPN). Há um sentimento de que, na Polônia, as tradições da Atari são geralmente muito fortes.


Na primavera de 2018, ocorreu um evento bastante marcante para a festa polonesa dos fãs da Atari: o livro “Robbo. Solucja " (" Robbo. Passagem ") no gênero de literatura experimental. Aqui devo dizer que o jogo Robbo para Atari, publicado há 30 anos, ainda excita os corações dos poloneses da geração mais velha e os enche de entusiasmo patriótico. Em geral, não é de surpreender que houvesse um livro dedicado ao jogo. O engraçado é que, segundo os autores, ele consiste em 60% das instruções para passar o jogo gerado pelo próprio computador da Atari. O programa de geração está escrito no mesmo Mad Pascal.

imagem
graczpospolita.pl

E parece que alguns perceberam o livro como um exemplo digno da arte moderna:
Seria errado tratar o livro apenas como um colecionável para os fãs de Robbo ou, de maneira mais geral, para os fãs da Atari. Temos que lidar com um caso raro de colisão da cultura dos videogames com a literatura (neste caso, eletrônica), quando o ponto de partida é “jogo” e não “literatura”. Para alguns, esta é uma arte sem sentido em prol da arte. Para outros, esse cruzamento traz oportunidades e experiências completamente novas. Nada impede que você crie uma versão do Robbo, que você pode concluir com o "passo a passo" do livro. O livro está de acordo com minha visão dos jogos como arte. Uma arte na qual o jogador pode ser percebedor e criativo - se durante o "jogo" houver uma "platéia" assistindo o jogador criando sua própria história do "jogo". O conteúdo do livro pode ser adaptado para desempenho com um jogador que passe no Robbo usando os elementos das "instruções passo a passo" do livro. Para não permanecer infundado: desempenho baseado em “Robbo. Solucja ”foi realizada em 11 de maio de 2018 na Galeria Bunker de Arte Moderna, em Cracóvia, durante a apresentação do livro como parte da Exposição Inesgotável.
Performance em Cracóvia. Por isso, valeu a pena escrever um compilador.

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


All Articles