|
|
|
@ -81,11 +81,11 @@
|
|
|
|
|
<h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Eu ia falar do porque o pessoal deveria aprender Rust, |
|
|
|
|
mas acho que faz mais sentido dizer que o pessoal TEM |
|
|
|
|
QUE aprender Rust. |
|
|
|
|
</aside> |
|
|
|
|
<aside class="notes"> |
|
|
|
|
Eu ia falar do porque o pessoal deveria aprender Rust, |
|
|
|
|
mas acho que faz mais sentido dizer que o pessoal TEM |
|
|
|
|
QUE aprender Rust. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
@ -95,7 +95,8 @@
|
|
|
|
|
<div> |
|
|
|
|
<ul class="empty"> |
|
|
|
|
<li>Júlio Biason</li> |
|
|
|
|
<li>https://functional.cafe/@juliobiason</li> |
|
|
|
|
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li> |
|
|
|
|
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li> |
|
|
|
|
<li>julio.biason@pm.me</li> |
|
|
|
|
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> |
|
|
|
|
</ul> |
|
|
|
@ -103,64 +104,64 @@
|
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>História</h2> |
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
<li>Criada em 2006 por Graydon Hoare.</li> |
|
|
|
|
<li>Patrocinada pela Mozilla em 2009.</li> |
|
|
|
|
<li>Versão 1.0 em 2015.</li> |
|
|
|
|
<li>Versão atual: 1.37</li> |
|
|
|
|
</ul> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Parte burocrática da apresentação. |
|
|
|
|
|
|
|
|
|
PS: Pode ser que, quando você essa apresentação, 1.37 |
|
|
|
|
não seja mais a versão atual; a cada 6 semanas, sai uma |
|
|
|
|
nova versão do compilador. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2> |
|
|
|
|
História |
|
|
|
|
<img src="_images/AYV1X0yv.png" alt="" style="width:100px;margin:0"> |
|
|
|
|
</h2> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Basic (com números e estruturado), dBase III Plus, |
|
|
|
|
Clipper, Pascal, Cobol, Delphi (ObjectPascal), |
|
|
|
|
C, C++, ActionScript (Flash), PHP, JavaScript, |
|
|
|
|
Python, Objective-C, Clojure, Java, Scala |
|
|
|
|
<strong>, Rust.</strong> |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Um porque de história sobre esse que lhes apresenta |
|
|
|
|
a linguagem: |
|
|
|
|
|
|
|
|
|
Eu já trabalhei com todas essas linguagens. Fora |
|
|
|
|
essas, eu ainda sei ler |
|
|
|
|
|
|
|
|
|
- Perl |
|
|
|
|
- Ruby |
|
|
|
|
- Haskell |
|
|
|
|
- Swift |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<img src="_images/my_opinion.jpg" alt=""> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Alerta: Tudo aqui é a minha opinião sobre Rust e o |
|
|
|
|
contexto geral de linguagens de programação. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>História</h2> |
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
<li>Criada em 2006 por Graydon Hoare.</li> |
|
|
|
|
<li>Patrocinada pela Mozilla em 2009.</li> |
|
|
|
|
<li>Versão 1.0 em 2015.</li> |
|
|
|
|
<li>Versão atual: 1.38</li> |
|
|
|
|
</ul> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Parte burocrática da apresentação. |
|
|
|
|
|
|
|
|
|
PS: Pode ser que, quando você essa apresentação, 1.38 |
|
|
|
|
não seja mais a versão atual; a cada 6 semanas, sai uma |
|
|
|
|
nova versão do compilador. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2> |
|
|
|
|
História |
|
|
|
|
<img src="_images/AYV1X0yv.png" alt="" style="width:100px;margin:0"> |
|
|
|
|
</h2> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Basic (com números e estruturado), dBase III Plus, |
|
|
|
|
Clipper, Pascal, Cobol, Delphi (ObjectPascal), |
|
|
|
|
C, C++, ActionScript (Flash), PHP, JavaScript, |
|
|
|
|
Python, Objective-C, Clojure, Java, Scala |
|
|
|
|
<strong>, Rust.</strong> |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Um porque de história sobre esse que lhes apresenta |
|
|
|
|
a linguagem: |
|
|
|
|
|
|
|
|
|
Eu já trabalhei com todas essas linguagens. Fora |
|
|
|
|
essas, eu ainda sei ler |
|
|
|
|
|
|
|
|
|
- Perl |
|
|
|
|
- Ruby |
|
|
|
|
- Haskell |
|
|
|
|
- Swift |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<img src="_images/my_opinion.jpg" alt=""> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Alerta: Tudo aqui é a minha opinião sobre Rust e o |
|
|
|
|
contexto geral de linguagens de programação. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<div> |
|
|
|
@ -172,23 +173,23 @@
|
|
|
|
|
-- Alan Perlis, "ALGOL" |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Apesar de ter todas essas linguagens, eu ainda |
|
|
|
|
preciso passar essa frase do Perlis, porque |
|
|
|
|
realmente Rust mudou a forma como eu penso em |
|
|
|
|
outras linguagens. |
|
|
|
|
|
|
|
|
|
Apesar do forte do Rust ser a proteção de memória, |
|
|
|
|
eu posso oficialmente dizer que agora eu entendo |
|
|
|
|
generics muito melhor por causa da forma como o |
|
|
|
|
Rust trabalha. |
|
|
|
|
</aside> |
|
|
|
|
<aside class="notes"> |
|
|
|
|
Apesar de ter todas essas linguagens, eu ainda |
|
|
|
|
preciso passar essa frase do Perlis, porque |
|
|
|
|
realmente Rust mudou a forma como eu penso em |
|
|
|
|
outras linguagens. |
|
|
|
|
|
|
|
|
|
Apesar do forte do Rust ser a proteção de memória, |
|
|
|
|
eu posso oficialmente dizer que agora eu entendo |
|
|
|
|
generics muito melhor por causa da forma como o |
|
|
|
|
Rust trabalha. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>1. A Linguagem Mais Amada</h2> |
|
|
|
|
<h2>1. A Linguagem Mais Amada</h2> |
|
|
|
|
<p> |
|
|
|
|
<a href="https://insights.stackoverflow.com/survey/2019"> |
|
|
|
|
A linguagem mais amada segundo o StackOverflow |
|
|
|
@ -247,18 +248,18 @@
|
|
|
|
|
de alto nível que estamos acostumados com outras |
|
|
|
|
linguagens. |
|
|
|
|
|
|
|
|
|
Honestamente, se surgir uma nova linguagem que |
|
|
|
|
tenha mais proteções de memória, com performance |
|
|
|
|
ainda melhor que C mas eu tiver que escrever uma |
|
|
|
|
lista encadeada mais uma vez, eu destruo todas as |
|
|
|
|
coisas tecnológicas ao meu redor... |
|
|
|
|
Honestamente, se surgir uma nova linguagem que |
|
|
|
|
tenha mais proteções de memória, com performance |
|
|
|
|
ainda melhor que C mas eu tiver que escrever uma |
|
|
|
|
lista encadeada mais uma vez, eu destruo todas as |
|
|
|
|
coisas tecnológicas ao meu redor... |
|
|
|
|
|
|
|
|
|
E vou plantar batata. |
|
|
|
|
E vou plantar batata. |
|
|
|
|
|
|
|
|
|
... porque aprendemos absolutamente NADA sobre |
|
|
|
|
desenvolvimento. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
... porque aprendemos absolutamente NADA sobre |
|
|
|
|
desenvolvimento. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
@ -268,29 +269,29 @@
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
fn main() -< int{ |
|
|
|
|
fn main() -> int{ |
|
|
|
|
let a = 2; |
|
|
|
|
a = 3; |
|
|
|
|
println!("{}", a); |
|
|
|
|
0 |
|
|
|
|
0 |
|
|
|
|
} |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Primeiro contato com Rust: assim como C, tem uma |
|
|
|
|
função `main`, que pode retornar um inteiro; para |
|
|
|
|
atribuir variáveis, usa-se `let`. |
|
|
|
|
<aside class="notes"> |
|
|
|
|
Primeiro contato com Rust: assim como C, tem uma |
|
|
|
|
função `main`, que pode retornar um inteiro; para |
|
|
|
|
atribuir variáveis, usa-se `let`. |
|
|
|
|
|
|
|
|
|
Uma coisa: Rust é "strong and statically typed", o |
|
|
|
|
que sigifnica que a linguagem tem tipos, mas por |
|
|
|
|
padrão o compilador tenta inferir o tipo. |
|
|
|
|
Uma coisa: Rust é "strong and statically typed", o |
|
|
|
|
que sigifnica que a linguagem tem tipos, mas por |
|
|
|
|
padrão o compilador tenta inferir o tipo. |
|
|
|
|
|
|
|
|
|
Uma outra forma de escrever o let seria: |
|
|
|
|
Uma outra forma de escrever o let seria: |
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
let a: u8 = 2; |
|
|
|
|
``` |
|
|
|
|
</aside> |
|
|
|
|
``` |
|
|
|
|
let a: u8 = 2; |
|
|
|
|
``` |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
@ -321,11 +322,11 @@ fn main() -< int{
|
|
|
|
|
| ^^^^^ cannot assign twice to immutable variable |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
... mas se tu olhar com calma, tu vai ver que não só o |
|
|
|
|
compilador disse, claramente, o que era o problema... |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
<aside class="notes"> |
|
|
|
|
... mas se tu olhar com calma, tu vai ver que não só o |
|
|
|
|
compilador disse, claramente, o que era o problema... |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section data-transition="fade"> |
|
|
|
|
<pre><code class="hljs" data-trim data-line-numbers="5"> |
|
|
|
@ -338,20 +339,20 @@ fn main() -< int{
|
|
|
|
|
| ^^^^^ cannot assign twice to immutable variable |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
... como também vai dizer como resolver o problema. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
<aside class="notes"> |
|
|
|
|
... como também vai dizer como resolver o problema. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<img class="stretch" src="_images/Sorry-bout-that.gif" alt=""> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Ou seja, o compilador não só vai lá e diz: ERRADO! |
|
|
|
|
<aside class="notes"> |
|
|
|
|
Ou seja, o compilador não só vai lá e diz: ERRADO! |
|
|
|
|
|
|
|
|
|
... ele ainda dá uma dica de como resolver esse |
|
|
|
|
problema. |
|
|
|
|
</aside> |
|
|
|
|
... ele ainda dá uma dica de como resolver esse |
|
|
|
|
problema. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
@ -506,6 +507,14 @@ fn main() {
|
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h4>Drop</h4> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust fragment"> |
|
|
|
|
pub fn drop<T>(_x: T) { } |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Regras do Borrow Checker</h3> |
|
|
|
|
|
|
|
|
@ -547,36 +556,8 @@ fn main() {
|
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section data-transition="fade"> |
|
|
|
|
<pre><code class="hljs go" data-trim>presente := Presente { ... } |
|
|
|
|
canal <- presente |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
Num exemplo em Go, criamos uma estrutura e passamos |
|
|
|
|
essa estrutura para outra thread através de um |
|
|
|
|
canal. |
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section data-transition="fade"> |
|
|
|
|
<pre><code class="hljs go" data-trim>presente := Presente { ... } |
|
|
|
|
canal <- presente |
|
|
|
|
presente.abrir()</code></pre> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
... e depois de passar o presente pra outra pessoa, |
|
|
|
|
nós abrimos o presente. |
|
|
|
|
|
|
|
|
|
Mas se estamos entregando um presente pra alguém, |
|
|
|
|
como é que estamos abrindo o presente? |
|
|
|
|
|
|
|
|
|
O borrow checker não permite esse tipo de coisa: |
|
|
|
|
Ele irá barrar a função atual de continuar |
|
|
|
|
utilizando a variável porque, afinal de contas, |
|
|
|
|
agora a região de memória pertence à outra função |
|
|
|
|
(uma função que está rodando em outra thread). |
|
|
|
|
</aside> |
|
|
|
|
<section> |
|
|
|
|
<img class="stretch" src="_images/processor-speed.png" alt=""> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
@ -598,8 +579,8 @@ presente.abrir()</code></pre>
|
|
|
|
|
|
|
|
|
|
<img class="stretch" src="_images/senta-que-la-vem-historia.gif" alt=""> |
|
|
|
|
|
|
|
|
|
<p class="fragment"><code>localtime</code></p> |
|
|
|
|
<p class="fragment"><code>SimpleDateFormatter</code></p> |
|
|
|
|
<p class="fragment"><code>localtime</code></p> |
|
|
|
|
<p class="fragment"><code>SimpleDateFormatter</code></p> |
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
A muito tempo atrás, eu estava ajudando uma colega |
|
|
|
@ -779,11 +760,11 @@ OK(())
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>7. Generics/Traits</h2> |
|
|
|
|
</section> |
|
|
|
|
<h2>7. Generics/Traits</h2> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Structs</h3> |
|
|
|
|
<section> |
|
|
|
|
<h3>Structs</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
struct Gift { |
|
|
|
@ -797,34 +778,34 @@ struct Gift {
|
|
|
|
|
</aside> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Structs</h3> |
|
|
|
|
<section> |
|
|
|
|
<h3>Structs</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
let presente = Gift { package_color: "red", content: "A GIFT!" }; |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Structs Genéricas</h3> |
|
|
|
|
<section> |
|
|
|
|
<h3>Structs Genéricas</h3> |
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
struct Point<T> { |
|
|
|
|
x: T, |
|
|
|
|
y: T |
|
|
|
|
} |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Structs Genéricas</h3> |
|
|
|
|
<section> |
|
|
|
|
<h3>Structs Genéricas</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
let my_point = Point<f32>(x: 1.0, y: 2.0); |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Enums Generics</h3> |
|
|
|
|
<h3>Enums Generics</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
enum Result<T, E> { |
|
|
|
@ -835,7 +816,7 @@ enum Result<T, E> {
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Traits</h3> |
|
|
|
|
<h3>Traits</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
trait Summary { |
|
|
|
@ -872,38 +853,38 @@ fn get_summary<T>(summarizable: T) -> String
|
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2> |
|
|
|
|
<a href="https://doc.rust-lang.org/cargo/"> |
|
|
|
|
8. Cargo |
|
|
|
|
</a> |
|
|
|
|
</h2> |
|
|
|
|
|
|
|
|
|
<p>"Cargo is the Rust package manager"</p> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
"Cargo downloads your Rust package’s dependencies, |
|
|
|
|
compiles your packages, makes distributable |
|
|
|
|
packages, and uploads them to crates.io, the Rust |
|
|
|
|
community’s package registry." |
|
|
|
|
</p> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>9. Tests</h2> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2> |
|
|
|
|
<a href="https://doc.rust-lang.org/cargo/"> |
|
|
|
|
8. Cargo |
|
|
|
|
</a> |
|
|
|
|
</h2> |
|
|
|
|
|
|
|
|
|
<p>"Cargo is the Rust package manager"</p> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
"Cargo downloads your Rust package’s dependencies, |
|
|
|
|
compiles your packages, makes distributable |
|
|
|
|
packages, and uploads them to crates.io, the Rust |
|
|
|
|
community’s package registry." |
|
|
|
|
</p> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>9. Tests</h2> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs rust" data-trim> |
|
|
|
|
#[cfg(test)] |
|
|
|
|
mod tests { |
|
|
|
|
#[test] |
|
|
|
|
fn testing() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<pre><code> |
|
|
|
@ -916,7 +897,7 @@ running 1 test
|
|
|
|
|
test tests::testing ... ok |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
@ -971,23 +952,23 @@ fn call_isan(num: &str) -> Result<Success, Error> {
|
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h2>E agora?</h2> |
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
<li><a href="https://rustup.rs/">rustup</a></li> |
|
|
|
|
<li><a href="https://doc.rust-lang.org/book/">The Rust Book</a></li> |
|
|
|
|
<li><a href="https://doc.rust-lang.org/stable/rust-by-example/">Rust By Example</a></li> |
|
|
|
|
<li><a href="https://play.rust-lang.org/?version=stable">Rust Playground</a></li> |
|
|
|
|
<li><a href="https://t.me/rustlangbr">Rust Brasil (Telegram)</a></li> |
|
|
|
|
</ul> |
|
|
|
|
</section> |
|
|
|
|
<section> |
|
|
|
|
<h2>E agora?</h2> |
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
<li><a href="https://rustup.rs/">rustup</a></li> |
|
|
|
|
<li><a href="https://doc.rust-lang.org/book/">The Rust Book</a></li> |
|
|
|
|
<li><a href="https://doc.rust-lang.org/stable/rust-by-example/">Rust By Example</a></li> |
|
|
|
|
<li><a href="https://play.rust-lang.org/?version=stable">Rust Playground</a></li> |
|
|
|
|
<li><a href="https://t.me/rustlangbr">Rust Brasil (Telegram)</a></li> |
|
|
|
|
</ul> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section data-background='_images/thats-all-folks.jpg'> |
|
|
|
|
<div class="semi-opaque"> |
|
|
|
|
<ul class="empty"> |
|
|
|
|
<li>Júlio Biason</li> |
|
|
|
|
<li>https://functional.cafe/@juliobiason</li> |
|
|
|
|
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li> |
|
|
|
|
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li> |
|
|
|
|
<li>julio.biason@pm.me</li> |
|
|
|
|
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li> |
|
|
|
|
</ul> |
|
|
|
|