Executando verificação de segurança...
15

Por que o Rust é ruim?

ATENÇÃO: Essa é somente a minha opinião sobre a linguagem. Não leve para o pessoal nem como um xingamento ou insulto.

Eu estou desenvolvendo em Rust durante um tempo e eu percebi coisas que têm o objetivo de ajudar mas no fim só atrapalham.

O Rust é conhecido por ser uma linguagem segura por conta de suas estratégias para evitar o uso de Garbage Collector (coletor de lixo) para limpar dados da memória que onão estão mais sendo usados, que é uma estratégia mais lenta porém mais comum. Uma de suas estratégias mais conhecida é o sistema de ownership que conta com um borrow checker para checar se os valores estão sendo "apropriados" de outras estruturas. Para mais informações sobre esse sistema acesse a documentação do Rust: https://rust-br.github.io/rust-book-pt-br/ch04-00-understanding-ownership.html.

Eu vejo (durante o desenvolvimento com o rust) várias situações em que você escreve o código por "intuição" achando que vai funcionar normalmente mas quando você executa, vemos linhas e mais linhas de mensagens de erro. Essas situações estão quase sempre envolvidas com os sistema de segurança do Rust.

"Não há uma vez em que eu programo em Rust no qual eu não passo raiva desnecessária por conta desses sistemas."

Muitos podem argumentar sobre a própria segurança que esses sistemas trazem ao projeto mas, na minha opinião, não valem a pena. A frustração durante o desenvolvimento é muito grande e podendo até gerar desconcentração e até desistência do projeto.

Eu não estou condenando os sistemas do Rust. Eles são muito bem feitos e muito geniais. Mas eu acho que não se encaixam nos padrões do que seria uma linguagem de programação nos dias de hoje. Eu acredito que o Rust deveria ter aparecido um pouco antes do boom do Java, entre 2000 e 2010.

Exemplos

Eu vou mostrar dois exemplos de partes da documentação do Rust que "entregam" esses principais problemas do Rust.

Sintaxe Poluída

https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html?highlight=lifetimes#lifetime-annotation-syntax

  • Veja como a sintaxe de lifetimes usa o caractere ' para identificar um nome, mas de uma forma muito estranha e sem sentido.

"Por que não substituir os lifetimes por uma melhora no sistema de borrowing e remover essa sintaxe tão feia?"

Complexidade excessiva

https://doc.rust-lang.org/rust-by-example/std_misc/file/read_lines.html

  • Observe como a página chama o método read_lines como um método beginner friendly (amigável e para iniciantes)
  • O método amigável para iniciantes é claramente mais legível que o mais eficiente.

"Por que não adaptar o compilador do Rust para fazer com que o método amigável para iniciantes ter a mesma velocidade do mais eficiente?"

Carregando publicação patrocinada...
4

Mas vc é obrigado a programar em Rust?

Se for por causa do trabalho, por exemplo, não tem jeito. Ou aceita, ou pede pra mudar de projeto, ou muda de emprego :-)

Mas se não existe obrigação, o que te impede de mudar?

Sobre a linguagem em si, a ideia de não precisar de um garbage collector me parece muito interessante. Mas claro que não é algo simples de implementar, então o preço a se pagar são todas as decisões de design da linguagem, muitas delas características que não são muito comuns nas outras linguagens mainstream.

Não tem jeito, em computação tudo é trade-off (em bom português, "cada escolha, uma renúncia") e com Rust não é diferente: pra ter as vantagens que ela oferece, tem que aceitar a "forma de fazer as coisas" que ela definiu. Mas se isso é um transtorno pra vc, talvez não seja a ferramenta adequada para a sua necessidade.


Nesse caso, o que mais tem são outras linguagens, com filosofia bem diferente, e que podem te atender melhor.

0

Eu não sou obrigado a usar o Rust. Esse post foi mais um desabafo do que uma crítica. Como eu afirmei no próprio post:

"Eu não estou condenando os sistemas do Rust. Eles são muito bem feitos e muito geniais. Mas eu acho que não se encaixam nos padrões do que seria uma linguagem de programação nos dias de hoje."

E logo depois afirmei:

"Eu acredito que o Rust deveria ter aparecido um pouco antes do boom do Java, entre 2000 e 2010."

Por que para mim isso é uma questão de maturidade da linguagem. Eu sempre vou preferir C/C++ ao invés de Golang/Rust. só que hoje, infelizmente, eu acabo "tendo" que usar Rust por conta do próprio hype que linguagens novas em geral geram e, logo, fazendo eu "dar uma segunda chance" toda a vez que penso em fazer um projeto.

3

É a lang da modinha da vez, não que seja ruim. Mas a maioria das pessoas não vê oque defato ela realmente é. Deram uma "modernizada" na sintaxe do C++, mas por baixo oque roda mesmo é o GCC, bem no fim, nao temos nada de tão novo.
O maior problema mesmo é o enxame de pessoas de pessoas que não aceitam ser contrariadas.

1

Não sei o que você quer dizer com rodar em gcc, então o que tenho a dizer é a linguagem tem seu próprio compilador chamado rustc, feito em rust, e que usa llvm por baixo dos panos. Se tivéssemos que equivaler com algum compilador, estaria muito mais próximo de clang do que gcc. No quesito debug, ele usa gdb, assim como go, por exemplo.

1

O Rust é uma linguagem que trouxe conceitos muito interessantes ao público de tecnologia e está sendo usada de várias formas. Pois eu tenho um sentimento que o que acontecerá com o Rust terá um fim parecido com o do Metaverso.

