Material introdutório sobre compiladores e projeto de linguagens (2021)
(dthain.github.io)- Material online gratuito desenvolvido para a disciplina de compiladores CSE 40243 de Notre Dame, com PDF completo e PDFs por capítulo disponíveis para download imediato
- Ao longo de um semestre, acompanha o fluxo de construção de um compilador, abordando o processo de traduzir programas de linguagens de alto nível para programas de baixo nível
- O objetivo para o aluno é implementar um compilador simples que receba uma linguagem semelhante a C e a converta em assembly X86 ou ARM
- É mais adequado para estudantes de graduação com experiência em programação em C e que já tenham estudado estruturas de dados e arquitetura de computadores
- Os PDFs podem ser usados para fins pessoais e acadêmicos, mas a impressão e distribuição comercial são proibidas, e o material mais recente deve ser consultado em compilerbook.org
Material baseado na disciplina de compiladores de Notre Dame
- Introduction to Compilers and Language Design é um material online gratuito desenvolvido por Douglas Thain para a disciplina de compiladores CSE 40243 da University of Notre Dame
- A 2ª edição é de 2020, com data de revisão indicada como 15 de janeiro de 2021
- Leitores que desejarem um livro físico podem comprar a versão em capa dura ou brochura
- O material trata dos aspectos teóricos e práticos da ciência da computação por meio do processo de construir um compilador do zero
- O objetivo final de aprendizado é implementar um compilador simples que receba uma linguagem semelhante a C e a traduza para assembly X86 ou ARM
PDFs, código de exemplo e condições de uso
- São fornecidos o PDF completo do material e PDFs por capítulo
- O apêndice inclui Sample Course Project, The B-Minor Language e Coding Conventions
- O repositório GitHub compilerbook-examples contém materiais práticos correspondentes ao livro
- vários scanners e parsers
- estrutura de código inicial para o compilador do projeto
- casos de teste de exemplo para cada etapa: scanner, parser, verificador de tipos e gerador de código
- Os PDFs podem ser baixados, impressos e usados para fins pessoais e acadêmicos
- A impressão ou distribuição comercial é proibida, e em vez de copiar e distribuir o PDF localmente, deve-se orientar os alunos a acessar a página compilerbook.org
- Erros tipográficos ou outros problemas podem ser enviados por e-mail para
dthain@nd.edu, com o assuntoCompiler Book Errata
1 comentários
Comentários do Hacker News
Fiz a disciplina de compiladores do Dr. Thain na faculdade e foi excelente
Ele era um ótimo professor, e por causa do projeto da disciplina pude construir passo a passo um compilador estilo C com as próprias mãos. Os projetos de exemplo aqui também parecem quase idênticos aos que fiz naquela época, e recomendo fortemente seguir até o fim
Ainda não sei em quais aulas isso foi abordado, mas C4(https://news.ycombinator.com/item?id=8558822) e C4x86(https://news.ycombinator.com/item?id=8746054) parecem ótimos temas de estudo para um semestre inteiro
Como são compiladores muito pequenos, autocompiláveis, para um subconjunto de C, também parecem uma boa base para trabalhos extras de extensão de funcionalidades
Texto relacionado: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - maio de 2022, 68 comentários
Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - abril de 2019, 1 comentário
Dá a sensação de ficar girando apenas dentro de um escopo estreito ao redor de C e suas convenções peculiares
Até na descrição do livro está escrito que é “uma introdução de um semestre que permite ao leitor criar um compilador simples que aceita uma linguagem parecida com C”
Então, segundo o prefácio, o Dragon Book seria de nível avançado de pós-graduação?
É um clássico, mas trata só um pouco dos fundamentos de teoria da computação e, no restante, passa rapidamente pelo conteúdo de compiladores
Não cobre de fato os tópicos modernos de compiladores em nível de pós-graduação, nem é um livro prático. O Tiger Book é uma introdução bem melhor em termos de equilíbrio entre prática e teoria
Acho difícil que tópicos realmente avançados de compiladores sejam bem cobertos por um único livro
Está escrito: “Cobrir todo ou a maior parte deste livro exige pelo menos dois trimestres ou dois semestres. Em geral, a primeira metade é usada na graduação, enquanto a segunda metade, com ênfase em otimização de código, é abordada na pós-graduação ou em um segundo curso de nível intermediário”
Às vezes, quando vejo pessoas que projetam linguagens e criam compiladores, acho impressionante demais
Tentei criar uma linguagem por curiosidade, mas era difícil demais, então acabei me contentando com um backend em C. As pessoas que contribuem para o LLVM parecem saber até a geração de assembly, e isso é realmente impressionante
Eu era desenvolvedor web e depois fui trabalhar com compiladores baseados em LLVM, e o próprio LLVM é tão grande que não é fácil aprender todas as áreas e mecanismos
Mas, para escrever passes menos complexos, corrigir bugs e regressões, não é preciso um conhecimento tão extraordinário
Escrever um assembler é uma boa forma de se familiarizar com a estrutura de compiladores, porque você não precisa se preocupar com otimizações, tipos ou vários recursos que tornam linguagens de alto nível mais complexas
Só de implementar o frontend da gramática da linguagem e um pequeno loop de avaliação já dá para examinar grande parte da linguagem real. Como você não fica preso à resolução de problemas concretos, isso também é ótimo para aprender e ensinar
Então não há absolutamente nenhum motivo para ter vergonha de ter se contentado com um backend simples em C
Só de passar os olhos pelo sumário, quase não aparecem os principais temas de projeto de linguagens
Parece mais uma “introdução a compiladores” do que o que o título sugere
É um nível adequado para entender algo como um compilador de Python, Ruby ou Pascal mais simples
Compiladores e projeto de linguagens são áreas tão antigas quanto esta indústria, então há conhecimento demais para caber em uma única disciplina. Ainda assim, este curso parece bom, e eu o considero melhor do que cursos parecidos baseados no Dragon Book
Em meio a temas de IA e ao barulho, é bom ver um texto sobre compiladores assim
Usos corretos e de alta qualidade de IA têm valor, e trabalhos que não usam IA também têm valor. Seria bom ter critérios razoáveis para resultados ligados a IA, em vez de simplesmente diminuir o trabalho dos outros
Bom texto
Fiquei impressionado com a forma como ele refina e torna nítido novamente um conhecimento que aprendi no passado