- Rust é uma linguagem em que vários conceitos estão profundamente entrelaçados, e mesmo para entender programas básicos é preciso aprender muitos elementos ao mesmo tempo
- Funções, genéricos, enums, pattern matching, traits, referências, ownership,
Send/Sync, Iterator etc. são todos elementos centrais projetados para interagir entre si
- Em comparação com JavaScript, no JS é possível escrever código conhecendo apenas alguns conceitos, mas no Rust só é possível escrever código realmente significativo ao entender o contexto da linguagem como um todo
- Essa complexidade do Rust aumenta a barreira de aprendizado, mas ao mesmo tempo oferece segurança e consistência, além de influenciar fortemente a forma de projetar código
- Essa composição linguística é o que torna Rust especial, e a visão de um “Rust menor” nos faz revisitar uma filosofia de linguagem cuidadosamente integrada
A dificuldade de aprender Rust
- Apesar da alta barreira de entrada, muitas pessoas têm contribuído para melhorar documentação, APIs e diagnósticos
- Entre os conceitos básicos estão funções como objetos de primeira classe, enums, pattern matching, genéricos, traits, referências, borrow checker, segurança de concorrência e iteradores
- Esses conceitos dependem uns dos outros e estão entrelaçados, o que dificulta aprendê-los separadamente, e a biblioteca padrão também faz amplo uso desses recursos
- Para entender até mesmo cerca de 20 linhas de código Rust, é preciso compreender ao mesmo tempo vários elementos, como paradigma funcional,
Result e tratamento de erros, tipos genéricos, enums e iteradores
Comparação entre Rust e JavaScript
- Ao escrever o mesmo programa de detecção de mudanças em arquivos em Rust e JS, no Rust diversos conceitos da linguagem ficam entrelaçados
- No JS, basicamente basta entender funções e tratamento de null para escrever código funcional
- Isso não significa simplesmente que Rust é mais difícil, mas mostra que Rust foi projetado para exigir uma compreensão estrutural da linguagem como um todo
O design interconectado do Rust
- O núcleo do Rust é a combinação de recursos projetados de forma orgânica
- Enums são incômodos sem pattern matching, e pattern matching também é limitado sem enums
Result e Iterator não podem ser implementados sem genéricos
- Os conceitos de
Send/Sync e as restrições de println só podem ser expressos com segurança graças às traits
- O borrow checker garante a segurança de
Send/Sync por meio da análise de captura de closures
- Essa interconexão faz de Rust não apenas um conjunto de recursos, mas um sistema de linguagem integrado
A visão de um Rust menor
- Em 2019, without.boats mencionou “Smaller Rust” ao discutir a possibilidade de um Rust menor e mais refinado
- Hoje Rust cresceu muito mais, mas a ideia de um Rust menor nos relembra a essência de um design de linguagem cuidadosamente encaixado
- O charme do Rust está no fato de que seus elementos linguísticos são independentes entre si e, ao mesmo tempo, quando combinados, oferecem forte expressividade e segurança
Conclusão
- Rust é difícil de aprender, mas a consistência e integração dos conceitos entrelaçados funcionam como uma grande força
- Graças a essa estrutura, Rust leva o desenvolvedor não apenas a escrever código, mas a adotar uma forma de pensar que considera segurança e desempenho ao mesmo tempo
- A essência do Rust está em um “núcleo de linguagem pequeno e sofisticado”, e essa continua sendo uma filosofia importante mesmo no Rust expandido de hoje
Ainda não há comentários.