tdc2017 | poa trilha programacao funicional - (nunca) ouvi falar de rust... mas como faço um site?

140
(Nunca) Ouvi falar de RustMas como eu faço um site? 1.1

Upload: tdc-globalcode

Post on 21-Jan-2018

41 views

Category:

Education


2 download

TRANSCRIPT

Page 1: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

(Nunca) Ouvi falar de Rust…

Mas como eu faço um site?

1 . 1

Page 2: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Olá pessoal!

2 . 1

Page 3: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Se você nunca ouviu falar de Rust…

2 . 2

Page 4: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vou contar o que é Rust

2 . 3

Page 5: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vou contar como eu conheci Rust

2 . 4

Page 6: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E alguns problemas que a linguagem me ajudoua resolver

2 . 5

Page 7: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Mas se você já ouviu falar…

2 . 6

Page 8: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vou mostrar alguns passos para

seguir aprendendo

2 . 7

Page 9: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Em 2015

3 . 1

Page 10: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Comecei a me envolver com o deploy dasaplicações do meu projeto

3 . 2

Page 11: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

NPM + Python + Java + Closure Compiler + SCons+ RVM…

3 . 3

Page 12: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Eu queria uma maneira simples de executaraplicações

3 . 4

Page 13: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Objetivo1 arquivo binário e cross-plataforma

3 . 5

Page 14: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

As opções

4 . 1

Page 15: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

"Pra escrever binário tem que ser C?"

4 . 2

Page 16: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Rust foi uma das opções na minha busca poralternativas

4 . 3

Page 17: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

"Mas o que é Rust?"

4 . 4

Page 18: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Rust

Rust é uma linguagem de programação desistemas que roda incrivelmente rápido, previne

falhas de segmentação, e garante segurançaentre threads.

5 . 1

Page 19: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

"É uma linguagem bem moderna,

com foco em baixo nível"

5 . 2

Page 20: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Uma linguagem com várias

características funcionais:

Imutável por padrãoNão tem null ou unde�nedPattern-matchingClosuresStructs e Enums

5 . 3

Page 21: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

O que me chamou atenção para seguiraprendendo:

Gera bináriosCross-plataformaPreocupação em boas mensagens de erroFocado em baixo nível

Mas com uma experiência de linguagem de alto nívelLinguagem com investimento da Mozilla

5 . 4

Page 22: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Todas essas características criam um ambienteideal para avançar com segurança

Mozilla Quantum

5 . 5

Page 23: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

"Por que escolheram criaruma linguagem de baixo

nível?"

Qantas falhas podem acontecer em umprograma de baixo nível?

6 . 1

Page 24: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Bu�erOver�ow, Segmentation Fault,

Use After Free…

6 . 2

Page 25: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Rust tem um sistema de tipos que previnediversos erros de gerenciamento de memória,

em tempo de compilação

6 . 3

Page 26: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Gerenciamento de memória sem

Garbage Collector

6 . 4

Page 27: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Exemplo do Rust previneapenas com o compilador

Vamos ver um pouco de Rust

7 . 1

Page 28: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playground

fn main() { let data = vec!(); println!("Data", data); }

7 . 2

Page 29: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

error: argument never used --> src/main.rs:3:22 | 3 | println!("Data", data); | ^^^^

error: aborting due to previous error

7 . 3

Page 30: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playground

fn main() { let data = vec!(); println!("Data {}", data); }

7 . 4

Page 31: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

error[E0277]: the trait bound `std::vec::Vec<_>: std::fmt::Display` is not satisfied --> src/main.rs:3:25 | |println!("Data {}", data); | ^^^^ `std::vec::Vec<_>` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string | = help: the trait `std::fmt::Display` is not implemented for `std::vec::Vec<_>` = note: required by `std::fmt::Display::fmt`

error: aborting due to previous error

7 . 5

Page 32: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

^^^^ `std::vec::Vec<_>` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string

7 . 6

Page 33: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playground

fn main() { let data = vec!(); println!("Data {:?}", data); }

7 . 7

Page 34: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

error[E0282]: type annotations needed --> src/main.rs:2:16 | 2 | let data = vec!(); | ---- ^^^^^^ cannot infer type for `T` | | | consider giving `data` a type |

