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> <body>
<div class="reveal"> <div class="reveal">
<div class="slides"> <div class="slides">
<section>
<section data-background="_images/rust-ferris.png" data-header> <section data-background="_images/rust-ferris.png" data-header>
<h2 class="semi-opaque">Porque Você Deveria Aprender Rust</h2> <h2 class="semi-opaque">Porque Você Deveria Aprender Rust</h2>
</section> </section>
<section data-background="_images/rust-ferris.png"> <section data-background="_images/rust-ferris.png">
<h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2> <h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2>
</section>
<aside class="notes"> <aside class="notes">
Eu ia falar do porque o pessoal deveria aprender Rust, Eu ia falar do porque o pessoal deveria aprender Rust,
@ -88,7 +86,6 @@
</aside> </aside>
</section> </section>
<section>
<section> <section>
<img src="_images/avatar-20170726.png" alt="Me" style="float:left;width:200px;" class="no-border"> <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://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li> <li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li> <li>julio.biason@pm.me</li>
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul> </ul>
</div> </div>
</section> </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>
<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> <section>
<h2>História</h2> <h2>História</h2>
@ -112,9 +131,8 @@
<li>Criada em 2006 por Graydon Hoare.</li> <li>Criada em 2006 por Graydon Hoare.</li>
<li>Patrocinada pela Mozilla em 2009.</li> <li>Patrocinada pela Mozilla em 2009.</li>
<li>Versão 1.0 em 2015.</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> </ul>
</section>
<aside class="notes"> <aside class="notes">
Parte burocrática da apresentação. Parte burocrática da apresentação.
@ -125,7 +143,6 @@
</aside> </aside>
</section> </section>
<section>
<section> <section>
<h2> <h2>
História História
@ -185,9 +202,7 @@
Rust trabalha. Rust trabalha.
</aside> </aside>
</section> </section>
</section>
<section>
<section> <section>
<h2>1. A Linguagem Mais Amada</h2> <h2>1. A Linguagem Mais Amada</h2>
<p> <p>
@ -209,9 +224,7 @@
</aside> </aside>
</p> </p>
</section> </section>
</section>
<section>
<section> <section>
<h2>2. "Low Level Language with High Level Abstractions"</h2> <h2>2. "Low Level Language with High Level Abstractions"</h2>
</section> </section>
@ -260,9 +273,7 @@
desenvolvimento. desenvolvimento.
</aside> </aside>
</section> </section>
</section>
<section>
<section> <section>
<h2>3. Compilador Chato mas Amigável</h2> <h2>3. Compilador Chato mas Amigável</h2>
</section> </section>
@ -311,7 +322,7 @@ fn main() -&gt; u8 {
</aside> </aside>
</section> </section>
<section data-transition="fade"> <section>
<pre><code class="hljs" data-trim data-line-numbers="7"> <pre><code class="hljs" data-trim data-line-numbers="7">
3 | let a = 2; 3 | let a = 2;
| - | -
@ -354,9 +365,7 @@ fn main() -&gt; u8 {
problema. problema.
</aside> </aside>
</section> </section>
</section>
<section>
<section> <section>
<h2>4. Borrow Checker</h2> <h2>4. Borrow Checker</h2>
@ -510,7 +519,7 @@ fn main() {
<section> <section>
<h4>Drop</h4> <h4>Drop</h4>
<pre><code class="hljs rust fragment"> <pre><code class="hljs rust">
pub fn drop&lt;T&gt;(_x: T) { } pub fn drop&lt;T&gt;(_x: T) { }
</code></pre> </code></pre>
</section> </section>
@ -565,7 +574,9 @@ pub fn drop&lt;T&gt;(_x: T) { }
</section> </section>
<section> <section>
<p>
<a href="https://swift.org/blog/swift-5-exclusivity/">Swift 5 Exclusivity Enforcement</a> <a href="https://swift.org/blog/swift-5-exclusivity/">Swift 5 Exclusivity Enforcement</a>
</p>
<aside class="notes"> <aside class="notes">
A ideia do borrow checker é tão interessante que 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 basicamente o mesmo, apesar de ser um pouco mais
leve no Swift). leve no Swift).
</aside> </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> <p>
<h3>Rust resolveria isso?</h3> <a href="https://github.com/microsoft/verona">Verona: Research programming language for concurrent ownership</a>
</p>
<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>
</section> </section>
<section>
<section> <section>
<h2>5. Tipos Algébricos</h2> <h2>5. Tipos Algébricos</h2>
</section> </section>
@ -667,9 +624,7 @@ match home {
} }
</code></pre> </code></pre>
</section> </section>
</section>
<section>
<section> <section>
<h2>6. Error Control</h2> <h2>6. Error Control</h2>
</section> </section>
@ -685,11 +640,13 @@ except Exception:
<section> <section>
<pre><code class="hljs java" data-trim> <pre><code class="hljs java" data-trim>
var obj = null;
try { try {
something(); obj = get_object();
} catch (Exception ex) { } catch (Exception ex) {
System.out.println(ex); System.out.println(ex);
} }
obj.do_something();
</code></pre> </code></pre>
</section> </section>
@ -744,6 +701,15 @@ file.write(b"Hello world").unwrap();
</code></pre> </code></pre>
</section> </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> <section>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
let mut file = File::create("something.txt")?; let mut file = File::create("something.txt")?;
@ -751,9 +717,7 @@ file.write(b"Hello world")?;
OK(()) OK(())
</code></pre> </code></pre>
</section> </section>
</section>
<section>
<section> <section>
<h2>7. Generics/Traits</h2> <h2>7. Generics/Traits</h2>
</section> </section>
@ -797,6 +761,10 @@ struct Point&lt;T&gt; {
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
let my_point = Point&lt;f32&gt;(x: 1.0, y: 2.0); let my_point = Point&lt;f32&gt;(x: 1.0, y: 2.0);
</code></pre> </code></pre>
<pre><code class="hljs rust fragment" data-trim>
let my_point = Point(x: 1.0, y: 2.0);
</code></pre>
</section> </section>
<section> <section>
@ -821,6 +789,8 @@ trait Summary {
</section> </section>
<section> <section>
<h3>Traits</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
struct Phrase { struct Phrase {
phrase: String phrase: String
@ -838,6 +808,8 @@ impl Summary for Phrase {
</section> </section>
<section> <section>
<h3>Traits</h3>
<pre><code class="hljs rust" data-trim> <pre><code class="hljs rust" data-trim>
fn get_summary&lt;T&gt;(summarizable: T) -&gt; String fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
where T: Summary where T: Summary
@ -846,9 +818,7 @@ fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
} }
</code></pre> </code></pre>
</section> </section>
</section>
<section>
<section> <section>
<h2> <h2>
<a href="https://doc.rust-lang.org/cargo/"> <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." community’s package registry."
</p> </p>
</section> </section>
</section>
<section>
<section> <section>
<h2>9. Tests</h2> <h2>9. Tests</h2>
@ -882,6 +850,8 @@ mod tests {
</section> </section>
<section> <section>
<h3>Tests</h3>
<pre><code> <pre><code>
$ cargo test $ cargo test
Compiling adder v0.1.0 (file:///projects/adder) Compiling adder v0.1.0 (file:///projects/adder)
@ -892,9 +862,7 @@ running 1 test
test tests::testing ... ok test tests::testing ... ok
</code></pre> </code></pre>
</section> </section>
</section>
<section>
<section> <section>
<h2>10. Macros</h2> <h2>10. Macros</h2>
@ -902,7 +870,7 @@ test tests::testing ... ok
</section> </section>
<section> <section>
<h3>Log-Derive</h3> <h3>Macros: Log-Derive</h3>
<pre><code> <pre><code>
#[logfn(ok = "TRACE", err = "ERROR")] #[logfn(ok = "TRACE", err = "ERROR")]
@ -915,9 +883,7 @@ fn call_isan(num: &amp;str) -&gt; Result&lt;Success, Error&gt; {
} }
</code></pre> </code></pre>
</section> </section>
</section>
<section>
<section> <section>
<h2>11. Crazy stuff</h2> <h2>11. Crazy stuff</h2>
</section> </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> <small>wasm32-unknown-unknown</small> <small class="fragment">(WebAssembly)</small>
</div> </div>
</section> </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>
<section> <section>

Loading…
Cancel
Save