Situação do desenvolvimento do compilador Rust baseado em GCC
- O gccrs, projeto de compilador Rust baseado em GCC, começou em 2014 e tem como objetivo implementar um compilador Rust dentro do GNU Compiler Collection (GCC).
- O objetivo do gccrs era ser incluído no lançamento do GCC 13, mas isso não foi alcançado; agora a meta é ser incluído no GCC 14, previsto para meados de 2024.
- O gccrs tem como alvo a versão 1.49 do Rust, a última versão antes da introdução de const generics.
- Um dos princípios importantes do projeto gccrs é não criar um "superset" de Rust, mas reproduzir exatamente a saída do
rustc.
- A biblioteca padrão do Rust é composta por vários "crates", e o gccrs está concentrado em oferecer suporte à compilação dos crates core e alloc.
- Atualmente, o gccrs ainda não consegue compilar esses crates devido à falta de vários recursos, entre eles a ausência de um borrow checker e a falta de suporte, no GCC, a LLVM intrinsics.
Aproveitando as vantagens do ecossistema GCC
- Um dos principais motivos para o desenvolvimento do gccrs é permitir o uso dos plugins de segurança do GCC.
- O gccrs já está sendo usado pela comunidade homebrew do Sega Dreamcast, e com plugins do GCC é possível realizar análise estática de código Rust unsafe.
- O esforço do gccrs também permitiu contribuir com funcionalidades adicionais para a especificação do Rust, e o projeto pretende participar do trabalho de elaboração da especificação oficial da linguagem.
Funcionalidades em desenvolvimento
- O gccrs ainda carece de muitos recursos centrais, incluindo async/await, LLVM intrinsics ausentes no GCC e a macro
format_args!().
- O projeto Polonius implementa um borrow checker que calcula o tempo de vida das referências com um algoritmo diferente, para resolver limitações do borrow checker atual do
rustc.
- O trabalho na macro
format_args!() já começou, e ela é necessária para montar os argumentos passados a outras macros de formatação de strings.
rustc_codegen_gcc
- rustc_codegen_gcc é outro projeto Rust baseado em GCC, mais maduro e com escopo mais limitado do que o gccrs.
- rustc_codegen_gcc usa a biblioteca libgccjit para se conectar à API do backend LLVM do
rustc, realizando a compilação nas fases finais tanto do rustc quanto do GCC.
- Em outubro de 2023, o rustc_codegen_gcc já conseguia compilar Rust for Linux sem patches adicionais.
Rust for Linux
- O projeto Rust for Linux fornece documentação sobre como compilar código Rust para o kernel usando
rustc ou rustc_codegen_gcc.
- O gccrs tem como objetivo oferecer suporte ao Rust for Linux, mas isso ainda parece distante devido à grande diferença em relação à versão do
rustc atualmente suportada.
Opinião do GN⁺
- O projeto gccrs busca implementar um compilador Rust baseado em GCC, o que pode trazer diversidade ao ecossistema Rust e potencial para aproveitar ferramentas já existentes, como os plugins de segurança do GCC.
- Embora o gccrs ainda não consiga compilar partes essenciais da biblioteca padrão do Rust, é digno de nota que ele já tenha encontrado um caso real de uso na comunidade homebrew do Sega Dreamcast.
- Este artigo oferece uma visão interessante sobre as diferentes implementações de compiladores para a linguagem Rust e as possibilidades de expansão do ecossistema decorrentes disso.
1 comentários
Comentários do Hacker News
Resumo do primeiro comentário:
Resumo do segundo comentário:
Resumo do terceiro comentário:
Resumo do quarto comentário:
Resumo do quinto comentário:
Resumo do sexto comentário:
Resumo do sétimo comentário: