Julio Biason
5 years ago
2 changed files with 124 additions and 0 deletions
@ -0,0 +1,4 @@ |
|||||||
|
+++ |
||||||
|
transparent = true |
||||||
|
title = "Presentation Companion Posts" |
||||||
|
+++ |
@ -0,0 +1,120 @@ |
|||||||
|
+++ |
||||||
|
title = "Porque Você Deve Aprender Rust" |
||||||
|
date = 2019-09-10 |
||||||
|
|
||||||
|
[taxonomies] |
||||||
|
tags = ["pt-br", "rust", "companion post"] |
||||||
|
+++ |
||||||
|
|
||||||
|
Rust é uma nova linguagem de programação que eu acredito que deveria ser vista |
||||||
|
por desenvolvedores, mesmo que eles não venham programar em Rust. |
||||||
|
|
||||||
|
<!-- more --> |
||||||
|
|
||||||
|
{% note() %} |
||||||
|
Esse post acompanha a minha apresentação [Porque Você Deve Aprender |
||||||
|
Rust](https://presentations.juliobiason.net/porque-rust.html#/). |
||||||
|
{% end %} |
||||||
|
|
||||||
|
Quando eu comecei a apresentação, eu pensei em chamar a mesma de "Porque Você |
||||||
|
Deveria Aprender Rust"; mas eu pensei bem sobre isso e como a linguagem tem |
||||||
|
vários conceitos interessantes, eu acho que o título correto deve ser "Porque |
||||||
|
Você DEVE Aprender Rust". |
||||||
|
|
||||||
|
Mas antes de começar a falar sobre Rust, é interessante que vocês conheçam |
||||||
|
quem está falando sobre aprender Rust: |
||||||
|
|
||||||
|
Eu comecei a programar a mais de 30 anos. Em todos esses anos, eu já programei |
||||||
|
em Basic (usando número de linhas e Basic estruturado, também conhecido como |
||||||
|
QBasic), dBase III Plus, Clipper (que foi a primeira linguagem que eu usei |
||||||
|
profissionalmente), Pascal, Cobol (sim, Cobol, façam suas brincadeiras agora), |
||||||
|
Delphi (cujo nome científico é "ObjectPascal" e possui algumas diferenças para |
||||||
|
o Pascal original), C, C++, ActionScript (que é a linguagem para geração de |
||||||
|
applets Flash sem usar o editor da Adobe), PHP (quem nunca?), JavaScript (quem |
||||||
|
nunca?), Python, Objective-C, Clojure, Java, Scala (que eu não desejo que nem |
||||||
|
meu pior inimigo tenha que programar nela) e Rust. E essas são as linguagens |
||||||
|
que eu já escrevi código e que rodou. Fora essas, eu ainda conheço Haskell, |
||||||
|
Perl e Swift, mas nessas eu não programei nada ainda. |
||||||
|
|
||||||
|
Mas por que eu comentei sobre isso? Porque o que eu vou comentar aqui é, |
||||||
|
basicamente, _minha opinião_, depois de conhecer essas linguagens todas. |
||||||
|
Então, obviamente, existe um _viés_ para os motivos que eu vou citar daqui pra |
||||||
|
frente. |
||||||
|
|
||||||
|
Mas existe uma frase do Alan Perlis, criador do ALGOL, que diz "A language |
||||||
|
that doesn't affect the way you think about programming, is not worth knowing" |
||||||
|
(uma linguagem que não afeta o modo que você pensa sobre programação, não vale |
||||||
|
a pena ser aprendida). E mesmo depois de todas essas linguagens citadas acima, |
||||||
|
Rust ainda me fez repensar coisas que eu sempre pensei quando estava |
||||||
|
programando. |
||||||
|
|
||||||
|
## A Parte Burocrática |
||||||
|
|
||||||
|
Antes de sair falando da linguagem, eu tenho que falar sobre a parte |
||||||
|
burocrática da linguagem. Coisas como, por exemplo: |
||||||
|
|
||||||
|
* Rust foi criada em 2006 por Graydon Hoare. |
||||||
|
* Rust começou a ser patrocinada em 2009 pela Mozilla Foundation. |
||||||
|
* A versão 1.0 saiu em 2015. |
||||||
|
* A versão atual é a 1.37. |
||||||
|
|
||||||
|
Rust tem uma história engraçada: Hoare começou a desenvolver a linguagem de |
||||||
|
forma independente, em seu tempo livre. Quando ele começou a pegar gosto pela |
||||||
|
coisa, ele veio falar com seu gerente dizendo que iria deixar a Mozilla |
||||||
|
Foundation para poder trabalhar na sua linguagem de programação. "Que |
||||||
|
linguagem é essa?", perguntou o gerente; Hoare afirmou que era uma linguagem |
||||||
|
com foco em proteção de memória mas que ainda fosse uma linguagem rápida. Ao |
||||||
|
ouvir isso, o gerente pediu para Hoare segurar o pedido de demissão e |
||||||
|
conversou com seus superiores. E, por ter vários problemas com a estrutura em |
||||||
|
C++ do Firefox, a Mozilla resolveu patrocinar Hoare para que ele pudesse |
||||||
|
trabalhar na linguagem. |
||||||
|
|
||||||
|
Uma coisa a cuidar: Aqui eu comento que a versão atual é a 1.37. Isso pode não |
||||||
|
ser verdade no momento que você lê esse post (ou viu a apresentação) porque a |
||||||
|
cada 6 semanas uma nova versão do Rust é liberada. Essas versões trazem |
||||||
|
correções de bugs e novas features. |
||||||
|
|
||||||
|
{% note() %} |
||||||
|
Uma outra anedota é que o primeiro projeto em Rust foi um browser -- |
||||||
|
normalmente a gente pensa que para primeiro projeto, as linguagens querem algo |
||||||
|
mais simples, como um microserviço ou algo parecido, mas a equipe do Rust |
||||||
|
partiu direto para um browser. |
||||||
|
|
||||||
|
O resultado, chamado [Servo](https://servo.org/), hoje faz parte do [Firefox |
||||||
|
Quantum](https://www.mozilla.org/en-US/firefox/?gclsrc=aw.ds), o que diminui o |
||||||
|
uso de memória e diminuiu o número de "crashes" da aplicação. |
||||||
|
|
||||||
|
Ainda, num certo ponto, um desenvolvedor do Chrome resolveu fazer alguns |
||||||
|
testes, utilizando SVG animados, colocando 1 elemento animado 300 vezes numa |
||||||
|
página. Para animar todos os elementos, o Chrome conseguia manter 30 FPS; |
||||||
|
Firefox, 20; Servo, 300 (sim, 10 vezes mais que o Chrome!). |
||||||
|
|
||||||
|
Outro exemplo de Rust no Firefox é um bug que estava em aberto por 8 anos. O |
||||||
|
bug em questão, [631527](https://bugzilla.mozilla.org/show_bug.cgi?id=631527) |
||||||
|
-- que, na verdade, é uma feature -- seria permitir que dois elementos possam |
||||||
|
ter os estilos definidos no CSS aplicados em mais de um elemento ao mesmo |
||||||
|
tempo; o browser lê primeiro o HTML, constrói o DOM e depois sai aplicando o |
||||||
|
estilo em cada um dos elementos; com dois elementos um depois do outro, seria, |
||||||
|
teoricamente, possível aplicar o estilo no primeiro ao mesmo tempo em que |
||||||
|
aplica no segundo. O bug ficou aberto por 8 anos e duas re-escritas foram |
||||||
|
feitas pra tentar resolver o problema. Nenhuma conseguiu prover um resultado |
||||||
|
funcional, por vários motivos, mas principalmente por causa da forma com a |
||||||
|
memória era compartilhada nas threads em C++. Quando o Firefox mudou para o |
||||||
|
Quantum (de novo, em Rust, usando a base do Servo), a correção foi (conforme |
||||||
|
descrito por Niko Matsakis na abertura do Rust Latam 2019) "trivial". |
||||||
|
{% end %} |
||||||
|
|
||||||
|
## Motivo 1 |
||||||
|
|
||||||
|
Em 2019, O [StackOverflow](https://stackoverflow.com/) fez uma enquete com os |
||||||
|
visitantes, perguntando, entre várias outras perguntas, qual linguagem eles |
||||||
|
usavam e se eles gostavam de programar nessa linguagem. No resultado dessa |
||||||
|
enquente, [Rust aparece como a linguagem mais |
||||||
|
amada](https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages)... |
||||||
|
pelo 4o ano seguido. |
||||||
|
|
||||||
|
"Ah, mais isso é fácil! Os quatro caras que programam em Rust dizem que gostam |
||||||
|
dela todo ano!", você deve estar dizendo. Na verdade, o percentual tem subido |
||||||
|
desde a primeira vez, saindo de 76% em 2016 e indo a 83% em 2019. |
||||||
|
|
||||||
|
## Motivo 2: "Uma Linguagem de Baixo Nível Com Abstrações de Alto Nível" |
Loading…
Reference in new issue