Compilador Rust escrito em C
(notgull.net)Por que escrever um compilador Rust em C?
-
Há vários motivos para a redução recente na atividade
- acontecimentos pessoais, como a morte de familiares
- aumento das responsabilidades no trabalho
- diminuição da motivação por open source
- foco em um novo projeto
-
Este projeto consiste em escrever um compilador Rust em C puro
- escrito em C puro, sem C++,
flex,yaccouMakefile - o nome do projeto é Dozer
- escrito em C puro, sem C++,
Por que fazer isso?
- É preciso entender o bootstrapping e sua importância
- para executar código Rust, é necessário um compilador
- o principal compilador de Rust é o rustc
- o rustc é escrito em Rust e é necessário para compilar código Rust
- para compilar o rustc, é necessária uma versão anterior do próprio rustc
- as primeiras versões do rustc eram escritas em OCaml
- o compilador de OCaml pode ser compilado por Guile, e o Guile é escrito em C
Princípio da descida
-
Introdução ao projeto Bootstrappable Builds
- começa com uma semente binária de 512 bytes
- gera compiladores gradualmente mais complexos a partir de um compilador simples
- por fim, consegue compilar TinyCC, GCC, Linux e outros
-
O Rust aparece muito tarde nesse processo
- usa-se o mrustc para compilar a versão 1.56 do rustc
- se você quiser usar Rust antes da introdução do C++, isso é impossível
-
O Dozer tem como objetivo ser um compilador Rust bootstrappável em C
- ele deve conseguir fazer bootstrap com TinyCC
Plano
-
Trabalho no Dozer nos últimos dois meses
- pode ser compilado com TinyCC e cproc
- usa o QBE como backend
- no momento, o lexer e parte do parser estão prontos
- a expansão de macros/módulos está sendo adiada
- a checagem de tipos suporta apenas
i32 - a geração de código ainda está incompleta
-
Planos para o futuro
- evoluir o Dozer gradualmente para conseguir compilar exemplos básicos com
libc,libcoree o rustc - criar uma ferramenta semelhante ao
cargopara compilar pacotes Rust - remover código gerado automaticamente
- criar um processo para compilar o rustc e o
cargo
- evoluir o Dozer gradualmente para conseguir compilar exemplos básicos com
Resumo do GN⁺
- Este texto fala sobre um projeto para escrever um compilador Rust em C puro
- explica a importância do bootstrapping e o processo de criar um compilador Rust por esse caminho
- o projeto Dozer tem como objetivo um compilador Rust bootstrappável em C
- o projeto é extremamente desafiador, e não está claro se terá sucesso, mas a tentativa em si já tem valor
1 comentários
Comentários no Hacker News
Para fazer o bootstrap do Rust, parece melhor escrever um proto-Rust em C e depois escrever o compilador completo de Rust em proto-Rust
Estou escrevendo um compilador de C em Rust como hobby, e o chamo de "Small C Compiler"
printf("Hello World!")typedefO mesmo problema de bootstrap também existe no hardware
Tive que seguir 4 links para encontrar as vantagens do bootstrap
Quando C++ entra na cadeia de bootstrap, o bootstrap praticamente acaba
Para gerar um novo binário no sistema-alvo, o rustc precisa oferecer suporte a esse sistema
Imagino escrever um interpretador ou compilador de C++ em Scheme
Olhando a pilha inteira, isso pode ser uma forma de contornar o problema de "trusting trust"
Gosto da ideia de usar QBE como backend
Dá para considerar usar FORTH como parte da toolchain no processo de bootstrap