Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf · 2017-03-05 · Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (2024)

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (1)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Starting Rust from a Scripting BackgroundDeploy, Write, and Improve Rust

E. Dunham@qedunham

March 5, 2017http://talks.edunham.net/scale15x

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (2)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

1 IntroAbout MeAbout YouAbout Rust

2 Run RustChannelsInstallation Options

3 Write RustErrorsSyntaxTypes & TraitsSafetyUsing Libraries

4 Improve RustLevel upFind a projectGet involved

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (3)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Welcome!

This is an intro class

Learn what Rust is & isn’tRun Rust codeMeet Rust’s special featuresImprove Rust

Not:

Hack time for youUnsafe or advanced RustExhaustive Q&A 1

1Join your local meetup!

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (4)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

This talk will teach you the basics ofRust, and help you ask the rightquestions as you continue to exploreRust after the conference.

The Abstract

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (5)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

About Me:

DevOps for Mozilla Research 2

Rust Community Team member

FOSS & robotics background

NOT a compiler wizard

2Infra is mostly Python

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (6)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Have you...

Heard of Rust?

Used Rust?

Contributed to Rust?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (7)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Have you...

Written C, C++, Assembly, etc?

Written Java, Python, Ruby, JS, etc?

Written Haskell, Erlang, Ocaml, etc?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (8)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Have you...

Used version control?

Used GitHub?

Contributed to a FOSS project?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (9)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

What’s Rust?

Systems language 3

Safety + Performance

Community... (Thriving but controversial)

3Contrast to Go, a language for sysadmins

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (10)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Rust’s Buzzwords

Safety, Speed, Concurrency

Memory safety without garbage collection

Zero-cost abstractions

Hack Without Fear

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (11)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Safety & GC

Memory must be reused

C: “Just follow these rules perfectly, you’re smart”

Java, JS, etc: “Wait a minute, I’ll take care of it”

Rust: “I’ll prove correctness at compile time”

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (12)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

History

Since ˜2010

1.0 Stable in May 2015

Currently 4 version 1.14.0

Mozilla sponsorship & support

4until January 26th

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (13)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Notable Projects

servo.org Browser Engine

habitat.sh Infrastructure Tooling

Dropbox (internal use)

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

servo.org

habitat.sh

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (14)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Where is Rust a good tool?

Speed + Safety essential

LLVM-supported architecture

Team ♥ new technology

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (15)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Where might Rust be a bad tool?

Timeframe prohibits new learning

Need code reuse 5

Can’t handle CoC

5Corrode can translate C to unsafe Rust

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (16)

Rust 101

E. Dunham@qedunham

Intro

About Me

About You

About Rust

Run Rust

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Questions about Rust’s place in the world?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (17)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

1 IntroAbout MeAbout YouAbout Rust

2 Run RustChannelsInstallation Options

3 Write RustErrorsSyntaxTypes & TraitsSafetyUsing Libraries

4 Improve RustLevel upFind a projectGet involved

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (18)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Rust’s channels:

Nightly: Trying neat ideas

Beta: Release candidates

Stable: Always backwards-compatible 6

6https://blog.rust-lang.org/2015/05/15/Rust-1.0.html

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (19)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Which channel to use?

Stable code should run anywhere

Switch to nightly for dependencies

New project? Pick stable 7

7Unless you need an unstable feature

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (20)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Aside: Crater

Compile all published libraries

Diff results from stable and candidate

https://github.com/brson/taskcluster-crater

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (21)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Questions about channels & installation?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (22)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Installation:

Online: play.integer32.com or play.rust-lang.org

Many rusts: rustup.rs

System package manager 8

Tinfoil hat: Compile from source

8Or add Rust to your favorite!

play.integer32.com

play.rust-lang.org

rustup.rs

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (23)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Playpens:

Source at https://github.com/rust-lang/rust-playpen

Choose output, LLVM IR, or ASM

Gist your progress

Config alters editor settings

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (24)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Rustup:

Docs at https://github.com/rust-lang-nursery/rustup.rs

˜/.cargo/bin

rustup install nightly

rustup run nightly cargo new

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (25)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Security:

All releases GPG signed

Key only held by Rust Core Team members

keybase.io/rust (proved by local signing)

Rustup checks signatures for you

github.com/rust-lang/rust

keybase.io/rust

github.com/rust-lang/rust

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (26)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Deployment

Check README for system dependencies

git clone projecturl

cd project

cargo run

Downloads any dependenciesCompiles deps & codeExecutes src/main.rs

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (27)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Channels

