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
2k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Rust Programming Language
2015 spring, UPnL workshop.
Hyeon Kim
May 09, 2015
More Decks by Hyeon Kim
See All by Hyeon Kim
Adopting Rust to a club
simnalamburt
3
1.1k
Other Decks in Programming
See All in Programming
Cloudflare is Agents
chimame
0
160
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
190
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
110
FDEが実現するAI駆動経営の現在地
gonta
2
280
Google Apps Script で Ruby を動かす
kawahara
0
220
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
220
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
330
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
500
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
380
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
660
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.8k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
530
Building Applications with DynamoDB
mza
96
7.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Producing Creativity
orderedlist
PRO
348
40k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
Skip the Path - Find Your Career Trail
mkilby
1
180
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
470
Believing is Seeing
oripsolob
1
190
So, you think you're a good person
axbom
PRO
2
2.1k
A Tale of Four Properties
chriscoyier
163
24k
GitHub's CSS Performance
jonrohan
1033
470k
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? 김지현