goto conference - $cat~/.profile git author …$cat~/.profile git_author_name=floriangilcher...

89

Upload: others

Post on 03-Jun-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me
Page 2: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

$ cat ~/.profile

GIT_AUTHOR_NAME=Florian Gilcher

[email protected]

TWITTER_HANDLE=argorak

GITHUB_HANDLE=skade

BLOG=skade.me

YAKS=yakshav.es

Page 3: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Rust and Elasticsearch Trainer

• Event organiser

• Ruby Programmer since 2003

• Rust Programmer since 2013

• CEO asquera GmbH

Page 4: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Community person

• Rust/Search Meetups

• eurucamp/jrubyconf.eu

• RustFest

• Part of the global Rust communityteam

Page 5: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

As a hobby, I shoot arrows at stuff

Page 6: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Why is Rustsuccessful?

Page 7: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Problem

Page 8: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

There’s almost no comparable metricsfor programming languages around.

Page 9: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Define"Success"

Page 10: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Moves the state of technology for-ward

• Is used in sizable production envi-ronments

• Attracts contribution

• Has sizable growth

• Attracts positive feedback

Page 11: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

What isRust?

Page 12: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• new systems programming language

• powers and was developed in alongwith Servo, a new browser engine

• by Mozilla and the Community

• First stable release May 15th, 2015

Page 13: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Providing an alternative to C/C++,but also higher-level languages.

Page 14: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Safe

• Concurrent

• Fast

Page 15: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

It’s generally perceived thatsafety, especially memory-safety

comes at a runtime cost.

Page 16: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Safe

• Concurrent

• Fast

Page 17: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Pick Three

Page 18: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Core features

Page 19: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Static type system with local typeinference

• Explicit mutability

• Zero-cost abstractions

• Runtime-independent concurrencysafety

Page 20: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Errors are values

• No null

• Static automatic memory manage-ment

• No garbage collection

Page 21: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

extern crate tempdir;

use tempdir::*;

use std::fs::File;

fn main() {

let tempdir = TempDir::new("goto-berlin");

let mut tempfile = match tempdir {

Ok(dir) => {

File::create(

dir.path().join("tmpfile")

)

}

Err(_) => { panic!("Couldn’t open tempdir") }

}

do_something(&mut tempfile);

// look, no close necessary!

}

Page 22: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Base concept:Mutability

Page 23: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

struct InnerData {

val: i32

}

struct Data {

inner: InnerData

}

fn main() {

let d = Data { inner: InnerData { val: 41 }};

d.inner.val = 42;

// error: cannot assign to immutable field `d.inner.val`

}

Page 24: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

struct InnerData {

val: i32

}

struct Data {

inner: InnerData

}

fn main() {

let mut d = Data { inner: InnerData { val: 41 }};

d.inner.val = 42;

}

Page 25: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Base concept:Ownership & Borrowing

Page 26: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Every piece of data is uniquelyowned

• Ownership can be passed

• When owned data reaches the endof a scope, it is destructed

Page 27: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

use std::fs::File;

use std::io::Write;

fn main() {

let file = File::open("test")

.expect("Unable to open file, bailing!");

take_and_write_to_file(file);

// take_and_write_to_file(file);

// ^^ Illegal

}

fn take_and_write_to_file(mut file: File) {

writeln!(file, "{}", "Hello #gotober!");

}

Page 28: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Access can be borrowed (mutableand immutable)

• You can borrow mutably once

• Or multiple times immutably

• Exclusive: mutable or immutable,never both

Page 29: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Shared mutable state is an issueeven single-threaded applications!

Page 30: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

use std::fs::File;

use std::io::Write;

fn main() {

let mut file = File::open("test")

.expect("Unable to open file, bailing!");

write_to_file(&mut file);

write_to_file(&mut file);

}

fn write_to_file(file: &mut File) {

writeln!(file, "{}", "Hello #gotober!");

}

Page 31: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

fn main() {

let mut vector = vec![1,2,3];

let elem = &vector[1];

vector[2] = 4;

}

Page 32: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

error[E0502]: cannot borrow `vector` as mutable because it is also borrowed as immutable

–> src/main.rs:4:5

|

3 | let elem = &vector[1];

| —— immutable borrow occurs here

4 | vector[2] = 4;

| ^^^^^^ mutable borrow occurs here

5 | }

| - immutable borrow ends here

Page 33: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust checks validity of allreferences at compile-time.

Page 34: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

struct Data<’a> {

inner: &’a i32

}

fn return_reference<’a>() -> Data<’a> {

let number = 4;

Data { inner: &number }

}

Page 35: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

–> src/main.rs:8:20

|

8 | Data { inner: &number }

| ^^^^^^ does not live long enough

9 | }

| - borrowed value only lives until here

|

Page 36: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

All Rust function signatures not onlysignal data types, but also mutability,

ownership and interconnectionsbetween input and output types.

Page 37: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

100, 1000, 10.000 lines of calledcode, Rust keeps these properties!

Page 38: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Abstractions

Rust provides higher-level abstractionsthrough Generics and Traits, similarto C++ Templates or Java Generics.

Page 39: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Concurrencywithout fear

Page 40: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

let counter = Counter { count: 0 };

for _ in 1..3 {

std::thread::spawn(move || {

increment(&mut counter);

// capture of moved value: `counter`

});

}

Page 41: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

use std::rc::Rc;

