Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
June 26, 2022 09:20 pm GMT

Golang e Rust: Qual melhor?

Por que existem tantas linguagens de programao?

Atualmente, h diversas linguagens de programao que so utilizadas dentro de empresas, muitas vezes para finalidades parecidas.

No comeo podemos achar isso estranho, porque se o objetivo o mesmo, no seria possvel usar uma mesma linguagem para todos esses projetos?

Para responder essa pergunta, primeiro necessrio lembrar que cada um desses projetos mesmo que tenham caractersticas parecidas, como ume usurie que insere informaes em uma pgina web, e essa pgina envia essas informaes um servidor. Alguns fatores podem mudar a escolha da tecnologia desse projeto, como:

  • Esse projeto ser desenvolvido por uma pessoa, um grupo pequeno ou dezenas de pessoas?
  • Quais recursos esse sistema utilizar? S leitura e escrita de dados, ou ter comunicao em tempo real? Inteligncia artificial? Anlise de dados? etc.
  • Como ser a arquitetura do sistema? Monolito ou microservios?
  • Ser um projeto feito para uma empresa ou pessoa cliente, ou ser um projeto criado dentro de uma empresa, para uso prprio?

Todas essas perguntas, e mais outras, vo determinar a tecnologia que um projeto ter. por isso que por exemplo, existe tanta startup usando NodeJS, Elixir, Golang, etc; enquanto projetos de clientes menores, como lojas ou pequenas empresas, so feitos com PHP ou C#. A tecnologia do projeto est estritamente ligada a como ele .

Golang e Rust

Golang, mais conhecida como Go, e Rust so duas linguagens muito populares hoje em dia, sendo usadas principalmente para back-end (lado do servidor), e em utilitrios de linha de comando, que so programas que rodam em terminais, e geralmente servem para alguma necessidade momentnea, no precisam ficar rodando a todo momento.

