SlideShare a Scribd company logo
Rust Programming Language
Geveloper 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이다.
}
패턴 매칭과 재할당을 이용한 swap
fn 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++과는 다른 특징
Trait
pub 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
• 벡터
(여유가 되면)
• 소유권
• 참조와 빌림
• 수명

More Related Content

What's hot (20)

PPTX
shell and process
Chulgyu Shin
 
PDF
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
Lee Sang-Ho
 
PDF
Hash table
SeoYeong
 
PDF
Second.s 분석 by_송형주
iamhjoo (송형주)
 
PDF
Shellscript에 대하여
Luavis Kang
 
PDF
M5 6 1
nexthw
 
PDF
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
Code Engn
 
PPT
programming with GDB
NakCheon Jung
 
PDF
[KOSSA] C++ Programming - 15th Study - STL #1
Seok-joon Yun
 
PDF
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
Code Engn
 
PPTX
Programming challange crypt_kicker
Hyun Jin Moon
 
PDF
[OpenTRS-001] RTOoOS
Theori
 
PPTX
자바스크립트 기초
Eunyoung Hong
 
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요
KTH
 
PDF
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
Daegwon Kim
 
PDF
You can read go code
Homin Lee
 
PPTX
[Gpg2권 박민근] 1.13 스택 와인딩
MinGeun Park
 
PDF
웹표준과 자동화의 약속된 승리
Young-Ho Cha
 
PDF
Bookiya server(이책이야 서버 개발발표)
동건 김
 
PPTX
Thread
Heesung Youn
 
shell and process
Chulgyu Shin
 
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
Lee Sang-Ho
 
Hash table
SeoYeong
 
Second.s 분석 by_송형주
iamhjoo (송형주)
 
Shellscript에 대하여
Luavis Kang
 
M5 6 1
nexthw
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
Code Engn
 
programming with GDB
NakCheon Jung
 
[KOSSA] C++ Programming - 15th Study - STL #1
Seok-joon Yun
 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
Code Engn
 
Programming challange crypt_kicker
Hyun Jin Moon
 
[OpenTRS-001] RTOoOS
Theori
 
자바스크립트 기초
Eunyoung Hong
 
H3 2011 파이썬으로 클라우드 하고 싶어요
KTH
 
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
Daegwon Kim
 
You can read go code
Homin Lee
 
[Gpg2권 박민근] 1.13 스택 와인딩
MinGeun Park
 
웹표준과 자동화의 약속된 승리
Young-Ho Cha
 
Bookiya server(이책이야 서버 개발발표)
동건 김
 
Thread
Heesung Youn
 

Viewers also liked (11)

PDF
Introduction to Rust
Jean Carlo Machado
 
PPTX
RustConf 2016 - Illustrated Adventure Guide
Julien Fitzpatrick
 
PPTX
Tour of Rust
Sanghyeon Seo
 
PDF
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Codemotion
 
PDF
Kudu and Rust
Dan Burkert
 
PDF
Rust Mozlando Tutorial
nikomatsakis
 
PDF
Rust: Systems Programming for Everyone
C4Media
 
PDF
Rust concurrency tutorial 2015 12-02
nikomatsakis
 
PDF
Rust 超入門
Chris Birchall
 
PDF
Introduction to Rust Programming Language
Robert 'Bob' Reyes
 
Introduction to Rust
Jean Carlo Machado
 
RustConf 2016 - Illustrated Adventure Guide
Julien Fitzpatrick
 
Tour of Rust
Sanghyeon Seo
 
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Codemotion
 
Kudu and Rust
Dan Burkert
 
Rust Mozlando Tutorial
nikomatsakis
 
Rust: Systems Programming for Everyone
C4Media
 
Rust concurrency tutorial 2015 12-02
nikomatsakis
 
Rust 超入門
Chris Birchall
 
Introduction to Rust Programming Language
Robert 'Bob' Reyes
 
Ad

Similar to Geveloper 160816 (20)

