Desenvolva seu próprio compilador retrô
(t3x.org)- Write Your Own Retro Compiler é um livro de 339 páginas que aborda um compilador self-hosting que roda em CP/M baseado em Z80 e gera código para o mesmo ambiente, com todo o código-fonte incluído
- T3X/0, o alvo da implementação, é uma linguagem simples com raízes em Pascal e BCPL, e o livro inclui um manual completo de 20 páginas
- É necessário conhecimento de linguagens procedurais como C ou Pascal e de linguagem assembly; ter noções de assembly Z80 e do básico de CP/M facilita o acompanhamento
- Explica análise léxica, análise sintática, geração de código, otimização simples, a interface BDOS e a biblioteca de tempo de execução com diagramas, tabelas e exemplos
- Todo o código é disponibilizado em domínio público, e também são oferecidos links para compra do livro impresso e do PDF, sumário, páginas de amostra e download do código-fonte
Escopo e público do livro
- Write Your Own Retro Compiler é um livro de 339 páginas, com 91 figuras, formato 6" x 9", publicado pela Lulu Press em 2023
- O tema central é um compilador self-hosting que roda em CP/M no processador Z80 e gera código para o mesmo ambiente
- Foi estruturado para que até quem não tenha experiência em construção de compiladores possa acompanhar
- A linguagem de implementação, T3X/0, é uma linguagem simples com raízes em Pascal e BCPL
- O livro inclui um manual completo de 20 páginas sobre T3X/0
Conhecimentos necessários
- É preciso conhecer pelo menos uma linguagem de programação procedural
- Os exemplos citados são C e Pascal
- Também é preciso conhecer ao menos uma linguagem assembly e, idealmente, ter conhecimento de assembly para CPU Z80
- Também é exigido conhecimento básico do sistema operacional CP/M
- Para leitores autodidatas, há uma breve introdução à linguagem assembly do Z80
Componentes do compilador
- O funcionamento interno do compilador é explicado com muitos diagramas, tabelas e exemplos
- Os tópicos abordados são os seguintes
- Análise léxica
- Análise sintática
- Geração de código
- Otimização simples
-
Interface BDOS
- Biblioteca de tempo de execução
Links e código disponibilizados
- Todo o código do livro está em domínio público
- Pedir o livro impresso
- Pedir a cópia em PDF
- PDF do sumário
- PDF com páginas de amostra
- Download do código-fonte
- Página do código
1 comentários
Comentários do Hacker News
Publiquei um livro novo sobre compiladores. Ele é mais ou menos uma versão expandida de “Write Your Own Compiler”, mas desta vez trata de geração de código CP/M para Z80 em vez de ELF para sistemas modernos, então várias partes ficam bem mais simples
Dá para ver quanta complexidade é necessária para fazer um compilador que compile a si mesmo em menos de 10 minutos num sistema Z80 de 4MHz. O código é gratuito, mas o livro é pago
Além disso, adoraria ver um livro direto ao ponto sobre Forth e a interpretação do Nils sobre isso
Recentemente fiz um compilador C de múltiplas passagens e um assembler para CPUs x86 antigas em TypeScript
https://github.com/Mati365/ts-c-compiler
Tenho um exemplar físico da 2ª edição de Practical Compiler Construction e gosto bastante dele. Recomendo os livros do Nils para quem tiver interesse
Esse livro parece divertido. Ainda assim, continuo esperando um sucessor de verdade para The Dragon Book
Seria ótimo um livro que tratasse de CPUs modernas e, se possível, até otimização para GPU, além de como projetar e escrever uma máquina virtual moderna com coleta de lixo concorrente rápida. Em certo sentido, isso pode ser ainda mais difícil do que escrever compiladores
Ele cobre construção de grafos de fluxo de controle, várias otimizações possíveis sobre eles, análise de alias, forma de atribuição única estática, otimizações baseadas em dominadores de CFG, escalonamento de instruções, alocação de registradores e geração de código objeto. Como a maioria dos livros de compiladores, não trata de análise léxica, parsing nem NFA/DFA
Para quem quer fazer um compilador otimizador que exige análises avançadas, Static Program Analysis também pode ajudar: https://cs.au.dk/~amoeller/spa/
Para coleta de lixo, existe o Garbage Collection handbook: https://gchandbook.org/
Se você já tiver algum conhecimento básico, talvez goste deste curso: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
Gostei especialmente da forma como ele apresenta a forma SSA
Há tópicos mais avançados aqui: https://www.cs.cmu.edu/~15745/handouts.html
Quando algo parece “mágica”, eu encaro como sinal de que alguém contornou de forma inteligente algo que se imaginava ser um limite. Recentemente estou lendo sobre grave falso, em que pequenos alto-falantes parecem produzir graves mais profundos do que realmente conseguem; é interessante como usam harmônicos para enganar o cérebro e fazê-lo ouvir um som mais grave do que o real
Parece interessante, mas há a desvantagem de o leitor precisar primeiro conhecer ou aprender a nova linguagem de programação T3X
Também fico curioso se seria possível escrever e desenvolver um compilador do zero num sistema retro CP/M, conectado ao mundo externo só por teclado e tela
O SubC tem 3815 linhas e o T3X/0 tem 2330 linhas
Claro que também seria possível começar no CP/M sem ferramentas externas, mas aí seria preciso escrever o compilador de bootstrap em assembly. Isso levaria bastante tempo, mas é totalmente viável. Só não sei se seria interessante como leitura
É um pouco surpreendente usar sintaxe ao estilo ALGOL em vez de sintaxe ao estilo C, mas isso pode ser só viés meu. Fazer mentalmente a correspondência entre
DOeENDcom{e}não é um grande esforçoUm tutorial de compilador que vai além das etapas de análise léxica e parsing? Quase inédito, eu diria
Estou brincando, mas muita coisa realmente para aí. Acho que vou comprar isso
Também seria divertido ter um livro sobre escrever seu próprio sistema operacional parecido com CP/M
Claro, ele mostra como fazer um sistema operacional de microkernel no estilo Unix, mas é só pular tudo exceto o capítulo de sistema de arquivos. E não siga os conselhos sobre estruturas de árvore: use apenas tabelas planas e não se preocupe em implementar tamanho exato de arquivo. Aí vira CP/M
Pessoalmente prefiro a 2ª edição. Acho que a 3ª ficou desnecessariamente complexa para fazer o código de demonstração do Minix rodar em PCs do fim dos anos 1990, em vez de PCs dos anos 1980
Não escrevo isso de forma negativa; é uma observação que talvez ajude
Li o capítulo gratuito e me pareceu que algumas partes podem ser difíceis para quem não tem muito conhecimento do tema. Sob cada título ele começa explicando conceitos do zero, como “a gramática da linguagem é...”, mas poucas frases depois já aparecem tópicos avançados como instruções de assembly sem explicação
Se o leitor está num nível em que ainda precisa aprender o significado de gramática, talvez tenha dificuldade para entender as frases logo em seguida. Então, se houvesse um pouco mais de consistência, o livro talvez ficasse melhor acabado
Por isso achei aceitável presumir que o leitor já conheça coisas como instruções de assembly
O apêndice do livro também traz uma breve introdução ao assembly de Z80, mas mesmo ela parte do pressuposto de que a pessoa já conhece o básico de assembly
Todo livro precisa começar em algum ponto. É difícil escrever um livro sobre construção de compiladores partindo da suposição de que a pessoa não tem absolutamente nenhum conhecimento de programação. Ainda assim, isso não quer dizer que eu esteja imune à maldição do conhecimento, então com certeza vou manter esse ponto em mente
Independentemente do conteúdo do livro em si, também gostei do design da web retrô e minimalista, perfeito para o tema
Bate forte a nostalgia. Lembra os bons tempos de deixar sobre a mesa um livro de 15 cm de espessura com título tipo “HTML 3.2 UNLEASHED!!!!” e fazer o site manualmente
Só que a diversão acaba quando você tenta aplicar uma mudança global em umas 1500 páginas estáticas. Ainda não sofro o bastante para querer criar um CMS eu mesmo, mas, mesmo que criasse, manteria o design como está
https://web.archive.org/web/20231210141834/http://t3x.org/t3...