programming for web developers - scale 14x - rust...programming for web developers. herman j. radtke...

54
Systems Programming for Web Developers

Upload: others

Post on 21-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

SystemsProgramming

for WebDevelopers

Page 2: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Herman J. Radtke IIIVP of Engineering Nordstromrack.com|HauteLook

Page 3: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

When It Matters

Page 4: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node
Page 5: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Rust:1. Memory safety without GC2. Concurrency without data races3. Abstraction without overhead

Page 6: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

arewewebyet .com?

Page 7: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Rust + Web Developer=

Systems Programmer

Page 8: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node
Page 9: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Dev Opscapistrano

puppet, chefrvm, rbenv, chruby

VagrantSensu

Ruby Developers

Page 10: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

UI Developer

Full Stack Developer

NodeNode

NodeNode

Page 11: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Web Developer

Systems Programmer

Page 12: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Modern Web StacksApplication Caching

HTTP CachingMessage/Job Queues

Relational, NoSQL, Search DatabasesLoad BalancersVM / Containers

Page 13: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Knowledge

Gap

Page 14: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Barriers

Web Developer

Memory Management

Thread Safety

Expressiveness

Page 15: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Why Rust?1. Memory safety without GC2. Concurrency without data races3. Abstraction without overhead

Page 16: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Ownership

Page 17: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn take(v: Vec<i32>) { }

let v = vec![1, 2, 3];

take(v);

println!("v[0] is: {}", v[0]);

Page 18: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

error: use of moved value: `v`println!("v[0] is: {}", v[0]); ^

Page 19: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn take(v: Vec<i32>) { }

let v = vec![1, 2, 3];

take(v);

println!("v[0] is: {}", v[0]);

Page 20: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Segmentations Faults

Use after free

Memory leaks

Page 21: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Compiler as

Teacher

Page 22: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

with

confidence

Contribute Contribute Contribute ContributeContribute Contribute Contribute ContributeContribute Contribute Contribute ContributeContribute Contribute Contribute Contribute

Page 23: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Type Inference

Page 24: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let foo: i32 = 5;

Page 25: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let foo: i32 = 5;

let foo = 5;

Page 26: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let f = |x: i32| -> i32 { x };

Page 27: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let f = |x: i32| -> i32 { x };

let f = |x| { x };

Page 28: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn silly<'a> (s: &'a str) -> &'a str { }

Page 29: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn silly<'a> (s: &'a str) -> &'a str { }

fn silly (s: &str) -> &str { }

Page 30: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Optional Correctness

Page 31: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let r = some_func();if r.is_err() { return false;}

// happy path code

Page 32: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Option<T>

Page 33: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let foo = "bar";let c = match foo.find('b') { Some(c) => c, None => panic!("Not found")};

Page 34: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let foo = "nope";let c = match foo.find('b') { Some(c) => c, None => panic!("Not found")};

Page 35: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

// yololet foo = "bar";let c = foo.find('b').unwrap();

Page 36: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Programmer Knows

Best

Page 37: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let sparkle_heart = unsafe { String::from_utf8_unchecked( vec![240, 159, 146, 150] );};

Page 38: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Mullet Driven Dev

Ruby in the frontC in the back

ZeroCostAbstractions

Page 39: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

let n = (1..10) .map(|i| i * 2) .filter(|&i| i > 5) .fold(0, |acc, i| acc + i);

Page 40: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

loop { prompt() .and_then(read) .and_then(evaluate) .and_then(print) .unwrap_or_else( /* error */);}

Page 41: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Generics

Page 42: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn first<A, B>(pair: (A, B)) -> A { let (a, _) = pair; return a;}

Page 43: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

first((1, 2)); // returns 1first(("a", "b")); // returns "a"

Page 44: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Monomorphization

Page 45: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

first((1, 2)); // returns 1first(("a", "b")); // returns "a"

Page 46: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn first_i32(pair: (i32, i32)) -> i32 { let (a, _) = pair; return a;}

Page 47: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn first_str(pair: (&str, &str)) -> &str { let (a, _) = pair; return a;}

Page 48: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

fn first<A, B>(pair: (A, B)) -> A { let (a, _) = pair; return a;}

Page 49: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Foreign Function

Interface

Page 50: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

CLingua Franca

Page 52: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Rust LA Meetuphttp://www.meetup.com/Rust-Los-Angeles/

Page 53: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Herman J. Radtke III@hermanradtke

github.com/hjr3

hermanradtke.com/tags/rustlang.html

Page 54: Programming for Web Developers - SCALE 14x - Rust...Programming for Web Developers. Herman J. Radtke III ... Sensu Ruby Developers. UI Developer Full Stack Developer Node Node Node

Questions?