PPTX
Let's Go (golang)
상욱 송
 
PDF
Momenti Seminar - A Tour of Rust, Part 1
Chris Ohk
 
PPTX
Rust
Wonjun Hwang
 
PDF
[132] rust
NAVER D2
 
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
Kyoungchan Lee
 
PDF
Go
진화 손
 
PPT
Erlang을 이용한 swap 서버
Jaejin Yun
 
PPTX
DEVIEW-FULL-감독판.pptx
hanbeom Park
 
PDF
Momenti Seminar - A Tour of Rust, Part 2
Chris Ohk
 
PPT
Multithread programming 20151206_서진택
JinTaek Seo
 
PPTX
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
iamprogrammerofficial
 
PDF
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
PPTX
Swift2
HyungKuIm
 
PDF
Go로 새 프로젝트 시작하기
Joonsung Lee
 
PPT
Ai C#세미나
Astin Choi
 
PDF
일단 시작하는 코틀린
Park JoongSoo
 
PDF
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
 
PDF
스칼라와 스파크 영혼의 듀오
Taeoh Kim
 
PDF
자료구조 그래프 보고서
mil23
 
PPTX
Ruby - 6th (루비 6장 변수와 식)
재영 이
 
Let's Go (golang)
상욱 송
 
Momenti Seminar - A Tour of Rust, Part 1
Chris Ohk
 
[132] rust
NAVER D2
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
Kyoungchan Lee
 
Erlang을 이용한 swap 서버
Jaejin Yun
 
DEVIEW-FULL-감독판.pptx
hanbeom Park
 
Momenti Seminar - A Tour of Rust, Part 2
Chris Ohk
 
Multithread programming 20151206_서진택
JinTaek Seo
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
iamprogrammerofficial
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
Swift2
HyungKuIm
 
Go로 새 프로젝트 시작하기
Joonsung Lee
 
Ai C#세미나
Astin Choi
 
일단 시작하는 코틀린
Park JoongSoo
 
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
 
스칼라와 스파크 영혼의 듀오
Taeoh Kim
 
자료구조 그래프 보고서
mil23
 
Ruby - 6th (루비 6장 변수와 식)
재영 이
 
Ad

