O molho secreto: um novo gerador de código Rust

Uma chave para fornecer software Windows de nível de produção com Rust é uma nova ferramenta de geração de código para o compilador de Rust, Rustc. Rustc foi projetado para usar diferentes back-ends de geração de código, além do LLVM padrão. Já existem variantes que funcionam com GCC e com Cranelift. Se você ainda não conheceu o Cranelift, é o gerador de código da Bytecode Alliance, usado como parte da estrutura wasmtime. Adicionar um novo gerador de código é uma questão de construir uma ferramenta que se conecte às APIs do compilador Rust, pegue sua saída de bytecode, gere código nativo e o passe para o pipeline de construção de sua escolha.

Esta é a função das ferramentas rustc_codegen_utc da Microsoft. Ele foi projetado para funcionar com a pilha MSVC existente, dando ao Rust acesso a uma parte madura, bem testada e comprovada da plataforma de desenvolvimento do Windows, sem a necessidade de quaisquer alterações em seu código (a compatibilidade está incorporada). Isso o vincula diretamente ao back-end do compilador Visual C++, um conjunto de ferramentas organizadas pelo sistema de compilação da Microsoft para trabalhar com projetos complexos que misturam código e bibliotecas.

A Microsoft chama esse back-end de UTC, para Universal Tuple Compiler. Você não verá esse nome em lugar nenhum; o código real é uma DLL, C2.DLL. O código é gerado e entregue como arquivos .OBJ, onde pode ser passado para o vinculador MSVC e entregue como um executável binário. Isso permite que as ferramentas Rust aproveitem as décadas de trabalho que a Microsoft colocou em seus compiladores e ferramentas de construção. Não há necessidade de a Microsoft duplicar esse trabalho, garantindo que os recursos existentes de segurança e resiliência sejam transferidos para a cadeia do compilador Rust. E o código resultante é compatível com código C e C++ que foi passado pelo mesmo back-end.