Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had a SRE team at - Ouvi falar de rust.. Mas como faço um site?

58 views

Published on

Trilha Programação Funcional How we figured out we had a SRE team at - Ouvi falar de rust.. Mas como faço um site?

Published in: Education
  • Be the first to comment

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had a SRE team at - Ouvi falar de rust.. Mas como faço um site?

  1. 1. "Ouvi falar de Rust…" Mas como eu faço um site? 1 . 1
  2. 2. Olá pessoal! 2 . 1
  3. 3. Vou contar como eu conheci Rust 2 . 2
  4. 4. E os problemas que a linguagem me ajudou a resolver 2 . 3
  5. 5. Em 2015 3 . 1
  6. 6. Comecei a me envolver com o deploy das aplicações do meu projeto 3 . 2
  7. 7. NPM + Python + Java + Closure Compiler + SCons + RVM… 3 . 3
  8. 8. Eu queria uma maneira simples de executar aplicações 3 . 4
  9. 9. Objetivo 1 arquivo binário e cross-plataforma 3 . 5
  10. 10. As opções 4 . 1
  11. 11. "Pra escrever binário tem que ser C?" 4 . 2
  12. 12. Rust foi uma das opções na minha busca por alternativas 4 . 3
  13. 13. "Mas o que é Rust?" 4 . 4
  14. 14. Rust Rust é uma linguagem de programação de sistemas que roda incrivelmente rápido, previne falhas de segmentação, e garante segurança entre threads. 5 . 1
  15. 15. O que me chamou atenção para seguir aprendendo: Imutável por padrão Não tem null ou unde ned Gera binários Cross-plataforma Ideal para programar em baixo nível Linguagem com investimento da Mozilla 5 . 2
  16. 16. "Deveria me preocupar por ser baixo nível?" Quantos falhas podem acontecer em um programa de baixo nível? 6 . 1
  17. 17. Bu erOver ow, Segmentation Fault, Use After Free… 6 . 2
  18. 18. Rust tem um sistema de tipos que previne diversos erros de gerenciamento de memória, em tempo de compilação 6 . 3
  19. 19. Gerenciamento de memória sem Garbage Collector 6 . 4
  20. 20. Agora eu consigo fazer isso: 7 . 1
  21. 21. E no nal da apresentação você também 7 . 2
  22. 22. Quem já ouviu falar de Rust? 8 . 1
  23. 23. Ah, e esse é o mascote, Ferris (E dá pra um pra você)costurar 8 . 2
  24. 24. Agora, como faço um site? 8 . 3
  25. 25. Primeiro passo: Instalando as ferramentas Siga as instruções no site do Rustup
  26. 26. 9 . 1
  27. 27. Esse é o gerenciador de versões do Rust Vai instalar todas as ferramentas Suporta Linux, Mac e Windows Ajuda a manter tudo atualizado 9 . 2
  28. 28. Teremos instalado no nal: rustup: o gerenciador de versões cargo: o gerenciador de projetos e de dependências rustc: o compilador rustdoc: o gerador de documentação rust-gdb e rust-lldb: debuggers 9 . 3
  29. 29. Criando nosso projeto $ cargo new --bin meu-site-em-rust 10 . 1
  30. 30. $ 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! 10 . 2
  31. 31. Vamos criar uma primeira página Vamos criar um arquivo em src/index.html com seguinte conteúdo 11 . 1
  32. 32. <!doctype html> <html> <head> <meta charset=utf-8> <title>Olá TDC SP 2017</title> </head> <body> <h1>Olá mundo</h1> <marquee>Olá TDC</marquee> </body> </html> 11 . 2
  33. 33. Adicionando um framework web Vamos usar o framework para nos ajudarNickel
  34. 34. 12 . 1
  35. 35. Adicione a dependencia no arquivo Cargo.toml [dependencies] nickel = "0.10.0" 12 . 2
  36. 36. Alterando nosso arquivo Agora vamos ver um pouco de Rust, aos poucos. Vamos abrir o arquivo src/main.rs. 13 . 1
  37. 37. Primeiro, importamos e incluimos algumas referências do framework web. #[macro_use] extern crate nickel; use nickel::{Nickel, HttpRouter}; 13 . 2
  38. 38. Incluímos todo o conteúdo do nosso arquivo HTML em uma constante. const INDEX: &str = include_str!("index.html"); 13 . 3
  39. 39. Criamos um novo servidor Nickel. let mut server = Nickel::new(); server.get("/", middleware!(INDEX)); 13 . 4
  40. 40. Con guramos a porta a partir da variável de ambiente 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); 13 . 5
  41. 41. Iniciamos o nosso servidor, com uma mensagem caso haja erros. println!("On {}", url); server.listen(url) .expect("Não conseguimos iniciar o servidor"); 13 . 6
  42. 42. 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"); } 13 . 7
  43. 43. Agora podemos criar o nosso executável $ cargo build --release 14 . 1
  44. 44. 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 14 . 2
  45. 45. TA-DA! 14 . 3
  46. 46. Parabéns! Você tem um site em Rust.
  47. 47. 15 . 1
  48. 48. E tudo em um só binário! 15 . 2
  49. 49. E tem demo no Heroku! https://ouvi-falar-de-rust.herokuapp.com/ 15 . 3
  50. 50. "Uma pergunta…" 16 . 1
  51. 51. É fácil aprender Rust? Eu passei semanas batendo a cabeça em conceitos que eram novos para mim. 16 . 2
  52. 52. Tenho um background vindo do alto nível (Ruby/Java/JavaScript) Tive que aprender sobre stack vs heap, referências vs ponteiros O conceito de lifetime e borrow demoraram pra entrar na minha cabeça 16 . 3
  53. 53. Rust trouxe novos conceitos para minha caixa de ferramentas. E eu tenho me divertido muito! 16 . 4
  54. 54. A comunidade é muito aberta e me ajudou bastante. Muitas pessoas estão disponíveis para ajudar no , no e até no .#rust-beginners fórum #rust-br 16 . 5
  55. 55. Como eu coloco meu site no Heroku? Eu usei esse .buildpack 16 . 6
  56. 56. Só existe o Nickel para web? Já existem vários frameworks, mas ainda é um ecosistema em desenvolvimento. 16 . 7
  57. 57. Uma boa lista está disponível no site Are We Web Yet? 16 . 8
  58. 58. Se você estiver buscando algo mais experimental: Con ra o , que usa uma sintax mais sucinta… Rocket 16 . 9
  59. 59. Mas depende de funcionalidades do compilador ainda em desenvolvimento. 16 . 10
  60. 60. Preciso usar rustup? É o método mais recomendado pela comunidade É a maneira mais fácil de manter tudo atualizado Rust tem uma versão nova a cada 6 semanas Fica mais fácil de acompanhar as novas funcionalidades 16 . 11
  61. 61. Rust está disponível nos gerenciadores de pacotes dos sistemas operacionais também, mas pode demorar um pouco mais para receber atualizações. 16 . 12
  62. 62. Como conecto em um banco? O pode ajudar nisso.Diesel 16 . 13
  63. 63. 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 16 . 14
  64. 64. Só dá pra usar Rust para a web? Não, dá pra usar para muitas outras lugares! 16 . 15
  65. 65. (Se eu fosse falar todos os exemplos, seria uma outra apresentação inteira) 16 . 16
  66. 66. Dois fortes* espaços para aplicar a linguagem: Ferramentas de suporte (CLIs, build, processadores de texto, etc) Extensões de linguagens (Gems, npm, python extensions, FFI) *IMHO 16 . 17
  67. 67. , , , , , , , , … Machine Learning Ruby Python Haskell Node.js WebAssembly Container Network Platform Embedded 16 . 18
  68. 68. Espero que tenham gostado de Rust Bruno Tavares - @bltavares 17 . 1
  69. 69. Links https://github.com/bltavares/meu-site-em-rust Imagens do Ferris http://edunham.net/2016/04/11/plushie_rustacean_pattern.html https://rustup.rs/ https://github.com/nickel-org/nickel.rs https://ouvi-falar-de-rust.herokuapp.com/ https://riot.im/app/#/room/#mozilla_#rust-beginners:matrix.org https://users.rust-lang.org/ https://riot.im/app/#/room/#mozilla_#rust-br:matrix.org https://github.com/emk/heroku-buildpack-rust http://www.arewewebyet.org/ https://rocket.rs/ https://diesel.rs/ https://www.rust-lang.org/en-US/friends.html http://www.arewelearningyet.com/ https://usehelix.com/ https://github.com/mitsuhiko/snaek https://github.com/mgattozzi/curryrs https://www.neon-bindings.com/ https://hackernoon.com/compiling-rust-to-webassembly-guide-411066a69fde https://blogs.oracle.com/developers/building-a-container-runtime-in-rust https://tokio.rs/ https://github.com/rust-embedded 17 . 2

×