Rust

Uma breve intro

Com Pokémons, obviamente.

Disclaimers

Provavelmente não saberei responder a maioria das perguntas

Estudo Rust há ~ 3 meses, logo... não sei quase nada! 

Aceito sugestões p/ melhorar!

Talk com muitos Pokémons!

Hi!

  • Computer Engineer
  • Programming
  • Electronics
  • Math <3 <3
  • Physics
  • Lego
  • Pokémon
  • Meetups
  • Animals
  • Coffee
  • GIFs

Como fazer uma talk apresentando as features da linguagem

Sem ser chata?

Nova linguagem=> nova versão de Pokémon

Pokémon: Rust version

  • Em desenvolvimento por ~ 8 anos [ao menos a ideia] (fonte: https://www.youtube.com/watch?v=_-fweBvtifA ) 
  • ~ 2 anos que assumiu formato e ideais desejados
  • Mozilla

C/C++

Ruby/JS

Haskell/FP

C/C++

Ruby/JS

Haskell/FP

C/C++ - não quer GC

Ruby/JS - Linguagem bacana com o suporte de um compilador

Haskell/FP - interesse no type system

Starter

Starter

Cargo

Compila, linka e ajeita dependências em um único lugar ("similar" ao bundler)

cargo new pokemon --bin

Source: http://doc.crates.io/guide.html

Starter

"hello world"

cargo run

variable bindings

fn main() {
    let party_size = 6;
}
fn main() {
    let party_size = 6;
    party_size = 5;

}

src/main.rs:3:5: 3:19 error: re-assignment of immutable variable `party_size` [E0384]

variable bindings

fn main() {
    let party_size = 6;
}
fn main() {
    let mut party_size = 6;
    party_size = 5;

}

It's super effective :)

variable bindings

let party_size: i32 = 6;
let party_size: i32;

TL;DR

  • Lembra um pouco C
  • Não é necessário explicitar o tipo (mas é possível)
  • Cuidado com a imutabilidade

Level up!

fn example(x: int) -> int

-> é o tipo de retorno

( ) parâmetros são opcionais

fn level_up(level: i32) {
    println!("Level up {}", level + 1);
}
fn level_up(level) {
    println!("Level up {}", level + 1);
}
fn level_up_with_rare_candy(level: i32) -> i32 {
    level + 1
}
fn level_up_with_rare_candy(level: i32) -> i32
    level + 1;
}

Starter

"hello world"

Expressions vs statements

Expressions

  • Retornam valor

Statements

  • Não retornam valor
  • x +1;
fn use_potion(hp: i32) -> i32 {
    hp + 20
}

let current_hp = use_potion;

Ponteiros para funções

let healed_hp = current_hp(5);

Rust Primitive Types

+ level up

ifs e loops

(Sp Def ==Safety)

Grama é escopo para capturar Pokémons

let pokemons = vec![1, 2, 3, 4, 5, 6];
fn foo() {
}

Mas na batalha não!

Você não pode capturar Pokémons do rival. Você pode até jogar a Pokébola.

let pokemons = vec![1, 2, 3, 4, 5, 6];
let pokemons_rival = pokemons;
println!("Capturei {}", pokemons[0]);

Um Pokémon, dois treinadores! Errado!

Ou você clona o Pokémon ( ͡° ͜ʖ ͡°)

Ou empresta

let pokemons = vec![1, 2, 3];
let pokemons_extras = vec![4, 5, 6];

let pokemon_party = forma_party(&v1, &v2);

&mut

let mut attack = 5;
{
    let new_attack = &mut attack;
    *new_attack += 1;
}
println!("{}", attack);

Imprime 6

Starter

"hello world"

Próximo meetup?

Agradecimentos e referências

  • Florian Gilcher - https://speakerdeck.com/skade/rust-is-the-only-thing-thats-left 
  • Video - https://www.youtube.com/watch?v=_-fweBvtifA (@steveklabnik)
  • Rust Docs - https://doc.rust-lang.org
  • @lafp (GIFs)
  • Rust by example - https://github.com/rust-lang/rust-by-example
  • Reviews do Twitter

@Argorak

  • Mapa de Hoenn com os nomes das cidades - http://depot.tigrisoft.com/games/rubysapp/images/hoennmap.jpg
  • Sprites dos  gym leaders! - http://bulbapedia.bulbagarden.net/wiki/Hoenn_League

Thank you :)

Questions?

 

hannelita@gmail.com

@hannelita

Rust (and Pokémons)

By Hanneli Tavante (hannelita)

Rust (and Pokémons)

  • 1,779
Loading comments...

More from Hanneli Tavante (hannelita)