C# agora supera Rust em tamanho no WASM

Uma nova toolchain experimental afirma produzir binários WebAssembly em C# menores do que os de Rust para um programa mínimo no estilo “hello world”, o que levou a questionamentos sobre quão justa é a comparação e quanto de pós-processamento e redução do runtime está envolvido. Comentadores observam que Rust também pode ser fortemente otimizado para tamanho, e que C# atualmente não pode contar com o WASM garbage collector emergente, de modo que qualquer ganho de tamanho depende muito da carga de trabalho e da toolchain, não sendo uma vantagem geral. A discussão se amplia para saber se o WASM vale a complexidade fora de apps pesados no navegador, e para uma avaliação mais ampla dos pontos fortes de C#, lacunas do ecossistema e relevância de longo prazo em comparação com linguagens como Rust, Zig e TypeScript.

Validade e justiça do benchmark

  • Vários comentaristas consideram enganosa ou injusta a formulação “C# supera Rust”.
  • A saída WASM de C# é altamente otimizada para tamanho e depois pós-processada (por exemplo, via Binaryen), enquanto a linha de base de Rust é apenas modestamente otimizada.
  • As pessoas observam que Rust tem técnicas adicionais bem conhecidas para reduzir tamanho (recompilar std para tamanho, remover dados de formatação/localização, comportamento abort mais agressivo) que não foram aplicadas.
  • Benchmarks entre linguagens são amplamente vistos como inerentemente difíceis e frequentemente como clickbait se não se basearem em código idiomático e do mundo real.

C# em WASM vs Rust/Zig/C

  • O resultado mostrado (~46–47 KiB para um pequeno programa em C#) é visto como tecnicamente impressionante.
  • C# atualmente não usa Wasm GC; ele traz seu próprio runtime e GC, com alguns recursos como reflection ausentes.
  • Há discussão sobre recursos ausentes ou problemáticos do garbage collector do WebAssembly (weak refs, finalizers, ponteiros internos) e sobre como C# contorna isso (por exemplo, ref struct/Span<T>).
  • Binários Rust WASM são frequentemente considerados “grandes”, mas um comentário afirma que um pequeno hello world em Rust (40 KiB) é semelhante ao Zig (45 KiB), com C ainda bem menor (~4 KiB).

Valor prático do WASM

  • Alguns desenvolvedores veem pouco apelo real para WASM fora de apps pesados, de nível desktop (por exemplo, CAD, edição de vídeo); eles preferem renderização no servidor mais JS.
  • Outros enfatizam os pontos fortes do WASM: isolamento no navegador, portabilidade, melhor conteinerização para computação incorporável e casos de “edge”, embora ainda não seja visto como central para a maioria dos apps.

Toolchain, licenciamento e Blazor

  • A nova toolchain é separada da stack oficial .NET/Blazor e mira uso em produção com payloads muito menores do que o Blazor WASM atual (frequentemente >10 MB).
  • Alguns ficam receosos porque a toolchain não é open source; eles se preocupam com futuros custos de licenciamento e evitam adotá-la por esse motivo.

Visões sobre C# (e F#) de forma mais ampla

  • Muitos elogiam C# para trabalho de backend: tooling forte, recursos modernos, bom desempenho e boa ergonomia em comparação com Java.
  • As críticas incluem: superfície da linguagem muito grande, design inconsistente/menos composicional em comparação com Rust, ecossistema numérico mais fraco em comparação com Python, e complexidade em torno de async/paralelismo.
  • Alguns sugerem que F# oferece uma linguagem ainda melhor no mesmo runtime, embora receba comparativamente pouco investimento.
  • Há debate sobre a relevância de longo prazo de C#, incluindo especulação de que ferramentas de IA podem levar novos desenvolvedores a outras stacks por padrão, a menos que sejam direcionados explicitamente.