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
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
940
ドメインイベント増えすぎ問題
h0r15h0
2
340
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
390
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
7
1.3k
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
260
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
450
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
6
1.2k
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
790
良いユニットテストを書こう
mototakatsu
8
2.6k
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
0
120
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
181
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
A Modern Web Designer's Workflow
chriscoyier
693
190k
A Tale of Four Properties
chriscoyier
157
23k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
GraphQLとの向き合い方2022年版
quramy
44
13k
Scaling GitHub
holman
458
140k
Statistics for Hackers
jakevdp
796
220k
Mobile First: as difficult as doing things right
swwweet
222
9k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
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? 김지현