introduction to rust

21
A 30-minute Introduction to Rust summary

Upload: mysangle

Post on 16-Jul-2015

228 views

Category:

Software


1 download

TRANSCRIPT

A 30-minute Introduction to Rust

summary

1. Rust?

● 2006년에 모질라 개발자인 Graydon Hoare에 의한 개인 프로젝트로 시작.

● 모질라가 2009년부터 스폰서로 지원하기 시작.

● 2010년에 0.1 release● 모질라의 리서치 프로젝트인 Servo

(experimental web browser layout engine)가 Rust를 사용해서 만들어지고 있음.

1. Rust?

● A strongly-typed systems programming language with a focus on memory safety and concurrency.

● an ownership-oriented programming language.

● 조만간 1.0 나올 예정

Cargo

● Package manager● $ cargo new hello_world --bin● - Cargo.toml● - src● ---- main.rs● $ cargo run

Cargo.toml

[package]

name: “hello_world”version: “0.0.1”authors: [“Your Name <[email protected]>”]

Main.rs

fn main() { println!(“Hello, world!”);}

Adding dependency[package]

name: “hello_world”version: “0.0.1”authors: [“Your Name <[email protected]>”]

[dependencies.semver]

git = “https://github.com/rust-lang/semver.git

Main.rsextern crate semver;

use semver::Version

fn main() {

assert!(Version::parse(“1.2.3”) == Ok(Version {

major: 1u,

minor: 2u,

patch: 3u,

pre: vec!(),

build: vec!(),

}));

println!(“Versions compared successfully!”);

}

Ownershipfn main() { let mut v = vec![]; v.push(“Hello”); let x = &v[0]; v.push(“world”); println!(“{}”, x);}

Ownershipfn main() { let mut v = vec![]; v.push(“Hello”); let x = &v[0]; v.push(“world”); println!(“{}”, x);}

Compile Error!

Ownershipfn main() { let mut v = vec![]; v.push(“Hello”); let x = &v[0]; v.push(“world”); println!(“{}”, x);}

Compile Error!

Ownershipfn main() { let mut v = vec![]; v.push(“Hello”); let x = &v[0]; v.push(“world”); println!(“{}”, x);}

Compile Error!

Ownershipfn main() { let mut v = vec![]; v.push(“Hello”); let x = &v[0]; v.push(“world”); println!(“{}”, x);}

fn main() { let mut v = vec![]; v.push(“Hello”); let x = v[0].clone(); v.push(“world”); println!(“{}”, x);}

Concurrencyfn main() { let mut numbers = vec![1i, 2i, 3i];

for i in range(0u, 3u) { spawn(proc() { for j in range(0, 3) { numbers[j] += 1 } }); }}

Concurrencyfn main() { let mut numbers = vec![1i, 2i, 3i];

for i in range(0u, 3u) { spawn(proc() { for j in range(0, 3) { numbers[j] += 1 } }); }}

Compile Error!

Concurrencyfn main() { let mut numbers = vec![1i, 2i, 3i];

for i in range(0u, 3u) { spawn(proc() { for j in range(0, 3) { numbers[j] += 1 } }); }}

Compile Error!

Concurrencyuse std::sync::{Arc, Mutex};

fn main() {

let numbers = Arc::new(Mutex::new(vec![1i, 2i, 3i]));

for i in range(0u, 3u) {

let number = numbers.clone();

spawn(proc() {

let mut array = number.lock();

(*(*array).get_mut(i)) += 1;

println!(“numbers[{}] is {}”, i, (*array)[i]);

});

}

}

Concurrencyuse std::sync::{Arc, Mutex};

fn main() {

let numbers = Arc::new(Mutex::new(vec![1i, 2i, 3i]));

for i in range(0u, 3u) {

let number = numbers.clone();

spawn(proc() {

let mut array = number.lock();

(*(*array).get_mut(i)) += 1;

println!(“numbers[{}] is {}”, i, (*array)[i]);

});

}

}

Arc : atomically reference countedMutex: synchronize our access

Safety and speed

ownership에 의해 compile time에 safety check가 가능

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

for i in range(1u, vec.len()) { println!(“{}”, vec[i]);}

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

for x in vec.iter() { println!(“{}”, x);}

Safety and speed

ownership에 의해 compile time에 safety check가 가능

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

for i in range(1u, vec.len()) { println!(“{}”, vec[i]);}

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

for x in vec.iter() { println!(“{}”, x);}

bounds checking

Happy Hacking!