2 pontos por GN⁺ 2026-01-17 | 1 comentários | Compartilhar no WhatsApp
  • Livro que ensina na prática design e implementação de linguagens de programação, abordando o processo de criar uma linguagem de script completa
  • Explica passo a passo desde conceitos de alto nível, como parsing, semântica, bytecode e coleta de lixo, até implementações de baixo nível
  • Começando pela função main(), o leitor escreve a própria linguagem com tipagem dinâmica, escopo léxico, funções de primeira classe, classes e herança
  • Disponível em 4 formatos — impresso, eBook, PDF e web — e, na web, todo o conteúdo pode ser lido gratuitamente
  • Escrito por Robert Nystrom, desenvolvedor da linguagem Dart no Google, é um material de aprendizado prático importante para desenvolvedores interessados em criação de linguagens

Visão geral do livro

  • Crafting Interpreters é um livro sobre como implementar, com as próprias mãos, uma linguagem de script eficiente e completa
    • Inclui tanto conceitos de alto nível como parsing e semântica quanto detalhes de implementação de baixo nível, como representação em bytecode e coleta de lixo
    • Foi estruturado para que o leitor escreva o código diretamente e compreenda por completo a estrutura da linguagem
  • A linguagem construída ao final oferece suporte a gramática rica, tipagem dinâmica, coleta de lixo, escopo léxico, funções de primeira classe, closures, classes e herança
    • É composta por milhares de linhas de código conciso e rápido, e todo o código é escrito pelo próprio leitor

Formatos disponíveis

  • O livro é oferecido em quatro formatos: Print, eBook, PDF e Web
    • Print: 640 páginas, com ilustrações desenhadas à mão em alta resolução e tipografia refinada
    • eBook: o CSS se ajusta ao tamanho da tela do dispositivo, com realce de sintaxe em cores e hiperlinks
    • PDF: reproduz a diagramação e as ilustrações da edição impressa, com mais portabilidade
    • Web: inclui todos os capítulos e ilustrações em design responsivo, com acesso gratuito ao conteúdo completo

Sobre o autor

  • O autor Robert Nystrom participa do desenvolvimento da linguagem Dart no Google
    • Anteriormente, trabalhou por 8 anos no desenvolvimento de jogos na Electronic Arts
    • É autor do best-seller Game Programming Patterns, que também está disponível gratuitamente
  • Fascinado por criação de linguagens, desenvolveu vários projetos pessoais de linguagens (Wren, Magpie, Finch, Vigil)
  • Também atua em seu blog pessoal e no Twitter (@munificentbob), além de manter uma mailing list relacionada ao livro

Acesso e compra

  • A edição impressa pode ser comprada em grandes livrarias como Amazon, Barnes & Noble e Book Depository
  • O eBook está disponível em Kindle, Apple Books, Google Play Books e Smashwords
  • A versão em PDF pode ser comprada no Payhip, com opção de baixar uma amostra gratuita em PDF
  • A versão web pode ser lida gratuitamente na íntegra no site oficial

1 comentários

 
GN⁺ 2026-01-17
Comentários no Hacker News
  • Ao ler este livro, passei a entender melhor o expression problem e o padrão visitor como solução para ele
    Graças a isso, também compreendi completamente o conceito de herança de hierarquia de classes (Class Hierarchy Inheritance), que dispensa visitor
    Na linguagem Newspeak, é possível ter classes aninhadas dentro de uma classe, e essas classes aninhadas também são herdadas junto no processo de herança
    Este post de blog aborda como esse recurso viabiliza Free Object Algebras: este post de blog
    Referência: artigo sobre Expression Problem, site oficial do Newspeak
  • Houve duas discussões muito populares sobre este excelente livro
    Em 2020, teve 777 pontos, e em 2024 registrou 607 pontos
  • Este livro foi um material realmente ótimo para aprender uma nova linguagem
    Isso porque você aprende implementando por conta própria vários recursos e padrões de linguagem
    Em linguagens com recursos que não existem em Java, é difícil aplicar padrões parecidos, mas o próprio desafio era divertido
  • Li este livro inteiro durante as férias de inverno
    Gostei muito do estilo casual de escrita do autor e do humor espalhado ao longo do texto
    Espero que saia uma continuação como “Adicionar um verificador de tipos ao Lox”
  • É um livro realmente excelente
    No começo comprei a edição física, mas ela era grande e pesada demais, então acabei comprando de novo em ebook
    Fazer anotações e pesquisar ficou muito mais prático
    Ainda assim, às vezes parece que você está perdido na montanha enquanto lê :)
    Também recomendo outro livro do autor, Game Programming Patterns
    • Eu também cheguei a trocar a encadernação por espiral
      Qualquer gráfica faz isso facilmente, e fica muito mais prático de manusear na mesa
      Mas Crafting Interpreters é um livro que eu simplesmente não consigo jogar fora, então deixei como está
  • Comprei a edição impressa três vezes para presentear
    É esse o nível de qualidade do livro
    • Obrigado por comprar uma cópia para presente :)
  • É um dos melhores materiais para aprender projeto de compiladores
    Além disso, o fato de a versão web ser gratuita é algo realmente generoso
    • Só que a palavra ‘compiler’ não aparece diretamente no título do livro
  • Gosto muito deste livro
    Só acho uma pena que a versão em Java esteja desatualizada
    Queria que houvesse uma edição revisada refletindo recursos adicionados recentemente, como sealed classes e exhaustive switch
    • Tentar atualizar por conta própria para Java moderno também é um bom exercício prático
      Fazendo isso, você deixa de precisar da ferramenta temporária de geração de código criada pelo autor
  • Eu queria entender como fazer o parsing de sintaxe dependente de contexto, como typedef em C++
    Existe uma abordagem mais hacky de adicionar uma context stack em um parser baseado em PEG, mas o problema de trocar a interpretação da sintaxe continua difícil
    persistent data structure ou transactional data structure parecem que poderiam ajudar, mas ainda não encontrei uma formalização clara
    • Basta consultar o Lexer hack
      A ideia é fazer o parser passar estado para o lexer, para que o lexer saiba o conjunto de nomes de tipos
    • Outro método é usar um functional parser
      Por exemplo, em bibliotecas como Parsec, dá para usar a notação do para que o resultado de cada etapa seja compartilhado com os parsers seguintes
    • O projeto da gramática de C/C++ é de péssima qualidade, e é isso que causa esse tipo de problema
      Felizmente, Rust e Go evitaram isso, e com um projeto cuidadoso dá para prevenir bem esse tipo de situação
  • Para quem quer começar com interpretadores, compartilho alguns materiais
    Vale a pena conferir o projeto shi e, se você tiver interesse em C, também o hacktical-c