Pergunta

Eu estou escrevendo um compilador href="http://www.cs.princeton.edu/~appel/modern/ml/" rel="nofollow noreferrer"> Tiger

Este é o meu primeiro compilador, mas definitivamente não será a minha última. Então ... o que seria uma boa arquitetura alvo para um primeiro compilador?

Eu tenho pensado sobre a segmentação do CIL (NET), mas o código intermediário em o livro parece mais adequado para uma máquina de registo.

Eu também gostaria de saber onde eu deveria ir quando eu terminar este compilador. Devo tentar alvejando uma outra arquitetura? Devo concentrar em outra parte do compilador? Por quê?

Foi útil?

Solução

Para a satisfação pessoal pura, não há substituto para visando o hardware que você tem e e executar o código compilado no bare metal . No entanto, existem alternativas razoáveis:

  • Os MIPS é um conjunto de instruções muito limpo e simuladores como SPIM são prontamente disponível. Seu compilador será simples e sua depuração experiências relativamente feliz.

  • Dependendo porque você está escrevendo um compilador, você pode ser feliz como alvo um baixo nível de linguagem compilada-alvo como LLVM ou C-- . Mas por que alguém tem toda a diversão de escrever o seu back-end?

  • Se você tiver hardware Intel ou AMD, eu recomendo usar o conjunto de instruções de 64 bits com extensões SSE. Você terá o dobro de registros para brincar, e seu código de ponto flutuante (se houver) será sã.

Outras dicas

Se você estiver usando F # para escrever o compilador, emitindo CIL certamente soa como uma boa decisão, como você vai ser capaz de usar todas as capacidades embutidas de CodeDOM etc.

Alternativamente, você pode projetar seu próprio formato de saída e escrever uma VM rodando dentro NET, se isso tornar a saída mais fácil (em virtude de ser uma arquitetura mais adequada). Pode ser mais fácil de depurar - embora, naturalmente, faz a escrita média da VM também:)

Você já pensou sobre a segmentação x86 assembly? Eu fiz um tigre compilador mim alguns anos atrás, e o conjunto emissor, embora difícil de escrever, foi uma das coisas mais gratificantes em todo o projecto. Escrever o seu próprio pequeno VM em C também é um bom (se não melhor) idéia.

Segmentação VM existente é pragmática, se você estiver criando uma linguagem de produção, mas remove muitas possibilidades de aprendizagem do exercício.

Se eu fosse você, eu iria dar uma olhada em diferentes técnicas de otimização mais tarde no projeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top