error: aborting due to previous error

7 . 8

Page 35: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

error[E0282]: type annotations needed

7 . 9

Page 36: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

$ rustc --explain E0282

7 . 10

Page 37: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playground

fn main() { let data : Vec<char> = vec!(); println!("Data {:?}", data); }

7 . 11

Page 38: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Data []

7 . 12

Page 39: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Imagine uma base de código bemcomplexa

Código com threadsProcessamento de imagens em paraleloCoordenar muito acesso de I/O

7 . 13

Page 40: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Em resumo, imagine quão complexo umnavegador é por trás dos panos?

7 . 14

Page 41: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Existe algum problema neste código?

Playground

use std::thread; use std::time::Duration;

fn main() { let data = vec!();

thread::spawn(|| { data.push('a'); });

thread::spawn(|| { data.push('b'); });

thread::sleep(Duration::from_millis(50));

println!("Data {:?}", data); }

7 . 15

Page 42: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Depois de vários ciclos de feedback nacompilação:

Não teremos acesso a memória já liberadaTeremos adicionado uma forma forma de evitar raceconditions

Nosso binário não terá esses problemas!

7 . 16

Page 43: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playgrounduse std::thread; use std::sync::{Arc, Mutex}; use std::time::Duration;

fn main() { let data = Arc::new(Mutex::new(vec!()));

let writer = data.clone(); thread::spawn(move || { let lock_result = writer.lock(); match lock_result { Ok(mut locked_writer) => locked_writer.push('a'), Err(_) => panic!("Could not acquire lock a"), } });

let writer = data.clone(); thread::spawn(move || { let mut locked_writer = writer.lock().expect("Could not acquire lock b"); locked_writer.push('b'); });

thread::sleep(Duration::from_millis(50));

println!("Data {:?}", data); }

7 . 17

Page 44: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Esse sistema de tipo traz novasmaneiras de expressar seu domínio

7 . 18

Page 45: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Que não conseguimos fazer em outraslinguagens mais conhecidas

7 . 19

Page 46: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playground

#[derive(Debug)] struct Pedido { id: i32 }

fn novo_pedido() -> Pedido { Pedido { id: 1 } }

