- 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
Comentários do Hacker News
esolangs)structmais antigo de Ritchie e o compilador C do Unix v7