Rust VS Go, qual linguagem os desenvolvedores devem escolher em 2023?

Fonte: InfoQ

Em 2023, temos mil motivos para aprender Rust.

Em 7 de agosto, a Rust Foundation divulgou os resultados do relatório Rust Survey Report 2022. O relatório mostra que a taxa de adoção do Rust continua a aumentar. Mais de 90% dos entrevistados indicaram que são usuários Rust; Rust é usado para o maioria dos trabalhos de codificação em , um aumento significativo de 51,8% em relação ao ano anterior.

Não há dúvida de que o Rust está se tornando cada vez mais o foco dos desenvolvedores com sua excelente segurança de memória e desempenho de simultaneidade. No entanto, também é difícil ignorar o Go, um jogador relativamente "veterano" que já foi escolhido como a linguagem de programação do ano.

Nascida em 2009, a linguagem Go atraiu grande atenção devido ao seu modelo de simultaneidade exclusivo e poderosas vantagens de desempenho. Vale ressaltar que, assim como a linguagem Rust, o criador da linguagem Go também "odeia" C++, e Go também é a linguagem dominante da nuvem nativa.

Na pesquisa de desenvolvedores Stack Overflow 2022, entre as 70.000 respostas à pergunta "uma linguagem de programação que faz as pessoas amarem e odiarem", os programadores obviamente preferem Rust, 86% deles disseram que gostam de Rust e 64% disseram que gostam de Go. Diante do status quente de Rust, alguns desenvolvedores perguntaram a suas almas: ainda vale a pena aprender Go em 2023?

Rust VS Go, qual linguagem os desenvolvedores devem escolher em 2023?

Rust VS Go, qual linguagem os desenvolvedores devem escolher em 2023?

Além disso, nos últimos dois dias, escolher entre Rust ou Go também se tornou um assunto quente no Hacker News:

Rust VS Go, qual linguagem os desenvolvedores devem escolher em 2023?

Um internauta que apóia Rust disse: "Também estou preocupado com essa escolha há muito tempo. No final, Rust venceu. Primeiro, sinto que Rust está mais próximo das coisas da era Pascal anterior e você pode controlar tudo ; segundo, se wasm e tecnologias relacionadas forem grandes surtos, Rust seria uma escolha mais segura; então, já temos Python para desenvolvimento rápido, então faz sentido escolher algo um pouco mais extremo, e Go está um pouco no meio termo. Finalmente, Rust deve ser usado para Core e alto perfil, por isso é improvável que seja eliminado."

Outro desenvolvedor que discordou disse: "Desenvolvo em Go há quase dez anos, mas recentemente também experimentei o Rust. Acho que atualmente há alguma preferência obrigatória e enganosa pelo Rust, pela minha experiência em várias startups, incluindo minha atual, Go é de longe a melhor escolha para desenvolvimento de back-end! Nota, desempenho, funcionalidade ou não... essas duas linguagens são muito, muito parecidas!"

Devo dizer que Go e Rust são linguagens de programação excelentes. Eles são modernos, poderosos, versáteis e oferecem ótimo desempenho. Mas realmente não faz sentido comparar Go e Rust diretamente, quem é melhor, porque cada linguagem de programação representa uma série de trade-offs profundos por trás dela. Diferentes idiomas serão otimizados para diferentes necessidades, portanto, quando escolhemos um idioma, também devemos considerar que tipo de problemas queremos usá-lo para resolver. Portanto, começaremos com os cenários aplicáveis das linguagens Go e Rust e discutiremos o "caminho" do design de Go e Rust.

Embora Rust e Go sejam muito diferentes em sintaxe e estilo, ambos são ferramentas de primeira classe para a construção de software. Vamos começar a análise específica abaixo.

Go vs. Rust: Semelhanças

Rust e Go têm muito em comum, e é por isso que as pessoas costumam comparar os dois. Que objetivos eles têm em comum?

Rust é uma linguagem de programação multiparadigma estaticamente tipada de baixo nível com mais foco em segurança e desempenho.

—Gints Dreimanis

e:

Go é uma linguagem de programação de código aberto que facilita a criação de software simples, confiável e eficiente.

—golang.org

Segurança de memória

Go e Rust estão entre as linguagens de programação modernas que enfatizam a segurança da memória. Ao longo das décadas de desenvolvimento de linguagens mais antigas como C e C++, ficou claro que uma das principais causas de erros e bugs é o acesso inseguro/incorreto à memória.