fn enviar_pedido(pedido: Pedido) { // Código que envia o pedido }

fn main() { let pedido = novo_pedido(); enviar_pedido(pedido);

println!("Dados do pedido: {:?}", pedido); }

7 . 20

Page 47: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

error[E0382]: use of moved value: `pedido` --> src/main.rs:18:39 | 16 | enviar_pedido(pedido); | ------ value moved here 17 | 18 | println!("Dados do pedido: {:?}", pedido); | ^^^^^^ value used here after move

7 . 21

Page 48: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Só podemos acessar o pedido antes deenviarmos as informações nesse cenário

7 . 22

Page 49: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E isso é reforçado pelo compilador

7 . 23

Page 50: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Playground

#[derive(Debug)] struct Pedido { id: i32 }

fn novo_pedido() -> Pedido { Pedido { id: 1 } }

fn enviar_pedido(pedido: Pedido) { // Código que envia o pedido }

fn main() { let pedido = novo_pedido(); println!("Dados do pedido: {:?}", pedido);

enviar_pedido(pedido); }

7 . 24

Page 51: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Dados do pedido: Pedido { id: 1 }

7 . 25

Page 52: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Rust incentiva desde o iniciodo projeto

Tipos não conseguem veri�car toda a lógica

testes

7 . 26

Page 53: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

pub fn super_calculo(x: i32, y: i32) -> i32 { x + y }

#[test] fn test_super_calculo() { assert_eq!(3, super_calculo(1, 2)); }

7 . 27

Page 54: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

$ cargo test running 1 test test test_super_calculo ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

7 . 28

Page 55: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

é vista como parteimportante do seu projeto

Documentação

7 . 29

Page 56: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Tentando evitar que exemplos �quemdesatualizados

7 . 30

Page 57: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

/// Realiza um grande cálculo que te deixará surpreso /// # Examples /// /// ``` /// use minha_lib::*; /// /// assert_eq!(5, calculo_surpresa(1, 2)); /// ``` pub fn calculo_surpresa(x: i32, y: i32, z: i32) -> i32 { x + y + z }

7 . 31

Page 58: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Exemplos que aparecem na documentação sãoexecutados durante os testes

$ cargo test [...] running 1 test test src/lib.rs - calculo_surpresa (line 4) ... FAILED

failures:

---- src/lib.rs - calculo_surpresa (line 4) stdout ---- error[E0061]: this function takes 3 parameters but 2 parameters were supplied --> src/lib.rs:5:32 | 5 | assert_eq!(5, calculo_surpresa(1, 2)); | ^^^^ expected 3 parameters

7 . 32

Page 59: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Gerar a documentação do projeto é simples

$ cargo doc --open

7 . 33

Page 60: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

7 . 34

Page 61: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Uma linguagem de sistemas:Tem mensagens de erros clarasQue se preocupa com documentação e testesE traz todas essas aprendizagens de outras linguagens

É uma ótima evolução para todo o ecossistemade baixo nível

7 . 35

Page 62: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E uma ótima opção para

construir plataformas de alto nível

7 . 36

Page 63: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Mas você não precisa se preocuparcom tudo isso agora

7 . 37

Page 64: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Essas foram exemplos de possibilidades epotencial da linguagem

7 . 38

Page 65: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Você pode aprender aos poucos, na suavelocidade

7 . 39

Page 66: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E começando com o que você já estáacostumado em outras linguagens

7 . 40

Page 67: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Quem já ouviu falar de Rust?

8 . 1

Page 68: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Ah, e esse é o mascote, Ferris

(E dá pra um pra você)costurar

8 . 2

Page 69: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Agora, como faço um site?

8 . 3

Page 70: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vamos fazer um site?

0:00 / 0:20

Page 71: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

9 . 1

Page 72: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Um Site:LeveFácil de deployarAproveitando todas as vantagens que eu já comentei

9 . 2

Page 73: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Primeiro passo: Instalando asferramentas

Siga as instruções no site do Rustup

Page 74: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

10 . 1

Page 75: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Esse é o gerenciador de versões do Rust

Vai instalar todas as ferramentasSuporta Linux, Mac e WindowsAjuda a manter tudo atualizado

10 . 2

Page 76: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

No �nal estará disponível:

rustup: o gerenciador de versõescargo: o gerenciador de projetos e de dependênciasrustc: o compiladorrustdoc: o gerador de documentaçãorust-gdb e rust-lldb: debuggers

10 . 3

Page 77: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Criando nosso projeto

$ cargo new --bin meu-site-em-rust

11 . 1

Page 78: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

$ cargo run

Compiling meu-site-em-rust v0.1.0 Finished dev [unoptimized + debuginfo] target(s) in 1.54 secs Running `target/debug/meu-site-em-rust` Hello, world!

11 . 2

Page 79: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vamos criar uma primeirapágina

Vamos criar um arquivo em src/index.htmlcom seguinte conteúdo

12 . 1

Page 80: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

<!doctype html> <html> <head> <meta charset=utf-8> <title>Olá TDC POA 2017</title> </head> <body> <h1>Olá mundo</h1> <marquee>Olá TDC</marquee> </body> </html>

12 . 2

Page 81: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Adicionando um frameworkweb

Vamos usar o framework para nos ajudarNickel

Page 82: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

13 . 1

Page 83: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Adicione a dependência no arquivo Cargo.toml

[dependencies] nickel = "0.10.0"

13 . 2

Page 84: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Alterando nosso arquivo

Agora vamos ver um pouco de Rust, aos poucos.Vamos abrir o arquivo src/main.rs.

14 . 1

Page 85: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Primeiro, importamos e incluímos algumasreferências do framework web.

#[macro_use] extern crate nickel; use nickel::{Nickel, HttpRouter};

14 . 2

Page 86: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Incluímos todo o conteúdo do nosso arquivoHTML em uma constante.

const INDEX: &str = include_str!("index.html");

14 . 3

Page 87: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Criamos um novo servidor Nickel.

let mut server = Nickel::new(); server.get("/", middleware!(INDEX));

14 . 4

Page 88: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Con�guramos a porta a partir da variável deambiente PORT. Vamos usar a porta 3000 de

fallback.

let port = std::env::var("PORT").unwrap_or("3000".into()); let url = format!("0.0.0.0:{port}", port = port);

14 . 5

Page 89: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Iniciamos o nosso servidor, com uma mensagemcaso haja erros.

println!("On {}", url); server.listen(url) .expect("Não conseguimos iniciar o servidor");

14 . 6

Page 90: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

No �nal teremos isso:

#[macro_use] extern crate nickel; use nickel::{Nickel, HttpRouter};

const INDEX: &str = include_str!("index.html");

fn main() { let mut server = Nickel::new(); server.get("/", middleware!(INDEX));

let port = std::env::var("PORT").unwrap_or("3000".into()); let url = format!("0.0.0.0:{port}", port = port);

println!("On {}", url); server.listen(url) .expect("Não conseguimos iniciar o servidor"); }

14 . 7

Page 91: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Agora podemos criar o nossoexecutável

$ cargo build --release

15 . 1

Page 92: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E executar:

$ ./target/release/meu-site-em-rust

On 0.0.0.0:3000 Listening on http://0.0.0.0:3000 Ctrl-C to shutdown server

15 . 2

Page 93: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

TA-DÁ!

15 . 3

Page 94: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Parabéns!

Você tem um site em Rust.

Page 95: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

16 . 1

Page 96: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E tudo em um só binário!

16 . 2

Page 97: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E tem demo no Heroku!

https://ouvi-falar-de-rust.herokuapp.com/

16 . 3

Page 98: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

"Mas dá pra fazer maisalguma coisa?"

17 . 1

Page 99: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vamos fazer uma chamada web

18 . 1

Page 100: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

É tão fácil como outras linguagens, mesmosendo uma linguagem de sistemas

18 . 2

Page 101: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vou seguir a receita disponível no

Rust Cookbooks

18 . 3

Page 102: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Criando mais um novo projeto$ cargo new --bin minha-chamada-em-rust

18 . 4

Page 103: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

$ cargo run

Compiling minha-chamada-em-rust v0.1.0 Finished dev [unoptimized + debuginfo] target(s) in 1.54 secs Running `target/debug/minha-chamada-em-rust` Hello, world!

18 . 5

Page 104: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Adicionando uma lib para chamadas

18 . 6

Page 105: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Já existem diversas bibliotecas disponíveis noCrates.io

18 . 7

Page 106: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Vamos usar o nesse projetoReqwest

18 . 8

Page 107: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Adicione a dependência no arquivo Cargo.toml

[dependencies] reqwest = "0.8.0"

18 . 9

Page 108: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Alterando nosso binárioVamos importar a nossa biblioteca e algumas

funções de I/O

extern crate reqwest; use std::io::Read;

18 . 10

Page 109: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E criar nossa função

fn main() { let mut response = reqwest::get("https://httpbin.org/get") .expect("Could not connect"); println!("Resposta: {:?}", response);

let mut content = String::new(); response.read_to_string(&mut content); println!("Conteudo do site: {}", content); }

18 . 11

Page 110: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

TA-DÁVamos executar!

$ cargo run

18 . 12

Page 111: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

18 . 13

Page 112: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Agora você tem um código para fazer chamadasna internet!

bináriocross-plataformacom baixo uso de memóriaque não precisa de �car instalando várias dependênciaspara usar

18 . 14

Page 113: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Bem similar a outras linguagens?

18 . 15

Page 114: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

"Uma pergunta…"

19 . 1

Page 115: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

É fácil aprender Rust?Eu passei semanas batendo a cabeça em

conceitos que eram novos para mim.

19 . 2

Page 116: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Tenho um background mais alto nível(Ruby/Java/JavaScript)Tive que aprender sobre stack e referênciasOs conceitos sobre lifetime e borrow demoraram praentrar na minha cabeça

19 . 3

Page 117: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Rust trouxe novos conceitos para minha caixa deferramentas.

E eu tenho me divertido muito!

19 . 4

Page 118: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

A comunidade é muito aberta e me ajudoubastante, e tem muito interesse em trazer

pessoas novas.

Muitas pessoas estão disponíveis para ajudar no, no e até no .#rust-beginners fórum #rust-br

19 . 5

Page 119: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Existe um grande esforço em tornar todo oecossistema inclusivo, tanto a participação daspessoas quanto material para todos os níveis.

19 . 6

Page 120: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Iniciativa para ensinar Rust para quem não ébem representado na área de tecnologia

RustBridge

19 . 7

Page 121: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Com interesse de tornar a linguagem uma boaprimeira linguagem de programação

19 . 8

Page 122: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Todas as propostas de mudança da linguagemseguem um processo de

Evolução colaborativa

RFC

19 . 9

Page 123: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Que agora requer que novas propostas tenham e uma maneira clara para

ensinar a mudançadocumentação

19 . 10

Page 124: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Como eu coloco meu site no Heroku?Eu usei esse .buildpack

19 . 11

Page 125: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Só existe o Nickel para web?Já existem vários frameworks, mas ainda é um

ecossistema em desenvolvimento.

19 . 12

Page 126: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Uma boa lista está disponível no site Are WeWeb Yet?

19 . 13

Page 127: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Se você estiver buscando algo maisexperimental:

Con�ra o , que usa uma sintaxe maissucinta…

Rocket

19 . 14

Page 128: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Mas depende de funcionalidades do compiladorainda em desenvolvimento.

19 . 15

Page 129: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Preciso usar rustup?É o método mais recomendado pela

comunidade

É a maneira mais fácil de manter tudo atualizadoRust tem uma versão nova a cada 6 semanasFica mais fácil de acompanhar as novas funcionalidades

19 . 16

Page 130: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Rust está disponível nos gerenciadores depacotes dos sistemas operacionais também, mas

pode demorar um pouco mais para receberatualizações.

19 . 17

Page 131: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Como conectar em um banco?O pode ajudar nisso.Diesel

19 . 18

Page 132: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Já existem empresas usando Rust?Sim. Inclusive o Firefox do seu computador já

tem partes em Rust.

Algumas empresas: Dropbox, Chef, Tilde, Sentry,CoreOS, Mozilla e tem mais .na lista do site

19 . 19

Page 133: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Só dá pra usar Rust para a web?Não, dá pra usar para muitos outros lugares!

19 . 20

Page 134: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

(Se eu fosse falar todos os exemplos, seria umaoutra apresentação inteira)

19 . 21

Page 135: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Dois fortes* espaços para aplicar a linguagem:

Ferramentas de suporte (CLIs, build, processadores detexto, etc)

Extensões de linguagens (Gems, npm, python extensions,FFI)*IMHO

19 . 22

Page 137: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Espero que tenham gostadode Rust

20 . 1

Page 138: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

E se quiser seguir conhecendoTem um no site [EN]

é um ótimo canal para tirar dúvidasrápidasExiste o para falar em portuguesO grupo no Telegram

E em portugues

livro de graça#rust-beginners

#rust-br@rustlangbr

MeetupsExercicios

grupo de estudo online

20 . 2

Page 139: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Se você se interessou por Rust, pode entrar emcontato comigo também, que eu quero te ajudar

com os próximos passos.

Bruno Tavares - @bltavares

20 . 3

Page 140: TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... mas como faço um site?

Linksintorust(); screencastsPodcast da Lambda 3 - Em portugueshttps://github.com/bltavares/meu-site-em-rustImagens do Ferrishttp://edunham.net/2016/04/11/plushie_rustacean_pattern.htmlhttps://rustup.rs/https://github.com/nickel-org/nickel.rshttps://ouvi-falar-de-rust.herokuapp.com/https://riot.im/app/#/room/#mozilla_#rust-beginners:matrix.orghttps://users.rust-lang.org/https://riot.im/app/#/room/#mozilla_#rust-br:matrix.orghttps://github.com/emk/heroku-buildpack-rusthttp://www.arewewebyet.org/https://rocket.rs/https://diesel.rs/https://www.rust-lang.org/en-US/friends.htmlhttp://www.arewelearningyet.com/https://usehelix.com/https://github.com/mitsuhiko/snaekhttps://github.com/mgattozzi/curryrshttps://www.neon-bindings.com/https://hackernoon.com/compiling-rust-to-webassembly-guide-411066a69fdehttps://blogs.oracle.com/developers/building-a-container-runtime-in-rusthttps://tokio.rs/https://github.com/rust-embedded

20 . 4