Geveloper 160816

Post on 14-Apr-2017

45 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

Transcript

Rust Programming LanguageGeveloper 160816

지난번까지 Rust + Piston으로...

• 창 띄우기

• 창 안에 상자 그리기

• 그린 상자 움직이기

• 키 눌러 움직이기

• 상자 좌우로 기울이기

• 마우스 인식하기

지난번까지 Rust + Piston으로...

• 창 띄우기

• 창 안에 상자 그리기

• 그린 상자 움직이기

• 키 눌러 움직이기

• 상자 좌우로 기울이기

• 마우스 인식하기

• 마우스 방향으로 상자 기울이기 << 포기!

잠정 포기한 이유

• Piston 라이브러리 자체에 미숙

• Object의 중심을 어떻게 설정하는지 모르겠다.

• 참고할 곳도 없음

• 그럼 API 문서를 봐야 하는데 Rust 언어 자체에 미숙

• 봐도 모르겠다

• 수학을 못 함

앞으로 공부할 것

• 언어 공부 먼저

• Rust << 재미

• 공식 책 보고 하루에 2~3 소챕터씩 공부하기

• C++ << 필요

• 개강하면...

그래서 공부한 내용:

• 변수 선언

• 함수 선언

• 원시형

Rust 변수 선언

• 변수(變數)인데 기본적으로 변(變)할 수 없다.

• mut 키워드로 변할 수 있는 변수를 만들 수 있다.

• 형(type)을 꼭 안 써도 된다. 컴파일러가 추론해준다.

• 초기화 하지 않은 값은 쓸 수 없다.

• 초기화 하고 안 써도 상관은 없는데 이 경우 형 선언을 해줘야 한다. (확보할 메모리 양을 모르니까)

Rust 변수 선언

fn main () { let god_movie: &str = "워크래프트: 전쟁의 서막";// ~~~// 변수 선언을 위한 키워드 println!("{}는/은 아주 잘 만든 영화이다.", god_movie);}

Rust 변수 선언

fn main () { let god_movie: &str = "워크래프트: 전쟁의 서막";// ~~~~~~~~~// 변수 이름 println!("{}는/은 아주 잘 만든 영화이다.", god_movie);}

Rust 변수 선언

fn main () { let god_movie: &str = "워크래프트: 전쟁의 서막";// ~~~~// 변수 자료형 (생략 가능) println!("{}는/은 아주 잘 만든 영화이다.", god_movie);}

패턴 매칭을 이용한 선언fn main() { let (h_temp, l_temp) = (33, 26); println!("오늘의 최고 기온은 {}'C이고, 최저 기온은 {}'C이다.", h_temp, l_temp); // 오늘의 최고 기온은 33'C이고, 최저 기온은 26'C이다.}

패턴 매칭과 재할당을 이용한 swapfn main() { let (imp, exp) = (40, 10); println!("수입은 {}, 지출은 {}. 남은 잔고는 {}", imp, exp, imp-exp); let (imp, exp) = (exp, imp); println!("수입은 {}, 지출은 {}. 남은 잔고는 {}", imp, exp, imp-exp); // 수입은 40, 지출은 10. 남은 잔고는 30 // 수입은 10, 지출은 40. 남은 잔고는 -30}

재할당을 이용했을 때

fn main() { let var = "계절"; println!("너와 함께 물들은 {:p}은 잠겨만가고", &var); // 너와 함께 물들은 0x7fff5a360660은 잠겨만가고 let var = "미열"; println!("느닺없는 {:p}에 나는 허덕이고 있어", &var); // 느닺없는 0x7fff5a3605b8에 나는 허덕이고 있어}

저장되는 메모리가 다르다 => 새 값이 만들어진다

mut를 이용했을 때

fn main() { let mut when = "어제"; println!("{:p}도 들었던 그 아티스트는", &when); // 0x7fff54e10660도 들었던 그 아티스트는 when = "내일"; println!("{:p}을 끝으로 해산한다나봐", &when); // 0x7fff54e10660을 끝으로 해산한다나봐}

저장되는 메모리가 같다 => 말 그대로 값이 변한다

Rust의 함수

fn inc(x: i32) -> i32 { x + 1}

Rust의 함수

fn inc(x: i32) -> i32 { x + 1}

fn dec(x: i32) -> i32 { return x - 1;}

두가지 반환 방식

Rust의 기본 자료형• bool, char

• i8, i16, i32, i64, isize

• u8, u16, u32, u64, usize

• f32, f64

• [T;N] (array), &[T] (slice), str

• Tuples, FuncDons

C++과 다른 점

• char가 4bytes (UTF-8이라서)

• stdint.h 같은 자료형이 기본 (i32, i64, ...)

• str과 char의 배열은 다름 (UTF-8이 가변 바이트라서)

• 배열의 정의에 갯수도 들어가 있음 ([i32;1]과 [i32;2]는 다른 타입)

• 하스켈, 파이썬 처럼 튜플이 있음

• 함수도 타입임

오버플로우 일으키기fn main() { let mut x: i64 = i64::max_value(); println!("Max value of the i64 : {}", x); x += 1; println!("Now it has been changed to {}", x);}// Max value of the i64 : 9223372036854775807// thread '<main>' panicked at 'arithmetic operation overflowed', src/main.rs:4// note: Run with `RUST_BACKTRACE=1` for a backtrace.// error: Process didn't exit successfully: `target/debug/peg01` (exit code: 101)

디버그 모드에서는 런타임 에러

오버플로우 일으키기

fn main() { let mut x: i64 = i64::max_value(); println!("Max value of the i64 : {}", x); x += 1; println!("Now it has been changed to {}", x);}// Max value of the i64 : 9223372036854775807// Now it has been changed to -9223372036854775808

릴리즈 모드에서는 통과

함수도 타입fn inc(a: isize) -> isize { a + 1}

fn dec(a: isize) -> isize { a - 1}

fn main() { let mut fun: fn(isize) -> isize = inc; println!("fun = inc, fun(1): {:?}", fun(42)); // fun = inc, fun(1): 43 fun = dec; println!("fun = dec, fun(1): {:?}", fun(42)); // fun = inc, fun(1): 41}

기본형에도 메소드가 있다fn main() { let x: [&str;3] = ["사과", "딸기", "포도"]; let y: [&str;3] = ["사과", "딸기", "포도"]; let msg = match x.eq(&y) { true => "똑같다", false => "다르다" }; println!("두 바구니에 든 물건은 {}", msg);}

& <- 빌림 연산자. 나중에 알려준다고 했음Trait 기반 객체지향이라 Class 기반 객체지향인 C++과는 다른 특징

Traitpub trait PartialEq<Rhs = Self> where Rhs: ?Sized { fn eq(&self, other: &Rhs) -> bool;

fn ne(&self, other: &Rhs) -> bool { ... }}

• Par%alEq 라는 속성이 있는데

• &Rhs를 인자로 취하는 eq라는 함수를 정의하면

• &Rhs를 인자로 취하는 ne라는 함수를 공짜로 얻을 수 있다문서 설명에 의하면 ==와 같다고.

다음에 볼 것:

• if

• loops

• 벡터

(여유가 되면)

• 소유권

• 참조와 빌림

• 수명

top related