2 pontos por GN⁺ 2023-12-19 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2023-12-19
Comentários do Hacker News
  • Resumo do primeiro comentário:

    • O artigo parece fraco ao justificar a motivação para o desenvolvimento do gccrs.
    • O gccrs está sendo desenvolvido para aproveitar os plugins de segurança do GCC.
    • A iniciativa "Rust for Linux", que adiciona suporte a Rust ao kernel Linux, é outro motivo.
    • É uma motivação importante porque muitos desenvolvedores do kernel querem compilar o kernel Linux usando apenas a toolchain GNU.
    • O motivo para usar o GCC como backend é explicado, mas falta explicar por que é necessário um frontend duplicado.
    • É preciso aprender com os erros do C++, e múltiplos frontends tornam o desenvolvimento entre plataformas mais difícil.
    • Estão tomando cuidado para que o gccrs não se torne "GNU Rust" e tentando replicar a saída do rustc.
  • Resumo do segundo comentário:

    • Rust precisa de um padrão da linguagem.
    • Muitas organizações e setores não adotarão Rust sem um padrão.
    • Outras linguagens, como C, C++, C#, JavaScript (ECMAScript), todas têm padrões.
  • Resumo do terceiro comentário:

    • Há surpresa com a reação negativa ao GCC-RS.
    • Se uma linguagem não tem várias implementações, então essa linguagem é incompleta.
  • Resumo do quarto comentário:

    • O gccrs permitirá suporte a Rust em arquiteturas que o LLVM não suporta.
  • Resumo do quinto comentário:

    • Considera um erro o gccrs tentar reproduzir até os bugs e as peculiaridades do rustc.
    • Rust não tem uma especificação oficial, e documentá-lo apenas com uma implementação de referência única é uma fraqueza de longo prazo.
    • Tentar fazer o código existente funcionar em todas as implementações é razoável, mas há o problema de perpetuar decisões erradas e bugs.
    • A Microsoft faz muito esforço para manter programas antigos funcionando.
    • Rust não deveria assumir esse fardo tão cedo no desenvolvimento da linguagem.
    • Para evoluir, a linguagem precisa aceitar QA e QC.
    • Linguagens com padrões fortes aceitam essa ideia.
  • Resumo do sexto comentário:

    • Agradece por postar o link do lwn.net, pois isso o lembrou de renovar a assinatura.
  • Resumo do sétimo comentário:

    • O Linux já pode ser compilado com clang.
    • Desenvolver e manter esse esforço duplicado por causa da "pureza" do GNU não parece valer a pena.