10 pontos por GN⁺ 2023-09-05 | 1 comentários | Compartilhar no WhatsApp
  • O autor assumiu o difícil desafio de escrever um compilador de C em 500 linhas de código Python
  • O compilador é de passagem única: ao contrário dos compiladores tradicionais de duas passagens, que primeiro constroem a árvore sintática e depois a convertem em código de máquina, ele gera código durante o parsing
  • O compilador tem como alvo o WebAssembly, uma decisão motivada mais pela curiosidade do que pela praticidade. São destacadas as dificuldades peculiares do WebAssembly, como a ausência de registradores e o uso de uma máquina de pilha
  • Devido à restrição de 500 linhas, o compilador não oferece suporte a certos recursos de C, como struct, enum, union, diretivas do pré-processador, ponto flutuante e tipos de 8 bytes
  • O compilador passa em 34 dos 220 casos de teste do c-testsuite e consegue compilar e executar com sucesso um programa que calcula a sequência de Fibonacci
  • O texto fornece uma análise detalhada do código do compilador e explica como ele lida com vários aspectos da sintaxe de C, além de quais são as dificuldades de trabalhar com WebAssembly
  • Apesar da complexidade de um compilador, o texto mostra que, sacrificando a qualidade do código e fazendo tudo em uma única passagem, é possível obter algo surpreendentemente conciso
  • Também sugere que esse tipo de compilador de passagem única pode ser excelente como stage0 para uma linguagem self-hosting, justamente por sua concisão
  • A contagem de linhas de código foi medida com a ferramenta sloccount, excluindo comentários, docstrings e espaços em branco

1 comentários

 
GN⁺ 2023-09-05
Comentários do Hacker News
  • Artigo sobre criar um compilador de C usando 500 linhas de Python, comparado ao compilador Tiny Pascal publicado em 1978
  • O compilador é de passagem única, com geração de código feita durante o parsing, um recurso projetado especificamente para C para acomodar a memória limitada dos computadores da época
  • A vantagem de escrever seu próprio compilador é entender compiladores, interpretadores, linker/loader e outros softwares de sistema relacionados, além de ajudar nos esforços de depuração e elevar o nível técnico do desenvolvedor
  • Este projeto é semelhante a outros, como um projeto em TypeScript que gera assembly x86, compila isso em binário e o executa
  • O artigo é elogiado pela clareza das explicações, e isso é visto como um desafio divertido no universo das linguagens de programação esotéricas (esolangs)
  • Escrever um compilador de C em 500 linhas de código fáceis de entender é considerado um desafio importante que exigiria meses de trabalho até mesmo para desenvolvedores experientes
  • O artigo desperta curiosidade sobre outros compiladores pequenos, como um compilador de Scheme para WASM
  • Para comparação, o artigo menciona a contagem de linhas de código (LOCs) de outros compiladores pequenos de C ou semelhantes a C, incluindo o compilador struct mais antigo de Ritchie e o compilador C do Unix v7