Inclusive, um timo exemplo de programa que roda por linha de comando  o [Transchange](http://github.com/lissatransborda/transchange).  um projeto criado para facilitar o processo de transio de gnero social de pessoas trans, alterando o nome da pessoa em todos os repositrios dela, o que proporciona mudar at a autoria dos commits.

Golang

Golang uma linguagem de programao criada pela Google em 2009. seu objetivo ser leve, rpida, e produtiva.

Go foi criada com fortes inspiraes de uma outra linguagem, o C, que foi e uma das linguagens mais importantes da histria.

Mesmo que Golang tenha vrias funcionalidades, e possa ser usada para diversos fins, ela possui um foco muito grande em concorrncia. Concorrncia, de forma bsica (porque esse conceito merece um artigo inteiro s sobre ele) a capacidade de gerenciar mais de uma tarefa ao mesmo tempo, fazendo uma tarefa em um momento, parando, fazendo outra tarefa no lugar, e voltar naquela mesma tarefa anterior.

Um exemplo de concorrncia sou eu fazendo esse artigo. Eu escrevo ele, levanto, dou uma andada, tomo gua, escrevo mais um pouco, abro o Twitter e me perco nele por uns 15 minutos, volto a escrever, etc.

Inclusive, no confunda a concorrncia com paralelismo, que fazer algo ao mesmo tempo. Paralelismo seria eu nesse momento, escrevendo esse artigo ouvindo msica.

Rust

Rust uma linguagem criada pela Mozilla em 2012, focada em programao baixo nvel, velocidade, e praticidade, tendo as descries dos erros que ocorrem nas tentativas de compilar o cdigo detalhadas, e mostrando visualmente onde ocorreu o erro, colocando at mesmo um trecho do cdigo que deu erro na tela.

Um dos principais focos da linguagem a segurana contra erros. Um exemplo dessa alta segurana que, por padro, toda varivel dentro do Rust imutvel. Isso significa que seu valor no pode ser alterado, sendo atribudo uma nica vez. Para criar variveis que possam ter seu valor alterado, isso deve estar explcito na criao da mesma.

Rust tambm uma tecnologia tima para criao de programas desktop e utilitrios de linha de comando, pois ela tem suporte bibliotecas e funes do C, ento tudo que pode ser feito com C, tambm pode ser feito com Rust.

Inclusive, atualmente esto sendo desenvolvidos uma verso do ncleo Linux em Rust (no momento feito em C) e tambm uma verso do Windows feita tambm em Rust.

Agora que j sabemos um pouco sobre cada linguagem, vamos fazer um comparativo de cada uma em pontos que julgo importante para uma linguagem de programao.

Instalao

Golang

H uma pgina na documentao do Golang focada em sua instalao. Esta inclui uma srie de passos, que envolvem editar variveis do sistema, baixar o Go manualmente e colocar em pastas do sistema, etc.

Mesmo que este tutorial seja simples, e possa ser feito copiando e colando, de primeira, pode parecer algo perigoso ou estranho para uma pessoa iniciante em tecnologia, que no tem esse costume de copiar e colar comandos de terminal, e muitas vezes nem sabe o que esses comandos significam.

Ento mesmo que essa instalao parea trivial, e tenha pouca possibilidade para erros, ela pode soar perigosa para quem est iniciando.

Rust

Diferentemente do Golang, Rust possui um script de instalao. Isso significa que podemos copiar um nico comando, que diversos outros sero executados de forma automtica, instalando o programa "como se fosse mgica".

Acho melhor esse mtodo por ser mais prtico, e simples para a pessoa desenvolvedora final, pois no ser necessrio copiar diversos comandos, ela precisa de um s.

Essa forma tambm reduz o problema da pessoa iniciante copiar comandos que ela no entende, pois dessa forma soa at um pouco "mgica", sabe? Algo mais simples, para a pessoa no sentir tanto receio.

Hello World

"Hello World" o desafio mais simples de qualquer linguagem de programao. Ele importante para sabermos na prtica a quantidade de cdigo base que precisamos escrever para rodar um cdigo, e tambm como a linguagem estruturada.

Golang

No Golang, o Hello World pode ser feito dessa forma:

package mainimport "fmt"func main() {    fmt.Println("hello world")}

Analisando esse cdigo de forma mais detalhada:

A primeira linha cria um pacote. Em Go, pacotes so colees de cdigo, e todo projeto tem que ter obrigatoriamente pelo menos um pacote. No nosso caso, o pacote ser main.

Depois disso, na linha dois, importamos uma biblioteca chamada fmt, que a sigla para Format (formatao). Essa biblioteca tem diversas funes relacionadas mostrar dados na tela, tanto textos simples como Hello World, ou textos que exigem mais formatao, como colocar variveis dentro desse bloco.

Na linha trs, declarada a funo principal de qualquer projeto Golang, a main. nessa funo que o nosso programa vai comear a rodar, ento podemos ter quantas outras funes quisermos, porm a main sempre ser a nica necessria, e tambm a principal.

Na quatro, executamos a funo que mostra o Hello World na tela, a println. Como essa funo est dentro do pacote fmt, teremos que chamar esse pacote, colocar um . para indicar que teremos algo dentro dele, e a primeira letra ter de ser maiscula por conta dessa funo (poderia tambm ser uma varivel, tipo, classe, etc.) estar dentro de um pacote externo. Depois disso, s inserir o texto dentro da funo entre aspas duplas.

Diferente de outras linguagens, Golang no aceita aspas simples nesse caso, elas s funcionariam se o nosso texto tivesse um nico caractere.

Na linha 6, apenas fechamos a funo main, finalizando nosso cdigo.

Rust

J no Rust, podemos criar um Hello World dessa forma:

fn main() {    println!("Hello, world");}

Na primeira linha, assim como o Golang, temos que criar uma funo main, que tambm ser a principal do nosso cdigo.

Na segunda linha, usamos a funo println!. A exclamao no fim por conta dessa funo ser uma macro, um conceito que no vou abordar nesse artigo por ser algo mais avanado do Rust. Semelhante ao Go tambm necessrio usar aspas duplas, porque as aspas simples so exclusivas representao de um nico caractere.

E por fim, na terceira linha, fechamos o mtodo main, finalizando nosso cdigo.

Como pudemos ver, em ambas as linguagens o Hello World no complexo, e explicando linha por linha conseguimos entender o motivo de comando de ambos os cdigos. Mas, o Hello World do Rust acaba sendo mais fcil de entender, por no precisar criar um pacote, e nem importar uma biblioteca para mostrar dados na tela.

importante lembrar que cada linguagem tem as suas caractersticas, ento um Hello World ser simples, ou mais complexo, uma escolha de arquitetura. s vezes, uma linguagem que j possui um monte cdigo padro, facilita para continuarmos desenvolvendo nosso projeto, enquanto outras que so mais simples, podemos encontrar mais dificuldades na frente. Ento, no leve o Hello World como algo essencial para saber se uma linguagem "melhor" que a outra.

Rodando o cdigo que criamos

Agora precisamos rodar esses cdigos, e pra isso necessrio descobrir como essas linguagens processam o nosso cdigo para executar na nossa mquina.

Golang

Golang uma linguagem compilada, isso significa que o cdigo ser transformado diretamente em cdigo de mquina. Essa forma muito interessante para linguagens de programao que se propem a serem rpidas, pois o cdigo de mquina executa direto no sistema, sem precisar de alguma mquina virtual ou processo no meio.

Mas nessa forma tambm h uma desvantagem: Esse cdigo de mquina de uma nica plataforma, que de forma bsica, o local onde voc est rodando esse cdigo, ento Windows, Linux, um celular Android, iOS,etc. Ento seria necessrio compilar para cada plataforma, gerando um executvel separado. Mas tirando isso, s felicidade.

Para compilar o cdigo, podemos usar o comando:

go build helloworld.go

Com isso, nosso programa ser compilado, e teremos um executvel chamado helloworld, que em Linux poderemos executar com ./helloworld, e em Windows com helloworld.exe.

Tambm podemos executar um programa sem precisar compilar, e depois rodar. Para fazer os dois de uma vez, podemos usar o comando abaixo:

go run helloworld.go

Enquanto o build apenas compila, o run compila e executa.

Rust

A compilao funciona da mesma forma que no Golang, criando um executvel com o nosso cdigo, ento nesse quesito os dois so iguais.

Para compilar esse cdigo que criamos em Rust, temos que usar o comando abaixo:

rustc helloworld.rs

E depois, para executar, podemos executar da mesma forma que no Golang, no Linux com ./helloworld, e em Windows com helloworld.exe.

Como vimos, as duas linguagens compilam o cdigo diretamente em cdigo de mquina, a diferena que o Golang tem um comando direto para compilar e executar o cdigo, enquanto no Rust precisamos compilar, e depois executar. De resto as duas so muito parecidas.

Lidando com erros

Agora vamos falar sobre como essas linguagens mostram os erros no cdigo, e se essa forma de informar os erros compreensvel ou no.

Golang

Para testar o sistema de erros do Golang, fiz algumas mudanas no cdigo, sempre inserindo algum erro que realmente poderia acontecer enquanto voc escrevia o cdigo, sendo em sequncia:

Errando o nome da funo println

package mainimport "fmt"func main() {    fmt.Printl("Hello World")}

Erro: undefined: fmt.Printl

No colocando fmt antes da println

package mainfunc main() {    Println("Hello World")}

Erro: undefined: Println

No colocando func antes da main()

package mainimport "fmt"main() {    fmt.Println("Hello")}

Erro: syntax error: non-declaration statement outside function body

Como podemos ver, as mensagens de erro so bem simples, geralmente uma nica frase descrevendo o erro. Pessoalmente acho que a utilidade dessas mensagens variam muito da sua experincia, uma pessoa iniciante pode se confundir muito pra entender o que fez de errado, enquanto pessoas com mais experincia vo saber o que fizeram de errado de uma forma bem mais rpida.

Rust

Para testar os erros do Rust fiz o mesmo processo, gerando 3 erros, sendo:

No colocando ! depois de println

fn main() {   println("Hello, world!");}

Erro:

error[E0423]: expected function, found macro `println` --> src/main.rs:2:5   |2  |     println("Hello, world!");   |     ^^^^^^^ not a function   |help: use `!` to invoke the macro   |2  |     println!("Hello, world!");   |            +

Usando aspas simples ao invs de aspas duplas

fn main() {   println!('Hello, world!');}

Erro:

error[E0762]: unterminated character literal --> src/main.rs:2:28   |2  |     println!('Hello, world!');   |                ^^^

Errado a escrita da funo println!

fn main() {   printl!("Hello, world!");}

Erro:

error: cannot find macro `printl` in this scope  --> src/main.rs:2:5   |2  |       printl!("Hello, world!");   |       ^^^^^^ help: a macro with a similar name exists: `print`

Considero os erros do Rust bem mais descritivos que os do Golang, por mostrar as linhas do cdigo e apontar qual lugar exato que tem o erro, facilitando na compreenso e resoluo.

Documentao e contedos

Quando comeamos a aprender uma linguagem, muito importante pensarmos onde iremos aprender mais sobre ela, ento vamos ver um pouco sobre documentao e contedo das duas linguagens.

Golang

Go tem uma documentao oficial, indo desde a instalao, at questes bem avanadas da linguagem. Isso bom, mas infelizmente no h uma traduo para portugus dessa documentao, algo que eu acho bem chato.

Mas tem um canal que eu gosto muito chamado Aprenda Go, onde a Ellen Korbes tem um curso maravilhoso, e totalmente em portugus. Recomendo demais!

Rust

Rust tem uma documentao oficial da mesma forma que o Golang, mas completamente em ingls. Tambm h uma documentao criada pela comunidade feita em portugus, que tambm pode ser uma tima opo.

Em portugus no conheo um curso completo gratuito, mas o Bruno Rocha produz bastante contedo sobre a linguagem em suas redes, como no seu canal do Youtube. Caso queria comear, acho bem legal.

Concluso

Para mim, ambas as linguagens so timas, mas cada uma tem um estilo diferente, e atende pblicos e requisitos especficos.

Por exemplo, para aplicaes web todo o ecossistema Golang est bem mais desenvolvido, ento pode ser interessante, mas para aplicaes de desktop ou de terminal, que precisam da maior velocidade e segurana possvel, Rust pode ser uma linguagem mais adequada.

Muito obrigada por ler e me segue nas redes, tudo @lissatransborda


Original Link: https://dev.to/feministech/golang-e-rust-qual-e-melhor-4559

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To