Portanto, Rust e Go forneceram soluções diferentes, mas o objetivo de ambos é ser mais inteligente e seguro em termos de gerenciamento de memória e ajudar os desenvolvedores a escrever programas corretos com excelente desempenho.

Executável rápido e compacto

Ambas são linguagens compiladas, o que significa que os programas podem ser traduzidos diretamente em código de máquina executável, para que os programas possam ser implantados como um único arquivo binário. Ao contrário de linguagens interpretadas como Python e Ruby, não precisamos enviar um interpretador e muitas bibliotecas/dependências com o programa. Como um reflexo direto dessa força central, os programas Rust and Go tendem a ser executados mais rapidamente do que as linguagens interpretadas.

Linguagem de uso geral

Tanto o Rust quanto o Go são linguagens de programação de uso geral poderosas e extensíveis que você pode usar para desenvolver todos os tipos de software moderno, desde aplicativos da Web a microsserviços distribuídos, microcontroladores incorporados, aplicativos móveis e muito mais. **Ambos têm excelentes bibliotecas padrão e prósperos ecossistemas de terceiros, além de forte suporte comercial e uma grande base de usuários. **Ambos existem há anos e continuarão a prosperar nos próximos anos. Aprender Go ou Rust seria um investimento bastante razoável de tempo e energia hoje em dia.

Estilo de programação pragmática

