2 pontos por GN⁺ 5 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • 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

1 comentários

 
GN⁺ 5 시간 전
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

    • Provavelmente é uma escolha intencional
      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?

    • O Dragon Book é meio peculiar
      É 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
    • Só de olhar o prefácio da edição de 2006, parece que os autores veem este livro em grande parte como um material de nível de pós-graduação
      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

    • Não necessariamente
      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
    • A geração de assembly em si é, na verdade, bem simples; o difícil é otimizar tudo
      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
    • Quando estou aprendendo uma nova linguagem, o que mais gosto é de rapidamente montar um analisador léxico/sintático e um REPL
      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

    • Parece uma estrutura para acompanhar, em nível de graduação, os temas centrais de como uma linguagem funciona
      É 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
    • Que livro você recomendaria para aprender projeto de linguagens de programação? Fiquei curioso sobre quais seriam os tópicos que estão faltando
  • Em meio a temas de IA e ao barulho, é bom ver um texto sobre compiladores assim

    • O estranho no ódio cego contra IA é que, mesmo sem prova, se você rotula qualquer texto como lixo de IA, o pessoal anti-IA passa a odiá-lo sem fundamento
      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