InstallationOptions

Write Rust

Improve Rust

http://talks.edunham.net/scale15x

Questions about installation?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (28)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

1 IntroAbout MeAbout YouAbout Rust

2 Run RustChannelsInstallation Options

3 Write RustErrorsSyntaxTypes & TraitsSafetyUsing Libraries

4 Improve RustLevel upFind a projectGet involved

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (29)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

IDE support:

https://areweideyet.com/

http://www.jonathanturner.org/2017/01/rls-alpha-release.html

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (30)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

REPL equivalents:

Use the playpen

playbot on IRC

https://github.com/murarth/rusti worked briefly on nightly

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (31)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Rust wants you to succeed.

Rules catch things that look unsafe

“Unsafe” directive is an override

Errors deserve helpful docs

Click error number in playpen!

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (32)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Erroneous Errors?

Search the web!

Gist your code

Ask on IRC #rust-beginners

File a bug

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (33)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Aside: Other helpful tools

https://github.com/nrc/rustfmt

Rustfmt standardizes style for you

https://github.com/manishearth/rust-clippy

Clippy gives helpful suggestions

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (34)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Questions about errors?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (35)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Scope Syntax:

Everything between matched {}Scopes can nest

{Outer Scope {Inner Scope}}Pay attention to a value’s scope!

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (36)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Function Syntax:

fn myfunction { ... }fn myfunction (arg: type, arg: type) - > resulttype { ... }

Type signatures are like Mad Libs

Function has at least name and scope

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (37)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Macro Syntax:

Shorthand for functions with variable number of arguments

macroname!(foo, bar, baz)

doc.rust-lang.org/beta/book/macros.html

You’ll see “println!”

doc.rust-lang.org/beta/book/macros.html

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (38)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

A Function:

fn halve(x: i32) -> i32 {

return x / 2;

}

fn main(){

println!("{}", halve(4));

}

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (39)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Punctuation Matters:

Expressions end with a semicolon

Exception: bare expression on last line of function returns result

Spaces separate tokens: i32 is not i 32

Whitespace is mostly irrelevant

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (40)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Abusing Whitespace:

fn halve

(x :

i32)->i32

{

return

x

/

2

; } fn main

()

{ println!("{}", halve

(

4

));}

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (41)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Control Flow Syntax:

Conditionals and loops are familiar

if x { ... }loop { ... }while x { ... }for x in 1..100 { ... }

Match statements combine conditionals

https://doc.rust-lang.org/book/if.html

https://doc.rust-lang.org/book/loops.html

https://doc.rust-lang.org/book/match.html

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (42)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Matching on a variable:

fn main() {

let day = 5;

println!("March {} 2017 is:", day);

match day {

2 => println!("Open Infra Day"),

1 | 6 => println!("Travel Time"),

3...5 => println!("The Conference"),

_ => println!("not SCaLE at all"),

}

}

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (43)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Questions about basic syntax?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (44)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Why Types & Traits?

Describe characteristics of inputs and outputs

Avoid allocating unneeded memory

Remind humans how code works 9

9Even type signatures that the compiler could infer must be spelled out.

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (45)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Built-in types

https://doc.rust-lang.org/book/primitive-types.html

Primitives, arrays, strings, tuples

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (46)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Custom types

http://rustbyexample.com/custom_types.html

Structs & Enums

Use types from your dependencies (example in a few slides)

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (47)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Traits

https://doc.rust-lang.org/book/traits.html

Traits describe a type’s abilities

You can tell Rust how type has trait with “impl”

Generalize function’s input and output

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (48)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Questions about types & traits?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (49)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Ownership:

let myint = 42;

“myint” is a variable binding

“myint” owns the value 42

Every value has exactly one owner

See https://doc.rust-lang.org/book/ownership.html

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (50)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Mutability:

Owner can only change value if it’s mutable

let mut myint = 42;

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (51)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Aside: Copy types

Primitives have Copy trait

Contents duplicated on assignment to new var

Custom and other types are not Copy

We’ll use Box

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (52)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Changing the owner:

fn main() {

let first = Box::new(42);

// Box forces heap allocation,

// regular int would just copy

println!("{}", first);

let second = first;

println!("{}", second);

// this would be an error:

// println!("{}", first);

}

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (53)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Borrowing

Grant temporary access to a value

1 mutable borrow XOR unlimited immutable borrows

Syntax: &myvar

https://doc.rust-lang.org/book/references-and-borrowing.html

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (54)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Lifetimes