Nem são linguagens excessivamente funcionais (como Scala ou Elixir), nem totalmente orientadas a objetos (como Java e C#). Ao contrário, embora Go e Rust tenham funções de programação funcional e orientada a objetos, eles sempre enfatizam a orientação pragmática - isto é, resolvem o problema da maneira mais apropriada, ao invés de obrigar todos a usar um método específico através da "ideologia", maneira de fazer as coisas. **Mas se você realmente gosta do estilo de programação funcional, existem mais opções de ferramentas relacionadas no lado do Rust, que é uma das vantagens do Rust sobre o Go. **

Certamente podemos argumentar sobre o que constitui uma linguagem verdadeiramente "orientada a objetos". Mas, para ser justo, o estilo de programação orientada a objetos que os usuários de C++, Java ou C# esperam não existe realmente em Go ou Rust.

—Jack Mott

Desenvolvimento Massivo

Tanto o Rust quanto o Go fornecem muitos recursos úteis para programação em larga escala, para que ambos possam se adaptar às necessidades do mundo real de grandes equipes de desenvolvimento e grandes bases de código. **Por exemplo, os programadores C debateram durante anos sobre onde colocar parênteses e se o código deve ser recuado com tabulações ou espaços; mas Rust e Go já usam ferramentas de formatação padrão (Go tem gofmt, Rust It é rustfmt) resolvem completamente esses problemas. Eles reescrevem automaticamente seu código usando um estilo adequado.

Não é que esse formato específico seja sutil, mas **os programadores Rust and Go são mais pragmáticos e preferem escolher um padrão uniforme de implementação. **

o estilo gofmt pode não ser o favorito de todos, mas gofmt tem algo para todos.

—Rob Pike

Outra grande vantagem dessas duas linguagens se reflete no pipeline de construção. Ambos têm ferramentas padrão de construção e gerenciamento de dependência excelentes, integradas e de alto desempenho. Isso significa que os programadores não precisam lidar com sistemas complexos de compilação de terceiros, nem precisam aprender um novo sistema a cada poucos anos.

Eu usei Java e Ruby no início da minha carreira, então escrever código Go e Rust sempre foi um pouco intimidante e fora do meu controle. Mas quando entrei no Google e vi um serviço escrito em Go, fiquei realmente aliviado porque achei fácil de construir e executar.

O mesmo vale para Rust. Embora eu tenha feito pesquisas apenas em projetos de pequena escala, posso ver sua facilidade de uso. Eu gostaria que esses sistemas de construção infinitamente configuráveis fossem coisa do passado, agora que novas linguagens vêm com suas próprias ferramentas de construção dedicadas que funcionam fora da caixa, não é bom?

—Sam Rose

**Rust or Go? **

Depois de falar de tantos assuntos, e do fato de ambas as linguagens serem tão bem desenhadas e poderosas, há algum resultado nessa competição? Ou, já que ambas são opções excelentes, por que as pessoas ainda estão indignadas nas mídias sociais, escrevendo longos comentários em blogs dizendo "Rust é para idiotas" ou "Go não é uma linguagem de programação" Tipo de palavras duras?

Claro, algumas pessoas querem apenas desabafar suas emoções, mas isso obviamente não ajuda a resolver o problema real. Pelo menos quando se trata de qual linguagem usar em um projeto, ou qual linguagem usar para entrar no mundo da programação, vozes altas obviamente não ajudam a fazer a escolha certa.

Vamos voltar à discussão dos adultos e ver como Rust e Go têm pontos fortes e fracos sob análise racional.

Go vs. Rust: Performance

Como mencionado anteriormente, os programas gerados por Go e Rust são rápidos porque são compilados em código de máquina nativo sem passar por um interpretador ou uma máquina virtual. Mas o desempenho do Rust ainda é melhor, até mesmo comparável a C e C++, que são conhecidos como benchmarks de desempenho do setor. E ao contrário dessas linguagens antiquadas, Rust também fornece segurança de memória e mecanismos de segurança de simultaneidade, enquanto dificilmente afeta a velocidade de execução. O Rust também permite que os desenvolvedores criem abstrações complexas sem incorrer em uma penalidade de desempenho em tempo de execução.

Em contraste, Embora o desempenho dos programas em Go também seja bom, o foco do design é principalmente na velocidade de desenvolvimento (incluindo a compilação), em vez do grau de execução. Os programadores Go preferem um código claro e legível, então a velocidade de execução é um pouco mais lenta.

O compilador Go também não gasta muito tempo gerando o código de máquina mais eficiente, está mais preocupado em compilar grandes quantidades de código rapidamente. **Assim, em benchmarks de tempo de execução, muitas vezes é o programa Rust que supera o programa Go. **

O desempenho do tempo de execução do Rust também é muito consistente e previsível porque não usa coleta de lixo. O coletor de lixo do Go é muito eficiente e otimizado para manter os tempos de pausa o mais curtos possível (os tempos de pausa ficam mais curtos a cada versão do Go). Mas de qualquer forma, a coleta de lixo sempre introduz alguma imprevisibilidade na forma como o programa se comporta, e isso pode ser grave ou até mesmo totalmente inaceitável para certas aplicações (como sistemas embarcados).

Como o objetivo do Rust é dar ao programador controle completo sobre o hardware subjacente, **os programas Rust podem ser profundamente otimizados para atingir o máximo desempenho teórico da máquina. **Isso torna o Rust a melhor escolha para determinados casos de uso em que a velocidade de execução supera tudo o mais, como programação de jogos, kernels do sistema operacional, componentes do navegador da Web e sistemas de controle em tempo real.

  • Simplicidade

Não importa o quão poderosa seja uma linguagem de programação se for muito difícil de aprender e manter a maioria das pessoas de fora. Go parece ter sido projetado deliberadamente para se distinguir de linguagens de complexidade crescente, como C++: **Possui muito pouca sintaxe, muito poucas palavras-chave e nem mesmo muitas funções. **

Isso significa que a linguagem Go é fácil de aprender e você pode escrever vários programas com ela depois de um pouco de compreensão.

Go é realmente fácil de aprender. Já ouvi falar muito disso antes, mas depois de usá-lo ainda estou impressionado com a rapidez com que melhora a produtividade. Graças à linguagem Go, documentação e ferramentas relacionadas, escrevi um código interessante e confirmável em apenas dois dias.

—Primeiras impressões do programador Rust sobre o Go

O ponto chave aqui é "simplicidade" três palavras. Claro, simples não significa fácil. Mas uma linguagem pequena e simples é definitivamente mais fácil de aprender do que uma linguagem grande e complexa. Não há muitas maneiras de obter um efeito, então o código Go de alta qualidade quase sempre parece o mesmo. Isso tem outro benefício: podemos entender rapidamente o que está fazendo um serviço com o qual não estamos familiarizados.

Rust VS Go, qual linguagem os desenvolvedores devem escolher em 2023?

**A ontologia principal do Go é pequena, mas a biblioteca padrão é muito poderosa. **Ou seja, além da sintaxe do Go, nossa curva de aprendizado também deve levar em consideração essa parte da biblioteca padrão.

Por outro lado, a transferência de funções da linguagem para a biblioteca padrão significa que todos precisam se concentrar apenas em aprender as bibliotecas relacionadas às necessidades atuais de desenvolvimento. **O Go também foi projetado levando em consideração as necessidades de desenvolvimento de software em larga escala e pode suportar fortemente grandes bases de código e equipes de desenvolvimento. **Nesse tipo de cenário, novos desenvolvedores devem ser capazes de começar rapidamente. Para isso, a comunidade Go sempre priorizou a simplicidade, clareza, versatilidade e franqueza dos programas.

Usando a linguagem GO, geralmente é mais fácil para os desenvolvedores juniores serem produtivos, mas é mais difícil para os desenvolvedores intermediários introduzir abstrações complexas e, assim, causar problemas. Devido a essa característica, o Rust tende a ser menos atraente do que o Go no mundo do desenvolvimento de software corporativo.

— Loris Cro

  • Função

Rust suporta mais complexidade do que várias outras linguagens de programação, então o escopo de implementação correspondente também é maior.

— Devathon

** Rust foi projetado especificamente para incluir uma variedade de recursos poderosos e úteis que ajudam os programadores a fazer mais com menos código. **Por exemplo, a função match do Rust torna possível escrever rapidamente uma lógica flexível e expressiva:

Rust VS Go, qual linguagem os desenvolvedores devem escolher em 2023?

Mas também porque o Rust tem muitas considerações de design, é mais difícil de aprender, especialmente no estágio inicial. Mas tudo bem, C ++ ou Java tem muito a aprender, afinal, e nem oferece os recursos avançados do Rust, como segurança de memória. Portanto, é realmente irracional criticar o som muito complicado do Rust: ele foi projetado para enfatizar expressão e funções ricas, não podemos esperar que seja tão simples e puro enquanto aproveitamos os benefícios. Então é claro que Rust tem sua própria curva de aprendizado. Mas desde que essa dificuldade seja superada, haverá um caminho tranquilo pela frente.

Se você está pronto para aprender sintaxe e semântica mais complexas (e um nível mais alto de legibilidade de código) em troca do mais alto nível de desempenho, Rust pode até rivalizar com C++ e D. —Dave Cheney

**Embora Rust e Go emprestem alguns recursos um do outro (como genéricos), é justo dizer que os recursos de Rust ainda são superiores e os recursos de Go são relativamente inexistentes. **

  • Simultaneidade

A maioria das linguagens fornece alguma forma de suporte para programação simultânea (ou seja, realizando várias operações ao mesmo tempo), mas o Go foi projetado para isso desde o início. **Go não usa threads do sistema operacional, mas fornece uma alternativa leve: goroutines. **Cada goroutine é uma função Go de execução independente que o agendador Go mapeia para um dos threads do sistema operacional sob controle. Ou seja, o escalonador pode gerenciar um grande número de goroutines concorrentes de forma muito eficiente, enquanto usa apenas um número limitado de threads do sistema operacional.

Portanto, podemos executar milhões de goroutines simultâneas em um único programa sem nos preocuparmos em causar sérios problemas de desempenho. Por isso, **Go é uma solução completa para cenários de aplicações simultâneas em larga escala, como servidores web e microsserviços. **

Go também fornece canais para goroutines, que é uma maneira rápida, segura e eficiente de se comunicar e compartilhar dados. O nível de design de simultaneidade do Go é realmente muito alto e a experiência de uso é bastante descontraída e agradável.

Em geral, o projeto de programas concorrentes é muito difícil, e construir programas concorrentes confiáveis e corretos em qualquer linguagem não é nada fácil. No entanto, como esse requisito foi considerado no início do projeto, o mecanismo de programação concorrente em Go foi simplificado ao máximo e bem integrado.

Go facilita a construção de um aplicativo cuidadosamente desconstruído que pode ser implantado como um conjunto de microsserviços e aproveitar ao máximo a simultaneidade. Não é impossível no Rust, é apenas mais difícil de implementar. De certa forma, Rust é mais adequado para programadores que não devem permitir falhas de segurança causadas por problemas de memória; mas, correspondentemente, quando executam algumas tarefas relativamente simples para outras linguagens (incluindo GO), eles preferem Ter que pagar Mais esforço. —Sonya Koptyev

Por outro lado, o mecanismo de simultaneidade em Rust acabou de chegar e ainda não foi estabilizado, portanto, todos são bem-vindos para continuar prestando atenção a essa direção ativa de desenvolvimento. Isso também é benéfico. Por exemplo, a biblioteca rayon do Rust fornece um método muito elegante e leve que pode converter cálculos sequenciais em cálculos paralelos.

Seria muito bom ter uma sintaxe leve para gerar goroutines e usar canais. Esta é uma manifestação direta do poder da gramática, e vários pequenos detalhes também tornam a experiência de programação simultânea do Go muito melhor do que outras linguagens.

—Primeiras impressões do programador Rust sobre o Go

Embora possa não ser fácil implementar programas simultâneos no Rust, ainda é perfeitamente factível, e** esses programas também se beneficiam das garantias de segurança de memória cuidadosamente projetadas do Rust. **Tome a classe Mutex da biblioteca padrão como exemplo: em Go, podemos esquecer de adquirir o mutex antes de acessar algo; mas em Rust, não há necessidade de se preocupar com isso.

Go se concentra na simultaneidade como um dos principais conceitos. Isso não quer dizer que não podemos obter efeitos de simultaneidade semelhantes ao Go no Rust, mas a dificuldade de implementação é um teste para os programadores. Go se concentra na simultaneidade como um de seus conceitos principais. Isso não quer dizer que não podemos obter efeitos de simultaneidade semelhantes ao Go no Rust, mas a dificuldade de implementação é um teste para os programadores.

——Dave Cheney

  • segurança

Como mencionado anteriormente, tanto o Go quanto o Rust têm suas próprias maneiras de evitar vários erros comuns de programação, especialmente problemas relacionados ao gerenciamento de memória. Mas **Rust vai além, pode-se dizer que não poupa esforços para garantir que todos não cometam erros inesperados de segurança. **

O compilador do Rust é tão rigoroso que verifica todas as variáveis que usamos, todos os endereços de memória aos quais nos referimos. Ele evita possíveis condições de corrida de dados e também notifica sobre comportamento indefinido. No mundo do Rust, problemas de simultaneidade e segurança de memória são quase impossíveis de surgir.

— Por que escolher Rust?

Dito isso, a experiência de programação em Rust é diferente de quase qualquer outra linguagem e pode ser bastante desafiadora quando introduzida pela primeira vez. Mas aos olhos de muitos desenvolvedores, esse esforço claramente vale o dinheiro.

Para mim, a maior vantagem do Rust é que o compilador se tornou meu bom assistente, não vai perder nenhum bug detectado (sério, às vezes parece mágica para mim).

—Grzegorz Nosek

Muitas linguagens, incluindo Go, também fornecem ferramentas para ajudar os programadores a evitar erros, mas Rust leva esse efeito a um novo nível. Muitos programas incorretos nem compilam.

No Rust, vários recursos de biblioteca ajudam os programadores a evitar erros do usuário. Rust nos permite especificar um dado e então garantir que ele não pertença ou seja adulterado por qualquer outra coisa. Não consigo pensar em uma linguagem que tenha fornecido tantas ferramentas para evitar o uso indevido acidental, o que é maravilhoso. —Sam Rose

"Lutar contra o verificador emprestado" é obrigatório para os novatos em Rust, mas, na maioria das vezes, o verificador não é realmente o inimigo. Os problemas encontrados são realmente bugs reais (ou pelo menos bugs potenciais) no código. Isso pode nos forçar a refatorar fundamentalmente nossos programas para evitar tais problemas - Se você realmente colocar a correção e a confiabilidade como sua principal prioridade, então este requisito estrito é obviamente uma coisa boa.

De outra perspectiva, uma nova linguagem que não altera o método de programação pode ser chamada de nova linguagem? E ao usar outras linguagens, Rust nos ensina a pensar com segurança, o que é igualmente importante.

Se as pessoas escolhem o Rust, geralmente é por causa do design garantido que ele oferece: segurança sobre ponteiros nulos/corridas de dados, comportamento de tempo de execução previsível e controle completo sobre o hardware. Se isso não faz sentido para você, realmente não há necessidade de usar o Rust. Afinal, há um preço por trás desses benefícios: é difícil começar. Você tem que quebrar maus hábitos e dominar novos conceitos. No começo, todos serão torturados até a morte pelo verificador de empréstimos.

— Mateus Endler

A dificuldade real de começar com o modelo de programação Rust pode depender de quais outras linguagens você usou antes. Os programadores Python ou Ruby podem achar o Rust muito restritivo, mas outros podem achar a clareza e as restrições inequívocas agradáveis.

Se você é um programador C ou C++ e passou semanas procurando bugs de segurança de memória na linguagem, você vai adorar o Rust. Portanto, "lutar contra o verificador de empréstimos" torna-se "isso ainda é possível com um compilador? Legal!"

— Grzegorz Nosek

  • Ampliar

Os programas de servidor atuais contêm dezenas de milhões de linhas de código, escritas por centenas de programadores e são atualizados quase todos os dias. Em termos de design e desenvolvimento, o Go leva em consideração a necessidade de melhorar a eficiência do trabalho em tal ambiente. As considerações de design para Go incluem gerenciamento estrito de dependências, adaptabilidade da arquitetura de software à medida que o sistema cresce e robustez entre os limites dos componentes. —Rob Pike

Quando você está resolvendo um problema sozinho ou em uma equipe pequena, escolher uma linguagem simples ou uma linguagem rica é puramente uma questão de preferência pessoal. Porém, com a expansão da escala do software, complexidade e expansão da equipe, as diferenças entre as duas linguagens começaram a realmente surgir.

Para grandes aplicativos e sistemas distribuídos, a velocidade de execução do código costuma ser menos importante do que a velocidade de desenvolvimento: uma linguagem como Go que deliberadamente enfatiza o design enxuto pode diminuir o tempo de adaptação de novos desenvolvedores e permitir que eles participem mais rapidamente Para contribuir com grandes bases de código.

Usando a linguagem GO, geralmente é mais fácil para os desenvolvedores juniores serem produtivos, mas é mais difícil para os desenvolvedores intermediários introduzir abstrações complexas e, assim, causar problemas. Devido a essa característica, o Rust tende a ser menos atraente do que o Go no mundo do desenvolvimento de software corporativo.

— Loris Cro

Clareza e legibilidade são sempre mais importantes do que elegância quando se trata de desenvolvimento de software em larga escala. **As limitações do Go, na verdade, o tornam mais adaptável às necessidades de empresas e grandes organizações do que linguagens mais complexas e poderosas, como Rust. **

Rust vs. Go: Diferenças

Embora Rust e Go sejam linguagens modernas populares e amplamente usadas, elas não são realmente concorrentes porque visam casos de uso completamente diferentes **.

Toda a abordagem de programação em Go é completamente diferente do Rust, e esses recursos são particularmente adequados para algumas pessoas, mas, por outro lado, podem irritar completamente outras pessoas. O que faz sentido, porque se Rust e Go estão resolvendo basicamente os mesmos problemas de maneiras basicamente semelhantes, por que precisamos de duas linguagens separadas?

Então, podemos partir das abordagens de Rust e Go e interpretar suas respectivas essências? Vamos experimentar juntos.

  • coleta de lixo

"Coletar lixo ou não coletar lixo" é sempre uma pergunta sem resposta certa. Em geral, a coleta de lixo e o gerenciamento automático de memória podem nos ajudar a desenvolver programas confiáveis e eficientes de forma rápida e fácil. Portanto, para alguns desenvolvedores, esses são recursos essenciais.

Outros argumentam que a coleta de lixo, com sua sobrecarga de desempenho e pausas globais, pode levar a um comportamento de tempo de execução imprevisível e introduzir latência inaceitável. Claro que há verdade nesta afirmação.

Go e Rust são duas linguagens muito diferentes. Embora ambos possam ser simplesmente descritos como uma linguagem de sistema ou um substituto para C, seus objetivos e cenários de aplicação, estilos de design de linguagem e prioridades de função são realmente muito diferentes. A coleta de lixo é um grande diferencial. A coleta de lixo em Go torna a linguagem mais simples, menor e mais fácil de entender. O Rust não possui coleta de lixo, o que o torna extremamente rápido (isso é especialmente adequado para desenvolvedores que exigem não apenas alto rendimento, mas também baixa latência) e também realiza uma série de funções e padrões de programação que o Go não pode fazer ( At menos sem sacrificar o desempenho).

— PingCAP

  • perto do hardware

Pode-se dizer que a história da programação de computadores é um processo de desenvolvimento abstrato cada vez mais complexo. Ele permite que os programadores resolvam problemas sem prestar muita atenção em como o hardware subjacente realmente opera. Esse design torna os programas mais fáceis de escrever e mais portáteis. Mas para outros programas, o acesso ao hardware e o controle preciso sobre como o programa é executado são mais importantes.

**O objetivo do Rust é permitir que os programadores "se aproximem do hardware" e recuperem mais controle; enquanto o Go abstrai os detalhes arquitetônicos, permitindo que os programadores se aproximem do problema. **

Ambos os idiomas têm diferentes áreas de aplicação. Go é bom para escrever microsserviços e tarefas típicas de "DevOps", mas não é uma linguagem de programação de sistemas. O Rust é mais forte em tarefas que enfatizam simultaneidade, segurança e/ou desempenho e tem uma curva de aprendizado mais acentuada do que o Go.

— Mateus Endler

  • Desempenho em primeiro lugar

Na verdade, para a maioria dos programas, o desempenho é menos importante do que a legibilidade do código. Mas, se alguns projetos realmente colocam o desempenho em primeiro lugar, existem muitos trade-offs de design no **Rust que o ajudarão a levar a velocidade de execução do seu código até o limite. **

Em contraste, Go se preocupa mais com a simplicidade do código e está até disposto a sacrificar parte do desempenho do tempo de execução por isso. Mas a velocidade de compilação do Go é incomparável, o que muitas vezes é ainda mais importante para projetos de código em larga escala.

Rust executa mais rápido que Go. Em benchmarks, Rust é realmente mais rápido, em alguns casos por uma ordem de grandeza. Mas antes de escolher o Rust, seja claro: o Go não fica muito atrás na maioria dos benchmarks e ainda mantém uma vantagem de desempenho sobre linguagens como Java, C#, Java e Python.

Se você precisa de desempenho de alto nível, pode escolher qualquer um desses dois idiomas, e o desempenho de velocidade nunca irá decepcionar. Além disso, se você estiver construindo um serviço da Web que lide com cargas de alta intensidade e exija dimensionamento vertical/horizontal flexível, ambas as linguagens também podem atender às suas necessidades.

— André Lader

  • Correção

Por outro lado, se você não forçar o programa a nunca dar errado, as compensações serão diferentes. A maior parte do código não é projetada para uso a longo prazo, mas alguns programas são executados em produção por anos. Diante dessas realidades, pode valer a pena investir um pouco mais de tempo no desenvolvimento e garantir que o programa funcione corretamente e de forma confiável, sem incorrer em uma pesada carga de manutenção no futuro.

Ambos Go e Rust ajudam você a escrever programas corretos, mas de maneiras diferentes: **Go fornece uma excelente estrutura de teste integrada, enquanto Rust se concentra na eliminação de bugs de tempo de execução por meio de verificadores emprestados. **

Minha opinião é: para código que deve ser lançado amanhã, use Go; se for código que deve rodar de forma estável nos próximos cinco anos, escolha Rust.

— Grzegorz Nosek

Embora Go e Rust sejam bons o suficiente para projetos de desenvolvimento sérios, é melhor entender completamente seus vários recursos e vantagens. Resumindo, não importa o que os outros pensam: **Somente você pode decidir qual linguagem de programação é mais adequada para sua equipe e necessidades de projeto. **

Se você deseja acelerar o desenvolvimento, digamos que tenha muitos serviços diferentes para escrever ou que a própria equipe de desenvolvimento seja grande, então a linguagem Go é definitivamente a resposta certa. O Go presta atenção especial ao design para simultaneidade e está ansioso para detectar comportamentos inseguros de acesso à memória (assim como o Rust), mas não o força a gerenciar cada detalhe individualmente.

Go é rápido e poderoso, mas em sua essência ajuda os desenvolvedores a sair do caminho e focar na simplicidade e na unidade. Por outro lado, se você precisa espremer cada grama de headroom de desempenho, o Rust é ideal.

—Andrew Lader

Conclusão Espero que este artigo possa ajudá-lo a entender os respectivos destaques de Rust e Go. Se possível, é melhor você experimentar um pouco essas duas linguagens, pois elas são muito úteis em qualquer caminho técnico, mesmo para amadores entusiastas de programação.

Mas se você só gasta seu tempo estudando seriamente um idioma, certifique-se dos respectivos conhecimentos e inclinações de Go e Rust antes de fazer uma escolha.

Obviamente, o conhecimento de linguagens de programação é apenas uma pequena parte do que torna um engenheiro de software bem-sucedido. Além da programação, os engenheiros devem ser proficientes em design, engenharia, arquitetura, comunicação e colaboração. Contanto que todos possam fazer bem as coisas a seguir, não importa qual linguagem de programação você escolha, você se tornará um excelente mestre em engenharia de software.

Ver original
  • Recompensa
  • Comentário
  • Compartilhar
Comentário
Sem comentários