16 pontos por xguru 2024-06-24 | 10 comentários | Compartilhar no WhatsApp
  • Empresa (não divulgada) que atende centenas de milhões de usuários e usa C e C++ em sistemas centrais
  • Ao longo de 2023, houve discussões sobre qual linguagem adotar entre Rust e Zig
  • Principais fatores considerados:
    1. Interoperabilidade com C
    2. Escalabilidade de engenharia (contratação, manutenção etc.)
  • Escolha final: Zig
  • Compartilho isso porque acho que o processo de escolha mostra bem os "fatores considerados quando o código roda em vários alvos e afeta centenas de milhões de usuários" em uma grande empresa

A importância da interoperabilidade com C

  • A biblioteca que se queria reescrever provavelmente seria usada em todas as plataformas (web, mobile, headsets de VR, consoles de jogos, desktop etc.)
  • Por isso, oferecer uma API em C e usá-la via FFI era a única forma de garantir execução em todas as plataformas

Principais pontos de discussão

Rust

  1. Na época, era mais de 25 vezes mais popular que Zig (com base em pesquisas e no subreddit)
  2. Estava estável havia mais tempo
  3. O apoio industrial à Rust Foundation parecia estável
  4. Excelente LSP e experiência para desenvolvedores
  5. Cargo: gerenciador de pacotes de nível líder no setor
  6. Segurança de memória e "ausência de comportamento indefinido" (não é totalmente verdade, mas foi mencionado na discussão)
  7. Para sair do C++, Rust parecia mais adequado por não permitir erros de memória nem possibilidades de comportamento indefinido
  8. Suporte a SIMD na versão nightly
  9. Suporte a WASM tão fluido quanto o do Zig
  10. Em desempenho, equivalia ao Zig ou, em alguns casos, era "consideravelmente mais rápido"
Interoperabilidade com C no Rust:
  • Rust tem um ecossistema próprio muito rico, então a importância da interoperabilidade com C é relativamente menor
  • Ótimo potencial de integração com linguagens de mais alto nível, como bindings para Python
  • Havia o argumento de que as vantagens de usar Rust compensavam as desvantagens de fornecer bindings em C

Zig

  1. Fácil de aprender para desenvolvedores com background em C/C++ ou TypeScript
  2. Proporciona uma experiência de programação prazerosa para quem vem de C
  3. O compilador do Zig também compila C e C++, o que ajuda no gerenciamento de dependências e na construção de bibliotecas com ABI de C
  4. Suporte muito fácil a várias plataformas-alvo (o comando zig targets recebeu muitos elogios)
  5. É fácil escrever software rapidamente (suporte nativo a Vector, uso de SIMD etc.)
  6. Compatível com depuradores existentes
  7. Excelente sistema de build (uma melhoria de 100x em relação ao Makefile existente)
  8. Alta transparência financeira da Zig Software Foundation
  9. Possibilita portar gradualmente o código C++ existente e "zigificar" o projeto
  10. Resolve com segurança os problemas de linkedição/compilação para todas as plataformas-alvo

Conclusão

  • Zig reduz bastante o tempo e o esforço necessários para portar a base de código existente e garantir compatibilidade com todas as plataformas
  • Fatores decisivos inesperados:
    1. Facilidade de aprendizado e contratação tiveram impacto maior do que o esperado (a favor do Zig)
    2. A experiência do desenvolvedor relacionada ao toolchain teve papel importante
    3. O compilador e o sistema de build do Zig ajudaram muito por causa da compatibilidade com a base de código existente
    4. O ecossistema, a comunidade e as garantias de segurança de memória do Rust tiveram menos impacto do que se imaginava

10 comentários

 
qpfjf56 2025-04-30

Gostei muito do texto, foi uma leitura divertida! Eu estava pesquisando sobre node, bun e deno, e acabei vendo que o bun foi escrito em uma linguagem desconhecida para mim chamada zig, então fiquei curioso para saber que linguagem era — foi ótimo ter esta prévia!

 
ahwjdekf 2025-01-17

Um grande problema no Zig é que, quando há um erro no código escrito pelo usuário durante a compilação, ele não informa a localização exata nem detalhes precisos. Parece que ele só mostra informações até a biblioteca padrão.

 
cosine20 2024-07-01

Ao ler os pontos considerados, os tópicos de discussão e a conclusão, parece que desde o início nem era um ambiente que realmente precisasse de Rust. Você já viu algum entregador de comida dirigindo um off-road para fazer entregas?
Tem que desenvolver em linguagem nativa, claro, mas se não for um trabalho crítico em termos de memória, o certo é escolher o lado que é mais prático para desenvolver. Nem precisava passar um ano inteiro discutindo isso...

 
[Este comentário foi ocultado.]
 
botplaysdice 2024-06-24

Dezenas de milhões de usuários como público-alvo....

Fiquei curioso para saber que empresa é essa. Parece uma empresa que não fica presa a procedimentos formais como certificações... inveja...

 
bus710 2024-06-24

Costumo dar uma olhada no Zig uma vez por ano, e parece que quase todo ano houve alguma breaking change;;
Além disso, a própria linguagem não vem com uma biblioteca pronta para filas ou passagem de mensagens entre threads, então, em comparação com a maturidade do Rust, ainda parece ter um longo caminho pela frente.
Claro, se o usuário conhecer muito bem as APIs do sistema operacional, talvez isso não seja um grande problema…

 
tested 2024-06-24

Rust é mais de 25 vezes mais popular que Zig, mas parece que, para conseguir emprego, Zig leva vantagem.

 
rlcks97 2024-07-01

Acho que é por causa do item 1: desenvolvedores com experiência em C/C++ ou TypeScript conseguem aprender com facilidade.

 
daejin 2024-06-24

Proporciona uma experiência de programação prazerosa para desenvolvedores com background em C
É fácil escrever software rapidamente (suporte nativo a Vector, uso de SIMD etc.)

Lembra a sensação de quando aprendi Python pela primeira vez

 
tsboard 2024-06-24

Eu estava me perguntando por que escolheram justamente Zig ao ver o Bun sendo desenvolvido nessa linguagem, e graças a um bom texto comparando com Rust agora entendo. Dito isso, parece que a linguagem C realmente será eterna.