Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Rust Programming Language
Search
Hyeon Kim
May 09, 2015
Programming
8
1.9k
The Rust Programming Language
2015 spring, UPnL workshop.
Hyeon Kim
May 09, 2015
Tweet
Share
More Decks by Hyeon Kim
See All by Hyeon Kim
Adopting Rust to a club
simnalamburt
3
940
Other Decks in Programming
See All in Programming
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
120
CSC509 Lecture 13
javiergs
PRO
0
110
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
as(型アサーション)を書く前にできること
marokanatani
10
2.7k
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
610
Ethereum_.pdf
nekomatu
0
470
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
140
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
初めてDefinitelyTypedにPRを出した話
syumai
0
420
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
980
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
140
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Raft: Consensus for Rubyists
vanstee
136
6.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
100
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
What's new in Ruby 2.0
geeforr
343
31k
Scaling GitHub
holman
458
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Git: the NoSQL Database
bkeepers
PRO
427
64k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Transcript
The Rust Programming Language 쉽고 안전한 시스템 프로그래밍 김지현 2015-05-09
발표자 소개 13학번 김지현 UPnL 서버관리자 (2014~now) @simnalamburt
target non-target 시스템 프로그래밍을 하고싶으신분, 하게되실분 시스템 프로그래밍 안할 사람
이 발표는 새내기들을 위해 난이도조절 되어있습니다.
Why Rust <****> 러스트를 시작하고 인기남이 되었어요!
빠르다 안전하다 쉽다 Fast Safe Easy
빠르다 안전하다 쉽다 Fast Safe Easy
Dennis MacAlistair Ritchie 1941 ~ 2011 UNIX, C
malloc(), free() • 원하는 양의 메모리를 할당, 프로그래머에게 준다 •
프로그래머에겐 정리의 의무가 있음 void *malloc(size_t size); void free(void *ptr)
malloc(), free() • 받아왔던 주소값을 free()에 넘기면 끗 • 근데
까먹고 안하면 Leakage void *mem = malloc(100); /* ... */ free(mem);
malloc(), free() • 중간에 함수 조기종결이라도 한다면? • 꼼꼼해져야함 void
*mem = malloc(100); /* ... */ if (some_problem) { free(mem); return; } /* ... */ free(mem);
malloc(), free() • 할당을 셋 이상 하면? • 조기종결을 세번
이상 하면?
malloc(), free() • 할당을 셋 이상 하면? • 조기종결을 세번
이상 하면?
void *mem1 = malloc(100); void *mem2 = malloc(1000); /* ...
*/ if (some_problem) { free(mem1); free(mem2); return; } /* ... */ void *mem3 = malloc(10000); if (another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ if (yet_another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ free(mem1); free(mem2); free(mem3);
void *mem1 = malloc(100); void *mem2 = malloc(1000); /* ...
*/ if (some_problem) { free(mem1); free(mem2); return; } /* ... */ void *mem3 = malloc(10000); if (another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ if (yet_another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ free(mem1); free(mem2); free(mem3);
void *mem1 = malloc(100); void *mem2 = malloc(1000); /* ...
*/ if (some_problem) { free(mem1); free(mem2); return; } /* ... */ void *mem3 = malloc(10000); if (another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ if (yet_another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ free(mem1); free(mem2); free(mem3);
void *mem1 = malloc(100); void *mem2 = malloc(1000); /* ...
*/ if (some_problem) { free(mem1); free(mem2); return; } /* ... */ void *mem3 = malloc(10000); if (another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ if (yet_another_problem) { free(mem1); free(mem2); free(mem3); return; } /* ... */ free(mem1); free(mem2); free(mem3);
사실 이렇게 하면 됨 • 문제 해결? void *mem1 =
malloc(100); void *mem2 = 0; void *mem3 = 0; /* ... */ if (some_problem) { goto ERROR; } mem2 = malloc(1000); /* ... */ mem3 = malloc(10000); if (another_problem) { goto ERROR; } /* ... */ if (yet_another_problem) { goto ERROR; } /* ... */ ERROR: free(mem1); mem1 = 0; free(mem2); mem2 = 0; free(mem3); mem3 = 0;
사실 이렇게 하면 됨 • 문제 해결? • malloc(), free()
외에 다른 리소 스 할당을 스택 쌓듯이 하면? • double-free, use-after-free 에 서 안전한가? • 여전히 free 까먹고 안할 가능성 void *mem1 = malloc(100); void *mem2 = 0; void *mem3 = 0; /* ... */ if (some_problem) { goto ERROR; } mem2 = malloc(1000); /* ... */ mem3 = malloc(10000); if (another_problem) { goto ERROR; } /* ... */ if (yet_another_problem) { goto ERROR; } /* ... */ ERROR: free(mem1); mem1 = 0; free(mem2); mem2 = 0; free(mem3); mem3 = 0;
사실 이렇게 하면 됨 • 문제 해결? • malloc(), free()
외에 다른 리소 스 할당을 스택 쌓듯이 하면? • double-free, use-after-free 에 서 안전한가? • 여전히 free 까먹고 안할 가능성 void *mem1 = malloc(100); void *mem2 = 0; void *mem3 = 0; /* ... */ if (some_problem) { goto ERROR; } mem2 = malloc(1000); /* ... */ mem3 = malloc(10000); if (another_problem) { goto ERROR; } /* ... */ if (yet_another_problem) { goto ERROR; } /* ... */ ERROR: free(mem1); mem1 = 0; free(mem2); mem2 = 0; free(mem3); mem3 = 0;
사실 이렇게 하면 됨 • 문제 해결? • malloc(), free()
외에 다른 리소 스 할당을 스택 쌓듯이 하면? • double-free, use-after-free 에 서 안전한가? • 여전히 free 까먹고 안할 가능성 void *mem1 = malloc(100); void *mem2 = 0; void *mem3 = 0; /* ... */ if (some_problem) { goto ERROR; } mem2 = malloc(1000); /* ... */ mem3 = malloc(10000); if (another_problem) { goto ERROR; } /* ... */ if (yet_another_problem) { goto ERROR; } /* ... */ ERROR: free(mem1); mem1 = 0; free(mem2); mem2 = 0; free(mem3); mem3 = 0;
C++ Golden Rule Resource Acquisition Is Initialization
C++, RAII • 소멸자 문법 • 괄호가 열리면, 닫힐것이 무조건
보장됨 struct raii { raii() { hello(); } ~raii() { bye(); } }; int main() { for (int a = 0; a < 10; ++a) { raii a; // 자동으로 hello() 가 호출됨 /* ... */ } // 스코프를 빠져나가면 자동으로 bye() 가 호출됨 }
스마트 포인터 • 똑똑한 포인터 { int *dumb = new
int(10); /* ... */ } // <- LEAK! { auto smart = unique_ptr(new int(10)); /* ... */ } // <- RAII ♥
이제 진짜 된건가?!
None
1. 배우기 어렵다 2. 실수하기 쉽다 C++의 문제
1. 배우기 어렵다 2. 실수하기 쉽다 C++의 문제
1. 배우기 어렵다 2. 실수하기 쉽다 C++의 문제
C++ is not even close to memory safety • Dangling
reference auto list = vector<int>(); /* ... */ auto& elem = list[0]; list.push_back(100); cout << elem; // BOOM!!
Case study: Firefox • 파이퍼폭스 버그, 보안취약점들의 원인중 double free,
user after free가 여전히 상위권임
Case study: Mabinogi 2
Case study: Mabinogi 2
Admit it C++ is not that good
Admit it C++ is not that good 여전히 좋다고 생각하신다면
스톡홀름 증후군을 의심해보십시오
“원래 기존의것을 낫게 만드는게 새 언어 만들어서 하는것보다 훨씬 힘들어.”
멀티코어 컴퓨팅 연구실 이재진 교수님 5월 6일 301동 101호 멀티코어 수업 시간중 발췌
“원래 기존의것을 낫게 만드는게 새 언어 만들어서 하는것보다 훨씬 힘들어.”
멀티코어 컴퓨팅 연구실 이재진 교수님 5월 6일 301동 101호 멀티코어 수업 시간중 발췌 “기존의것을 낫게 만드느니 새 언어 만드는게 훨씬 쉬워.”
None
None
“To design and implement a safe, concurrent, practical, static systems
language.”
fn main() { println!("Hello, world!"); } http://rust-lang.org
Why Rust <****> 러스트를 시작하고 인기남이 되었어요!
빠르다 안전하다 쉽다 Fast Safe Easy
빠르다 안전하다 쉽다 Fast Safe Easy
LLVM
LLVM • 컴파일러 기반구조 • 훌륭하신 분들이 잘 만들어놨음
LLVM • 컴파일러 기반구조 • 훌륭하신 분들이 잘 만들어놨음
빠르다 안전하다 쉽다 Fast Safe Easy
None
None
None
None
None
빠르다 안전하다 쉽다 Fast Safe Easy
쉬웡 C++ • 암걸리는 문법 • 배울게 걍 많음 •
Makefile, autoconf, cmake, ninja, ... • 통일된 패키지매니저 X Rust • 젊음 • 간단함 • cargo • cargo https://crates.io • 매크로, annotation, ...
디펜던시 관리 • 걍 pip, npm, gem 얘네랑 다를거 없음
• 이러면 원터치로 다 설치됨 • 반면 C++에선 컴파일옵션 바꾸고 경로설정하고 라이 브러리마다 설치방법 다 다르고 난리를 치지 [dependencies] time = "*" glutin = "*"
rustdoc 기본 내장 • 코드에 주석만 적절히 달면
rustdoc 기본 내장
rustdoc 기본 내장
디버깅 • gdb, lldb, 자기가 원하는거 쓰면 됨 • LLVM
기반이다보니 Xcode로도 디버그할 수 있음
“Rust Once, Run Everywhere” 크로스 플랫폼
빠르다 안전하다 쉽다 Fast Safe Easy
빠르다 안전하다 쉽다 Fast Safe Easy 5월 15일 Rust 1.0.0
이 출시될 예정
좋은 커뮤니티 • 레딧, IRC, 자체 포럼 • #rust, #rust-gamedev,
#rust-webdev, #servo, ...
rust-kr.org • 한달에 한번씩 모여서 코딩모임을 함 • 학교 밖에
계시는 좋은 분들을 많이 만날수 있는 안 흔한 기회!
제안: UPnL 여름 Rust 스터디 • 먼저 Rust에 대해 배우고,
각자, 혹은 같이 뭔가를 만들면서 진행하고자 함 • 기대효과 • 시프에 익숙해지면 C/C++ 익히는데에도 훨씬 도움 많이 될거에염 • 덜 잉여한 여름방학 • 새내기의 경우 선배들을 뜯어먹을 수 있음 • 필참자 • sgkim • apple • kinetic
내가 한것 • obj-rs Wavefront OBJ 3D 모델 파서
근황 • Rust + OpenGL로 3D 대전액션게임 만드는중 • 빠름
+ 크로스플랫폼 • sgkim이랑 같이하는중 • 관심있는 새내기는 연락하시오
Any Question? 김지현