CSED101 INTRODUCTION TO COMPUTING INTRODUCTION TO COMPUTER SCIENCE
Introduction to rust
Transcript of Introduction to rust
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
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