let rc = Rc::new(Counter { count: 0 });

for _ in 1..3 {

let handle = rc.clone();

std::thread::spawn(move || {

// `std::rc::Rc<Counter>` cannot be sent between

threads safely

increment(&mut handle);

});

}

Page 42: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

use std::rc::Rc;

let rc = Rc::new(Counter { count: 0 });

for _ in 1..3 {

let handle = rc.clone();

std::thread::spawn(move || {

increment(&mut handle.lock().unwrap());

});

}

Page 43: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

This example could be aconcurrency bug in many

languages, or even a double-free!

Page 44: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

This analysis is purely static andindependent of concurrency primitive!Rusts type system allows no data races.

Page 45: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Low-levelcontrol & safety!

Page 46: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Borrows boil down to pointers atruntime

• Values are plain values just like ine.g. C

• Optional unsafe sub-language

Page 47: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

“ Safe code means youcan take better risks.”

– @QEDunham

Page 48: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Is Rustsuccessful?

Page 49: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Moves the state oftechnology forward

Page 50: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust wraps safety techniquespreviously only used in researchsettings in a production-ready

package. It brings memory-safetyto environments where it

was previously not possible.

Page 51: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Is used in sizableproduction

environments

Page 52: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me
Page 53: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Dropbox has sizable backend sys-tems in it

• Chef Habitat is written using Rust

• Canonical: from server monitoringto middleware

• Used in several games

• Schauspiel Dortmund

Page 54: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

https://www.rust-lang.org/friends.html

Page 55: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Attracts contribution

Page 56: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

More then 4/5 of contributionsto the Rust language come

from outside Mozilla.The compiler has morethen 2000 contributors.

Page 57: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

https://thanks.rust-lang.org/rust/all-time

Page 58: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me
Page 59: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Has sizable growth

Page 60: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Doubled in TIOBE and Redmonk in-dices since last year.

• This maps to increased survey re-spondent numbers

• Currently has 5 conferences peryear

• Over 100 Meetups around the world

• Newcomers from all directions

Page 61: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me
Page 62: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Attracts positiveFeedback

• Voted "Most loved language" onStackoverflow 2017, 2016

• Only 1/100 of survey respondentshave issues with the Rust commu-nity

Page 63: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me
Page 64: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Why is Rustsuccessful?

Page 65: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust wants to be used

Page 66: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust was always intended as aindustry production language.For that reason, it was alwaysdeveloped in lockstep witha huge application (Servo).

Page 67: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust is approachable

Page 68: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Easy to get an environment setup

• Build and dependency managementpart of the toolchain

• Development tooling as well, likelinters

• We take pride in error messages

Page 69: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Great docs through the book and a(almost) fully documented standardAPI

• Central YouTube channel with talksand lectures

• Maintained forums and IRC

Page 70: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust is pragmatic

Page 71: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• All features are driven by needs ofreal software

• The language is evolved with userfeedback

• Consciously chooses familiar con-structs

• Picks good ideas from others

Page 72: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust plays wellwith others

Page 73: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Rust interfaces to other languagesthrough the C ABI at zero cost

• Binding generators C and C++

• High-level bindings for some lan-guages (Ruby, JavaScript)

Page 74: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust is a great partner

• Preserves the conveniences of high-level languages in low-level land.

• Doesn’t want to be the primary lan-guage at all cost

• Built for gradual adoption

Page 75: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Project:Stylo

Stylo is Firefox new stylingengine, taken from Servo.

Page 76: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• Stylo is heavily parallel and concur-rent

• Multithreading without support wasa huge source of bugs

• Concurrency assistance allowed arewrite in about a year

• Rusts FFI allowed easy integration

Page 77: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Beyondplain code

Page 78: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Commitmentto stability

• Rust is released every 6 weeks

• Rust is backwards-compatible, withhuge machinery to ensure that

• Currently at version 1.21.0

Page 79: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Commitmentto stability

• Rust stable allows no use of unsta-ble features

• These are only available in nightlybuilds

• Features that are not ready for wideuse are not released for wide use.

Page 80: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Maturity

• Code generation is providedthrough LLVM

• No runtime, no runtime bugs

• Very conservative approach tostdlib adoption

Page 81: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Cross-capabilities

• rustc is a cross-compiler by defaultand the whole toolchain is aware

• Almost-no-setup cross compilation!(getting better)

• Rust supports embedded and IoTusecases

• Yes, we WASM

Page 82: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Governance & Care

All changes go throughan open RFC process!

Page 83: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Mozilla has great experience with opendiscussion and processes and it shows!

Page 84: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Medium time to mergedPR for changes: 6 days!

Page 85: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Supportingcommercial users

Page 86: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

• regular interviews with prod users,to hear about their issues

• the core team can always be spokento

• consulting, development and train-ing available, through integer32 andasquera.

Page 87: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Have a [email protected]

Page 88: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

Rust brings safe programmingto targets where it was unfeasiblebefore while also bringing newthings to the table to competewith other safe languages.

Page 89: GOTO Conference - $cat~/.profile GIT AUTHOR …$cat~/.profile GIT_AUTHOR_NAME=FlorianGilcher GIT_AUTHOR_EMAIL=florian@asquera.de TWITTER_HANDLE=argorak GITHUB_HANDLE=skade BLOG=skade.me

You can’tspell trust

without Rust