Tire suas conclusões...

2

Ao meu ver as pessoas confundem muito complexidade com má qualidade. Eu concordo que a linguagem deixa certas coisas mais complexas de escrever, principalmente quanto se mais idiomático você escreve seu código, mas não vejo isso como um problema. Se fosse, Java não teria crescido como o fez. No caso de Java em específico, eu ainda argumentaria que existe muito mais código que tem que ser escrito, e que significa muito menos, do que os que você tem que escrever em Rust. Nesse exemplo de leitura de linhas, eu sei exatamente o tipo de buffer que está sendo retornado e que, inclusive, pode retornar um erro como valor, o que é uma maravilha de tratar ao comparar com try-catch.

No caso dos lifetimes, eu prefiro muito mais lidar com isso do que ficar checando se uma coisa é válida ou não para ser usada, talvez até esquecendo e gerando problemas. No fim das contas, acho até uma solução mais interessante, pois o erro deixa de ser tratado no run time para ser evitado em compile time.

Claro, tudo isso tem o downside de o tempo de escrita de um código ser maior, mas mantém a confiabilidade do que está sendo escrito. Então não da para usar Rust se você está com o prazo de entrega muito restrito, do mesmo jeito que eu não usaria JS como meu backend se eu tivesse tempo para desenvolver bem o projeto.

2

Não é uma linguagem produtiva por assim dizer, talvez uma linguagem segura para aplicações simples de pura performance, mas faz um sistema legado todo estruturado em rust requer uma mão de obra e arquitetura muito bem estruturada onde não se tem mão de obra pra escovação de bits, a maioria dos programadores de linguagens de "alto nível" nem sabem quantos bytes ocupam um certo tipo de variável quando a linguagem e tipada, e quando não é então esquece. O fato que Rust faz você estudar mais e entender conceitos básicos que muito nego de python e JS não tem a minima noção, até nego de Java também não tem, você não faz um for on byte ou um short na variavel i no java mesmo sabendo que só esta correndo 100 posições no buffer, vc usa um int que pode correr mais de 2 milhoes e unsigned posições ocupando 4 bytes na memória, enfim o rust tem seu papel no aprendizado também tentando resgatar os programadores raiz.

1

Bom, na minha visão você está sofrendo de algo similar a quando alguém vai começar a programar JS vindo de outra lang, Rust tem que saber exatamente como funciona a memória e entender que ele só aceita 1 ref mutável por bloco por vez, uma vez entendendo esses 2 conceitos o Rust se torna natural para codar.

1

Toda linguagem tem seus problemas, sobretudo quando não temos uma experiência com ela. Mas quanto ao Rust, é inegável o seu desempenho e a segurança que ela proporcioda, do contrário não estaria sendo cada vez mais adotada em grandes e importantes projetos.

1

Rust é uma excelente linguagem que resolve alguns problemas de performance e seguranca. Muitos grandes players estao usando para solucionar alguns gaps em seus modulos, ganhando assim mais performance. Salvo engano lixis esta incorporando Ruat no seu Kernel. Muitos sistemas embarcados estao usando Rust no lugar de C ou C++. Varios frameworks estao nascendo do Rust ( Rocket - web api, Yew Web frontend, Tauri - Desktop ) Acho que nao é mais questao de hype. Ela é uma linguagem mais moderna, se comparada com C porem com um paradogma funcional. Concordo que quando migramos para ela sentimos muito na parte de produtividade, ate por que os conceitos sao diferentes, mas acho que por isso ela se destaca. Eu particularmente acho a ideia muito boa e vejo o mercado se movendo para uma grande adaptacao da linguagem. Eu prefiro meu bom e velho Typescript, me sinto confortave e nao pretendo trocar tao cedo, mas nao se pode negar o poder que o Rust vem trazendo. Nextjs , Vite etc estao adaptando bundles em cima do SWC Compiler, e que ajuda demais :)

1

Eu acho que as ideias que o Rust está trazendo são realmente muito interessantes. Na realidade o meu ponto nessa postagem é maturidade. Eu sou um cara mais conservador, eu sempre prefiro programar em algo potencialmente menos seguro* e mais estável.

* Eu acho que esse conceito de segurança nas linguagens são puras palavras ao vento. O que faz um programa ser seguro é quem o fez. Não em que foi feito.

1

Ótimo texto, entendo o ponto, mas, acredito que a sua opinião está comprometida por conta de todo o seu background com as linguagens tradicionais, rust realmente complica as coisas, mas C tbm faz isso, so que por se tratar de um padrao ja bem estabelecido, a dificuldade do C é relevada. na minha opinião, Rust não tem uma dificuldade maior, apenas uma dificuldade diferente.

-1

Eu pessoalmente gosto bastante, peguei os conceitos bem rapidamente. Antes de rust programava em python, ts/js e C#. E no que usei até agora se encaixou bem às minhas necessidades. Na questão da sintaxe também não me causou muita estranheza, talvez só não seja pra ti mesmo.

-2

Como foi citado segurança eu lembrei de uma brincadeira que fiz há pouco tempo. Acho que ainda faltam algumas coisas para ser considerada segura. Não conheço a linguage e não sei se existe uma forma razoável para contornar o problema citado em NaN = ON ERROR RESUME NEXT.

Coloquei o link para não descontextualizar o exemplo.

1

Se fosse um teste baseado em vida Real,(sem devaneios) deve levar em conta que o veículo tem alertas quando um sensor falha. Você não levou isso em consideração, portanto sua suposição é inválida.

1