Rust

A short intro

With Pokémons, of course.

Disclaimers

I might not be able to answer all the questions.

I've been studying Rust for ~ 3 months, so I don't know much stuff.

Accepting feedback and suggestions!

Many Pokémons and GIFs!

(not even considering the stuff I don't know that exists!) - @ramalhoorg

Hi!

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

How could I make a talk about language features without being boring?

New language=> new Pokémon version

Pokémon: Rust version

  • Being developed for ~ 8 yeas [at least the idea] (source: https://www.youtube.com/watch?v=_-fweBvtifA ) 
  • ~ 2 years when it assumed the desired format and main goals
  • Mozilla

C/C++

Ruby/JS

Haskell/FP

C/C++

Ruby/JS

Haskell/FP

C/C++ - don't want GC

Ruby/JS -Nice language with compiler support

Haskell/FP - interesting type system

Starter

Starter

Cargo

Compiles, links and organises project dependencies in a single place

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]

rustc --explain 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

  • Reminds some C style
  • You don't have to explicitly declare the type (but it's possible)
  • Be careful with immutability

Level up!

fn example(x: int) -> int

-> return type

( ) parameters are optional

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

  • Do return a value

Statements

  • Do NOT return a value
  • x +1;
fn use_potion(hp: i32) -> i32 {
    hp + 20
}

let current_hp = use_potion;

Function Pointers

let healed_hp = current_hp(5);

Rust Primitive Types

+ level up

ifs and loops

(Sp Def ==Safety)

Grass is a scope to capture Pokémons

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

But not in a battle!

You cannot capture your rival's Pokémon. You can throw the Pokéball, however.

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

Wrong! One Pokémon, two trainers! That's wrong.

You can clone the Pokémon ( ͡° ͜ʖ ͡°)

Or **borrow** it

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);

Prints 6

Starter

"hello world"

To be continued... :)

References and special thanks

  • 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
  • Twitter Reviews

@Argorak

  • Hoenn Map with city names - http://depot.tigrisoft.com/games/rubysapp/images/hoennmap.jpg
  • Gym leaders Sprites! - http://bulbapedia.bulbagarden.net/wiki/Hoenn_League

Thank you :)

Questions?

 

hannelita@gmail.com

@hannelita