Geveloper 160816

  • 2. 지난번까지 Rust + Piston으로... • 창 띄우기 • 창 안에 상자 그리기 • 그린 상자 움직이기 • 키 눌러 움직이기 • 상자 좌우로 기울이기 • 마우스 인식하기
  • 3. 지난번까지 Rust + Piston으로... • 창 띄우기 • 창 안에 상자 그리기 • 그린 상자 움직이기 • 키 눌러 움직이기 • 상자 좌우로 기울이기 • 마우스 인식하기 • 마우스 방향으로 상자 기울이기 << 포기!
  • 4. 잠정 포기한 이유 • Piston 라이브러리 자체에 미숙 • Object의 중심을 어떻게 설정하는지 모르겠다. • 참고할 곳도 없음 • 그럼 API 문서를 봐야 하는데 Rust 언어 자체에 미숙 • 봐도 모르겠다 • 수학을 못 함
  • 5. 앞으로 공부할 것 • 언어 공부 먼저 • Rust << 재미 • 공식 책 보고 하루에 2~3 소챕터씩 공부하기 • C++ << 필요 • 개강하면...
  • 6. 그래서 공부한 내용: • 변수 선언 • 함수 선언 • 원시형
  • 7. Rust 변수 선언 • 변수(變數)인데 기본적으로 변(變)할 수 없다. • mut 키워드로 변할 수 있는 변수를 만들 수 있다. • 형(type)을 꼭 안 써도 된다. 컴파일러가 추론해준다. • 초기화 하지 않은 값은 쓸 수 없다. • 초기화 하고 안 써도 상관은 없는데 이 경우 형 선언을 해줘야 한다. (확 보할 메모리 양을 모르니까)
  • 8. Rust 변수 선언 fn main () { let god_movie: &str = "워크래프트: 전쟁의 서막"; // ~~~ // 변수 선언을 위한 키워드 println!("{}는/은 아주 잘 만든 영화이다.", god_movie); }
  • 9. Rust 변수 선언 fn main () { let god_movie: &str = "워크래프트: 전쟁의 서막"; // ~~~~~~~~~ // 변수 이름 println!("{}는/은 아주 잘 만든 영화이다.", god_movie); }
  • 10. Rust 변수 선언 fn main () { let god_movie: &str = "워크래프트: 전쟁의 서막"; // ~~~~ // 변수 자료형 (생략 가능) println!("{}는/은 아주 잘 만든 영화이다.", god_movie); }
  • 11. 패턴 매칭을 이용한 선언 fn main() { let (h_temp, l_temp) = (33, 26); println!("오늘의 최고 기온은 {}'C이고, 최저 기온은 {}'C이다.", h_temp, l_temp); // 오늘의 최고 기온은 33'C이고, 최저 기온은 26'C이다. }
  • 12. 패턴 매칭과 재할당을 이용한 swap fn 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 }
  • 13. 재할당을 이용했을 때 fn main() { let var = "계절"; println!("너와 함께 물들은 {:p}은 잠겨만가고", &var); // 너와 함께 물들은 0x7fff5a360660은 잠겨만가고 let var = "미열"; println!("느닺없는 {:p}에 나는 허덕이고 있어", &var); // 느닺없는 0x7fff5a3605b8에 나는 허덕이고 있어 } 저장되는 메모리가 다르다 => 새 값이 만들어진다
  • 14. mut를 이용했을 때 fn main() { let mut when = "어제"; println!("{:p}도 들었던 그 아티스트는", &when); // 0x7fff54e10660도 들었던 그 아티스트는 when = "내일"; println!("{:p}을 끝으로 해산한다나봐", &when); // 0x7fff54e10660을 끝으로 해산한다나봐 } 저장되는 메모리가 같다 => 말 그대로 값이 변한다
  • 15. Rust의 함수 fn inc(x: i32) -> i32 { x + 1 }
  • 16. Rust의 함수 fn inc(x: i32) -> i32 { x + 1 } fn dec(x: i32) -> i32 { return x - 1; } 두가지 반환 방식
  • 17. Rust의 기본 자료형 • bool, char • i8, i16, i32, i64, isize • u8, u16, u32, u64, usize • f32, f64 • [T;N] (array), &[T] (slice), str • Tuples, FuncDons
  • 18. C++과 다른 점 • char가 4bytes (UTF-8이라서) • stdint.h 같은 자료형이 기본 (i32, i64, ...) • str과 char의 배열은 다름 (UTF-8이 가변 바이트라서) • 배열의 정의에 갯수도 들어가 있음 ([i32;1]과 [i32;2]는 다른 타입) • 하스켈, 파이썬 처럼 튜플이 있음 • 함수도 타입임
  • 19. 오버플로우 일으키기 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) 디버그 모드에서는 런타임 에러
  • 20. 오버플로우 일으키기 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 릴리즈 모드에서는 통과
  • 21. 함수도 타입 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 }
  • 22. 기본형에도 메소드가 있다 fn main() { let x: [&str;3] = ["사과", "딸기", "포도"]; let y: [&str;3] = ["사과", "딸기", "포도"]; let msg = match x.eq(&y) { true => "똑같다", false => "다르다" }; println!("두 바구니에 든 물건은 {}", msg); } & <- 빌림 연산자. 나중에 알려준다고 했음 Trait 기반 객체지향이라 Class 기반 객체지향인 C++과는 다른 특징
  • 23. Trait pub 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라는 함수를 공짜로 얻을 수 있다 문서 설명에 의하면 ==와 같다고.
  • 24. 다음에 볼 것: • if • loops • 벡터 (여유가 되면) • 소유권 • 참조와 빌림 • 수명