Remember {scopes}?

Variables disappear when their scope ends!

No borrow may outlive its value’s owner.

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (55)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Questions about safety?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (56)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Package Management

Package manager: Cargo

Libraries: Crates

Package index: crates.io

See “Package Managers All The Way Down”, Tasman B, 3:40pm today

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

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (57)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Create a binary or library

cargo new –bin

BinaryYou run main.rscargo.lock stores state of last good build

cargo new

Librarysrc/lib.rs, no main function

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (58)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

‘cargo new’ creates:

Cargo.toml

src/main.rs or src/lib.rs

.git if absent

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (59)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Depending on a crate

Search crates.io

Search the web, check recent blogs

Check docs, license, & project policies

Add it to ‘dependencies’ section of cargo.toml

name = “0.1”name = { git = “https://github.com/org/repo.git” rev = “123abcd” }

extern crate rand; use rand::Rng;

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (60)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Errors

Syntax

Types & Traits

Safety

Using Libraries

Improve Rust

http://talks.edunham.net/scale15x

Questions about libraries?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (61)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

1 IntroAbout MeAbout YouAbout Rust

2 Run RustChannelsInstallation Options

3 Write RustErrorsSyntaxTypes & TraitsSafetyUsing Libraries

4 Improve RustLevel upFind a projectGet involved

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (62)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Always...

Respect others’ licenses

License your own code

Document & share what you learn!

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (63)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Read a Book

https://doc.rust-lang.org/stable/book/

https://doc.rust-lang.org/nomicon/

O’Reilly Book coming soon

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (64)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Follow the News

http://www.newrustacean.com/ podcast

https://soundcloud.com/posix4e/sets/rustyradio interviews

https://this-week-in-rust.org/ Weekly newsletter

https://blog.rust-lang.org/ Official Blog

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (65)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Practice

https://github.com/carols10cents/rustlings

http://rustbyexample.com/

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (66)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Questions about learning more Rust?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (67)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Join a project

https://crates.io/, find popular crates

Search GitHub “is:issue label:easy language:rust”

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (68)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Port something

https://github.com/jameysharp/corrode

linux.conf.au/schedule/presentation/51/ Friday 1:20pm

https:

//blog.rust-lang.org/2015/04/24/Rust-Once-Run-Everywhere.html

linux.conf.au/schedule/presentation/51/

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (69)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Questions about finding a project?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (70)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

File or Fix issues

github.com/rust-lang/rust

We triage regularly

If in doubt, ask on IRC first

github.com/rust-lang/rust

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (71)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Chat Online

IRC: #rust, #rust-beginners on irc.mozilla.org

users.rust-lang.org Users Forum

Reddit, StackOverflow, etc.

users.rust-lang.org

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (72)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Find or join a meetup

Search for your area + Rust meetup

LA area? https://www.meetup.com/Rust-Los-Angeles/

Community Team Calendar, goo.gl/EJ2iRb

#rust-community on Mozilla IRC

goo.gl/EJ2iRb

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (73)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Attend a conference

rustconf.com Oregon, September

www.rust-belt-rust.com, Pennsylvania, October

www.rustfest.eu, Europe, September

rustconf.com

www.rust-belt-rust.com

www.rustfest.eu

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (74)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Questions about getting involved?

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf· 2017-03-05· Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (75)

Rust 101

E. Dunham@qedunham

Intro

Run Rust

Write Rust

Improve Rust

Level up

Find a project

Get involved

http://talks.edunham.net/scale15x

Thank you!

Starting Rust from a Scripting Backgroundtalks.edunham.net/scale15x/slides.pdf · 2017-03-05 · Rust 101 E. Dunham @qedunham Intro Run Rust Write Rust Improve Rust Starting Rust - [PDF Document] (2024)

References

Top Articles
Latest Posts
Article information

Author: Mrs. Angelic Larkin

Last Updated:

Views: 6046

Rating: 4.7 / 5 (67 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Mrs. Angelic Larkin

Birthday: 1992-06-28

Address: Apt. 413 8275 Mueller Overpass, South Magnolia, IA 99527-6023

Phone: +6824704719725

Job: District Real-Estate Facilitator

Hobby: Letterboxing, Vacation, Poi, Homebrewing, Mountain biking, Slacklining, Cabaret

Introduction: My name is Mrs. Angelic Larkin, I am a cute, charming, funny, determined, inexpensive, joyous, cheerful person who loves writing and wants to share my knowledge and understanding with you.