Browse Source

Merge branch 'release/20200310'

master
Julio Biason 5 years ago
parent
commit
4f05264aa2
  1. BIN
      _images/not-everything-is-flowers.jpg
  2. 155
      porque-rust.html

BIN
_images/not-everything-is-flowers.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

155
porque-rust.html

@ -72,14 +72,12 @@
<body>
<div class="reveal">
<div class="slides">
<section>
<section data-background="_images/rust-ferris.png" data-header>
<h2 class="semi-opaque">Porque Você Deveria Aprender Rust</h2>
</section>
<section data-background="_images/rust-ferris.png">
<h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2>
</section>
<aside class="notes">
Eu ia falar do porque o pessoal deveria aprender Rust,
@ -88,7 +86,6 @@
</aside>
</section>
<section>
<section>
<img src="_images/avatar-20170726.png" alt="Me" style="float:left;width:200px;" class="no-border">
@ -98,13 +95,35 @@
<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="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>
<section>
<div>
<ul>
<li>Coordenador do meetup <strong>Rust in POA</strong></li>
<li>Co-coordenador do meetup <strong>PyTche</strong></li>
<li>Co-coordenador do meetup <strong>Design de Código</strong></li>
<li>Palestrante do <strong>Tchelinux</strong></li>
</ul>
</div>
</section>
<section>
<div>
<h3>JulioBiason.me</h3>
<ul>
<li><a href="https://blog.juliobiason.me/">Blog</a></li>
<li><a href="https://presentations.juliobiason.me/">Presentations</a></li>
<li><a href="https://git.juliobiason.me/">Git</a></li>
<li><a href="https://resume.juliobiason.me/">CV/Resumé</a></li>
<li><a href="https://books.juliobiason.me/">Books</a></li>
</ul>
</div>
</section>
<section>
<h2>História</h2>
@ -112,9 +131,8 @@
<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>
<li>Versão atual: 1.41.1</li>
</ul>
</section>
<aside class="notes">
Parte burocrática da apresentação.
@ -125,7 +143,6 @@
</aside>
</section>
<section>
<section>
<h2>
História
@ -185,9 +202,7 @@
Rust trabalha.
</aside>
</section>
</section>
<section>
<section>
<h2>1. A Linguagem Mais Amada</h2>
<p>
@ -209,9 +224,7 @@
</aside>
</p>
</section>
</section>
<section>
<section>
<h2>2. "Low Level Language with High Level Abstractions"</h2>
</section>
@ -260,9 +273,7 @@
desenvolvimento.
</aside>
</section>
</section>
<section>
<section>
<h2>3. Compilador Chato mas Amigável</h2>
</section>
@ -311,7 +322,7 @@ fn main() -&gt; u8 {
</aside>
</section>
<section data-transition="fade">
<section>
<pre><code class="hljs" data-trim data-line-numbers="7">
3 | let a = 2;
| -
@ -354,9 +365,7 @@ fn main() -&gt; u8 {
problema.
</aside>
</section>
</section>
<section>
<section>
<h2>4. Borrow Checker</h2>
@ -510,7 +519,7 @@ fn main() {
<section>
<h4>Drop</h4>
<pre><code class="hljs rust fragment">
<pre><code class="hljs rust">
pub fn drop&lt;T&gt;(_x: T) { }
</code></pre>
</section>
@ -565,7 +574,9 @@ pub fn drop&lt;T&gt;(_x: T) { }
</section>
<section>
<p>
<a href="https://swift.org/blog/swift-5-exclusivity/">Swift 5 Exclusivity Enforcement</a>
</p>
<aside class="notes">
A ideia do borrow checker é tão interessante que
@ -574,66 +585,12 @@ pub fn drop&lt;T&gt;(_x: T) { }
basicamente o mesmo, apesar de ser um pouco mais
leve no Swift).
</aside>
</section>
</section>
<section>
<section>
<h3>Hora da anedota!</h3>
<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>
<aside class="notes">
A muito tempo atrás, eu estava ajudando uma colega
a resolver um problema com processamento de eventos
num projeto em C. Aparentemente, quando um evento
era processado, acontecia do tempo de processamento
ficar errado (algo como ficar negativo ou levar
menos de 10ms pra fazer uma query num banco
oracle). Quando perguntei como ela estava
calculando o tempo, ela me falou que estava usando
o "localtime". Foi quando me lembrei que
"localtime" não é thread-safe e, por isso, quando
uma thread passava pela chamada da função, o valor
era "resetado".
Outra situação aconteceu recentemente: Num projeto
Java, começou a acontecer de, em alguns casos, a
função que convertia strings para Date começou a
dar resultados completamente errados.
Estranhamente, eu lembrei da questão do localtime e
perguntei se o projeto usava threads: sim; fui
direto no DuckDuckGo e procurei por
"simpledateformatter thread safe" e o primeiro
resultado foi uma pergunta do StackOverflow: "Why
isn't SimpleDateFormatter thread-safe?"
</aside>
</section>
<section>
<h3>Rust resolveria isso?</h3>
<h2 class="fragment">SIM</h2>
<h4 class="fragment">... porque nem ia compilar.</h4>
<aside class="notes">
Uma questão importante para o Rust são "Zero Cost
Abstractions", segundo a definição do Bjarne
Stroustrup, criado do C++: para que algo seja
aceito no compilador, é preciso que o custo de não
usar algo não acarrete nada; ou seja, tornar uma
função thread-safe simplesmente inserindo um mutex,
não é zero cost porque, se tu não estiver usando
threads, não faz sentido o mutex.
</aside>
</section>
<p>
<a href="https://github.com/microsoft/verona">Verona: Research programming language for concurrent ownership</a>
</p>
</section>
<section>
<section>
<h2>5. Tipos Algébricos</h2>
</section>
@ -667,9 +624,7 @@ match home {
}
</code></pre>
</section>
</section>
<section>
<section>
<h2>6. Error Control</h2>
</section>
@ -685,11 +640,13 @@ except Exception:
<section>
<pre><code class="hljs java" data-trim>
var obj = null;
try {
something();
obj = get_object();
} catch (Exception ex) {
System.out.println(ex);
}
obj.do_something();
</code></pre>
</section>
@ -744,6 +701,15 @@ file.write(b"Hello world").unwrap();
</code></pre>
</section>
<section>
<pre><code class="hljs rust" data-trim>
let mut file = File::create("something.txt")
.expect("ERROR OPENING");
file.write(b"Hello world")
.expect("ERROR WRITING");
</code></pre>
</section>
<section>
<pre><code class="hljs rust" data-trim>
let mut file = File::create("something.txt")?;
@ -751,9 +717,7 @@ file.write(b"Hello world")?;
OK(())
</code></pre>
</section>
</section>
<section>
<section>
<h2>7. Generics/Traits</h2>
</section>
@ -797,6 +761,10 @@ struct Point&lt;T&gt; {
<pre><code class="hljs rust" data-trim>
let my_point = Point&lt;f32&gt;(x: 1.0, y: 2.0);
</code></pre>
<pre><code class="hljs rust fragment" data-trim>
let my_point = Point(x: 1.0, y: 2.0);
</code></pre>
</section>
<section>
@ -821,6 +789,8 @@ trait Summary {
</section>
<section>
<h3>Traits</h3>
<pre><code class="hljs rust" data-trim>
struct Phrase {
phrase: String
@ -838,6 +808,8 @@ impl Summary for Phrase {
</section>
<section>
<h3>Traits</h3>
<pre><code class="hljs rust" data-trim>
fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
where T: Summary
@ -846,9 +818,7 @@ fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
}
</code></pre>
</section>
</section>
<section>
<section>
<h2>
<a href="https://doc.rust-lang.org/cargo/">
@ -865,9 +835,7 @@ fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
community’s package registry."
</p>
</section>
</section>
<section>
<section>
<h2>9. Tests</h2>
@ -882,6 +850,8 @@ mod tests {
</section>
<section>
<h3>Tests</h3>
<pre><code>
$ cargo test
Compiling adder v0.1.0 (file:///projects/adder)
@ -892,9 +862,7 @@ running 1 test
test tests::testing ... ok
</code></pre>
</section>
</section>
<section>
<section>
<h2>10. Macros</h2>
@ -902,7 +870,7 @@ test tests::testing ... ok
</section>
<section>
<h3>Log-Derive</h3>
<h3>Macros: Log-Derive</h3>
<pre><code>
#[logfn(ok = "TRACE", err = "ERROR")]
@ -915,9 +883,7 @@ fn call_isan(num: &amp;str) -&gt; Result&lt;Success, Error&gt; {
}
</code></pre>
</section>
</section>
<section>
<section>
<h2>11. Crazy stuff</h2>
</section>
@ -937,6 +903,19 @@ fn call_isan(num: &amp;str) -&gt; Result&lt;Success, Error&gt; {
<small>wasm32-unknown-unknown</small> <small class="fragment">(WebAssembly)</small>
</div>
</section>
<section>
<img src="_images/not-everything-is-flowers.jpg" alt="">
</section>
<section>
<h3>Complicações de Rust:</h3>
<ul>
<li>Borrow checker</li>
<li>Sem OO</li>
<li>Tempo de compilação</li>
</ul>
</section>
<section>

Loading…
Cancel
Save