SlideShare a Scribd company logo
1 of 47
Download to read offline
Rust 프로그래밍 언어
서상현
NAVER LABS
목차
1. Rust 소개
2. 메모리 안전성
3. 쓰레드 안전성
4. 성공적?
1.
Rust 소개
1.1 Rust 소개
Mozilla Research에서 개발
2012년 0.1 릴리즈
2015년 1.0 릴리즈
1.2 목표
웹 브라우저 개발
요구사항: 성능
요구사항: 보안
1.2 목표
C++처럼: 오버헤드 없는 추상화
C++처럼: GC 없는 메모리 관리
C++과 달리: 메모리 안전성
C++과 달리: 쓰레드 안전성
1.3 성능
fn sum_pos(v: &[i32]) -> i32 {
v.iter()
.filter(|i| **i > 0)
.map(|i| *i)
.sum()
}
1.3 성능
fn sum_pos(v: &[i32]) -> i32 {
let mut sum = 0;
for i in v {
if *i > 0 {
sum += *i;
}
}
sum
}
2.
메모리 안전성
2.1 쉬운 문제
초기화되지 않은 메모리
널 포인터
배열 인덱스
2.2 초기화되지 않은 메모리
사용할 수 없습니다
컴파일러가 검사합니다
2.2 초기화되지 않은 메모리 (C++)
struct Point {
int x;
int y;
};
int main() {
Point p;
cout << p.x << “ ” << p.y << endl;
}
2.2 초기화되지 않은 메모리
struct Point {
x: i32,
y: i32,
}
fn main() {
let p: Point;
println!(“{} {}”, p.x, p.y);
}
error: use of possibly uninitialized
variable: ‘p.x’
2.2 초기화되지 않은 메모리
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 1, y: 2 };
println!(“{} {}”, p.x, p.y);
}
2.3 널 포인터
없습니다
T* 대신 Option<&T>
&T와는 다른 타입
Option은 역참조할 수 없음
2.3 널 포인터 (C++)
int main() {
int* p = nullptr;
cout << *p << endl;
}
2.3 널 포인터
fn main() {
let o = Option<&i32> = None;
if let Some(p) = o {
println!(“{}”, *p);
}
}
2.3 널 포인터
fn main() {
let i = 1;
let o = Option<&i32> = Some(&i);
if let Some(p) = o {
println!(“{}”, *p);
}
}
2.4 배열 인덱스
검사합니다
T[N] 대신 [T; N]
T[] 대신 &[T]
&[T]는 (data, len)
&T와는 다른 타입
&T는 인덱스할 수 없음
2.4 배열 인덱스 (C++)
int main() {
int p[3] = {1, 2, 3};
cout << p[3] << endl;
}
2.4 배열 인덱스
fn main() {
let p: [i32; 3] = [1, 2, 3];
println!(“{}”, p[3]);
}
index out of bounds: the len is 3 but the index is 3
2.4 배열 인덱스
fn main() {
let p: &[i32] = &[1, 2, 3];
println!(“{}”, p[3]);
}
index out of bounds: the len is 3 but the index is 3
2.5 어려운 문제
메모리 관리
무효화
2.6 메모리 관리
메모리에는 유일한 소유권이 있습니다
소유권은 메모리를 해제할 권리입니다
소유권은 이름에 속합니다
소유권은 이전할 수 있습니다
2.6 메모리 관리
fn main() {
let s = String::from(“DEVIEW”);
println!(“{}”, s);
}
s의 수명
2.6 메모리 관리
fn main() {
let s = String::from(“DEVIEW”);
let t = s;
println!(“{}”, t);
}
s의 수명
t의 수명 (s에서 이전)
2.6 메모리 관리
참조를 써서 메모리를 빌려 갈 수 있습니다
&T: 읽기 참조 (접근 가능)
&mut T: 쓰기 참조 (접근, 변경 가능)
T: 소유권 (접근, 변경, 해제 가능)
2.6 메모리 관리
fn main() {
let s = String::from(“DEVIEW”);
let t = &s;
println!(“{}”, s, *t);
}
s의 수명
t의 수명 (s의 참조)
2.6 메모리 관리
메모리를 빌려간 참조가 있는 동안은 해제할 수 없습니다
소유권자의 수명이 다하기 전에 갚아야 합니다
2.6 메모리 관리
fn print(it: String) {
println!(“{}”, it);
}
fn main() {
let s = String::from(“DEVIEW”);
let t = &s;
print(s);
}
s의 수명
t의 수명 (s의 참조)
it의 수명
2.6 메모리 관리
error: cannot move out of ‘s’ because it is borrowed
8 print(s);
note: borrow of ‘s’ occurs here
7 let t = &s;
2.6 메모리 관리
fn print(it: &String) {
println!(“{}”, *it);
}
fn main() {
let s = String::from(“DEVIEW”);
print(&s);
println!(“{}”, s);
}
s의 수명
it의 수명 (s의 참조)
2.7 무효화
메모리를 빌려간 참조가 있는 동안은 변경할 수 없습니다
컴파일러가 참조의 수명을 추적합니다
2.7 무효화 (C++)
int main() {
map<string, string> m;
m[“kr”] = “Korea”;
auto item = m.find(“kr”); // m의 내부를 참조
m.clear(); // 변경으로 참조가 무효화
if (item != m.end()) {
cout << item->first << “ = ” << item->second << endl;
}
}
2.7 무효화
fn main() {
let mut m = HashMap::new();
m.insert(“kr”, “Korea”);
let k = “kr”;
let o = m.get(&k);
m.clear();
if let Some(v) = o {
println!(“{} = {}”, k, *v);
}
}
o의 수명 = m의 내부 참조 수명
m의 변경
2.7 무효화
error: cannot borrow ‘m’ as mutable because it is also borrowed
as immutable
8 m.clear();
note: previous borrow of ‘m’ occurs here; the immutable borrow
prevents subsequent moves or mutable borrows of ‘m’ until the
borrow ends
7 let o = m.get(&k);
2.7 무효화
fn get<’a, ’b>(&’a self, k: &’b K) -> Option<&’a V>
get의 반환값은 k가 아니라 self를 참조한다고 선언합니다
다시 쓰이지 않는 선언은 생략할 수 있습니다
fn get<’a>(&’a self, k: &K) -> Option<&’a V>
2.7 무효화
fn main() {
let mut m = HashMap::new();
m.insert(“kr”, “Korea”);
let k = “kr”;
m.get(&k);
m.clear();
}
임시 = m의 내부 참조 수명
m의 변경
3.
쓰레드 안전성
3.1 메모리 안전성과 쓰레드 안전성
다른 참조가 있는데 메모리를 해제하면 버그
다른 참조가 있는데 메모리를 변경하면 버그 (무효화)
(다른 쓰레드에) 다른 참조가 있는데
(동기화 없이) 메모리를 변경하면 버그 (data race)
3.2 잘못 사용할 수 없는 인터페이스
impl<T> Mutex<T> {
fn lock(&self) -> &mut T { ... }
}
여러 쓰레드에서 변경 가능한 데이터
하지만 변경 가능한 참조를 얻으려면 반드시 동기화를 거쳐야 함
내부를 구현할때는 컴파일러 검사를 잠시 중단 (unsafe)
외부에서 사용할때는 컴파일러가 검사
3.2 잘못 사용할 수 없는 인터페이스
impl<T> RwLock<T> {
fn read(&self) -> &T { ... }
fn write(&self) -> &mut T { ... }
}
4.
성공적?
4.1 성공적?
C++ 노멀 모드 (하드 모드가 아닙니다)
경험적으로: C++만큼 빠릅니다
경험적으로: 확실히 덜 죽습니다
누구나 할 수 있는 시스템 프로그래밍
4.2 미래
이번 주에 1.3 릴리즈 (9월 18일)
6주마다 릴리즈
하위호환성
rust-kr.org: 한국 러스트 사용자 그룹
Q&A
Thank You

More Related Content

What's hot

Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPKristen Le Liboux
 
프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구Taegon Kim
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03Changyol BAEK
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code SmellsMario Sangiorgio
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018Kenneth Ceyer
 
LLVM Backend の紹介
LLVM Backend の紹介LLVM Backend の紹介
LLVM Backend の紹介Akira Maruoka
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
Modificateurs d'accès en java
Modificateurs d'accès en javaModificateurs d'accès en java
Modificateurs d'accès en javaMohamed Bah
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유knight1128
 

What's hot (20)

Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Rust vs C++
Rust vs C++Rust vs C++
Rust vs C++
 
Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHP
 
Support distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcastSupport distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcast
 
프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구프론트엔드 코딩 컨벤션 자동화 도구
프론트엔드 코딩 컨벤션 자동화 도구
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
 
LLVM Backend の紹介
LLVM Backend の紹介LLVM Backend の紹介
LLVM Backend の紹介
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
Modificateurs d'accès en java
Modificateurs d'accès en javaModificateurs d'accès en java
Modificateurs d'accès en java
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
 
Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
Hibernate jpa
Hibernate jpaHibernate jpa
Hibernate jpa
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 

Viewers also liked

[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍NAVER D2
 
[142] how riot works
[142] how riot works[142] how riot works
[142] how riot worksNAVER D2
 
[153] apache reef
[153] apache reef[153] apache reef
[153] apache reefNAVER D2
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기NAVER D2
 
[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법NAVER D2
 
[113] lessons from realm
[113] lessons from realm[113] lessons from realm
[113] lessons from realmNAVER D2
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearchNAVER D2
 
[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩NAVER D2
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까NAVER D2
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhereNAVER D2
 
[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기NAVER D2
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
[114] DRC hubo technical review
[114] DRC hubo technical review[114] DRC hubo technical review
[114] DRC hubo technical reviewNAVER D2
 
[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생NAVER D2
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
[122] line on apple watch
[122] line on apple watch[122] line on apple watch
[122] line on apple watchNAVER D2
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나NAVER D2
 
[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)NAVER D2
 
[134] immersive sound vr
[134] immersive sound vr[134] immersive sound vr
[134] immersive sound vrNAVER D2
 

Viewers also liked (20)

[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍
 
[142] how riot works
[142] how riot works[142] how riot works
[142] how riot works
 
[153] apache reef
[153] apache reef[153] apache reef
[153] apache reef
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기
 
[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법
 
[113] lessons from realm
[113] lessons from realm[113] lessons from realm
[113] lessons from realm
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch
 
[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhere
 
[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
[114] DRC hubo technical review
[114] DRC hubo technical review[114] DRC hubo technical review
[114] DRC hubo technical review
 
[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
[122] line on apple watch
[122] line on apple watch[122] line on apple watch
[122] line on apple watch
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나
 
[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)[154] 데이터 센터의 오픈 소스 open compute project (ocp)
[154] 데이터 센터의 오픈 소스 open compute project (ocp)
 
[134] immersive sound vr
[134] immersive sound vr[134] immersive sound vr
[134] immersive sound vr
 

Similar to [132] rust

이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019Kenneth Ceyer
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecaseKris Jeong
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...GangSeok Lee
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이GangSeok Lee
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptxYeongKiKim1
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014Gruter
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012Chanho Song
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째Jaeseok Park
 
국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1dldmsmchddldmschd
 
242 naver-2
242 naver-2242 naver-2
242 naver-2NAVER D2
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2Chris Ohk
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 

Similar to [132] rust (17)

이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
AI 연구자를 위한 클린코드 - GDG DevFest Seoul 2019
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecase
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
 
R 스터디 세번째
R 스터디 세번째R 스터디 세번째
R 스터디 세번째
 
국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1
 
242 naver-2
242 naver-2242 naver-2
242 naver-2
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

Recently uploaded

[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdfssuserf8b8bd1
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료Softwide Security
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료Softwide Security
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)Wonjun Hwang
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 

Recently uploaded (6)

[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 

[132] rust

  • 2. 목차 1. Rust 소개 2. 메모리 안전성 3. 쓰레드 안전성 4. 성공적?
  • 4. 1.1 Rust 소개 Mozilla Research에서 개발 2012년 0.1 릴리즈 2015년 1.0 릴리즈
  • 5. 1.2 목표 웹 브라우저 개발 요구사항: 성능 요구사항: 보안
  • 6. 1.2 목표 C++처럼: 오버헤드 없는 추상화 C++처럼: GC 없는 메모리 관리 C++과 달리: 메모리 안전성 C++과 달리: 쓰레드 안전성
  • 7. 1.3 성능 fn sum_pos(v: &[i32]) -> i32 { v.iter() .filter(|i| **i > 0) .map(|i| *i) .sum() }
  • 8. 1.3 성능 fn sum_pos(v: &[i32]) -> i32 { let mut sum = 0; for i in v { if *i > 0 { sum += *i; } } sum }
  • 10. 2.1 쉬운 문제 초기화되지 않은 메모리 널 포인터 배열 인덱스
  • 11. 2.2 초기화되지 않은 메모리 사용할 수 없습니다 컴파일러가 검사합니다
  • 12. 2.2 초기화되지 않은 메모리 (C++) struct Point { int x; int y; }; int main() { Point p; cout << p.x << “ ” << p.y << endl; }
  • 13. 2.2 초기화되지 않은 메모리 struct Point { x: i32, y: i32, } fn main() { let p: Point; println!(“{} {}”, p.x, p.y); } error: use of possibly uninitialized variable: ‘p.x’
  • 14. 2.2 초기화되지 않은 메모리 struct Point { x: i32, y: i32, } fn main() { let p = Point { x: 1, y: 2 }; println!(“{} {}”, p.x, p.y); }
  • 15. 2.3 널 포인터 없습니다 T* 대신 Option<&T> &T와는 다른 타입 Option은 역참조할 수 없음
  • 16. 2.3 널 포인터 (C++) int main() { int* p = nullptr; cout << *p << endl; }
  • 17. 2.3 널 포인터 fn main() { let o = Option<&i32> = None; if let Some(p) = o { println!(“{}”, *p); } }
  • 18. 2.3 널 포인터 fn main() { let i = 1; let o = Option<&i32> = Some(&i); if let Some(p) = o { println!(“{}”, *p); } }
  • 19. 2.4 배열 인덱스 검사합니다 T[N] 대신 [T; N] T[] 대신 &[T] &[T]는 (data, len) &T와는 다른 타입 &T는 인덱스할 수 없음
  • 20. 2.4 배열 인덱스 (C++) int main() { int p[3] = {1, 2, 3}; cout << p[3] << endl; }
  • 21. 2.4 배열 인덱스 fn main() { let p: [i32; 3] = [1, 2, 3]; println!(“{}”, p[3]); } index out of bounds: the len is 3 but the index is 3
  • 22. 2.4 배열 인덱스 fn main() { let p: &[i32] = &[1, 2, 3]; println!(“{}”, p[3]); } index out of bounds: the len is 3 but the index is 3
  • 23. 2.5 어려운 문제 메모리 관리 무효화
  • 24. 2.6 메모리 관리 메모리에는 유일한 소유권이 있습니다 소유권은 메모리를 해제할 권리입니다 소유권은 이름에 속합니다 소유권은 이전할 수 있습니다
  • 25. 2.6 메모리 관리 fn main() { let s = String::from(“DEVIEW”); println!(“{}”, s); } s의 수명
  • 26. 2.6 메모리 관리 fn main() { let s = String::from(“DEVIEW”); let t = s; println!(“{}”, t); } s의 수명 t의 수명 (s에서 이전)
  • 27. 2.6 메모리 관리 참조를 써서 메모리를 빌려 갈 수 있습니다 &T: 읽기 참조 (접근 가능) &mut T: 쓰기 참조 (접근, 변경 가능) T: 소유권 (접근, 변경, 해제 가능)
  • 28. 2.6 메모리 관리 fn main() { let s = String::from(“DEVIEW”); let t = &s; println!(“{}”, s, *t); } s의 수명 t의 수명 (s의 참조)
  • 29. 2.6 메모리 관리 메모리를 빌려간 참조가 있는 동안은 해제할 수 없습니다 소유권자의 수명이 다하기 전에 갚아야 합니다
  • 30. 2.6 메모리 관리 fn print(it: String) { println!(“{}”, it); } fn main() { let s = String::from(“DEVIEW”); let t = &s; print(s); } s의 수명 t의 수명 (s의 참조) it의 수명
  • 31. 2.6 메모리 관리 error: cannot move out of ‘s’ because it is borrowed 8 print(s); note: borrow of ‘s’ occurs here 7 let t = &s;
  • 32. 2.6 메모리 관리 fn print(it: &String) { println!(“{}”, *it); } fn main() { let s = String::from(“DEVIEW”); print(&s); println!(“{}”, s); } s의 수명 it의 수명 (s의 참조)
  • 33. 2.7 무효화 메모리를 빌려간 참조가 있는 동안은 변경할 수 없습니다 컴파일러가 참조의 수명을 추적합니다
  • 34. 2.7 무효화 (C++) int main() { map<string, string> m; m[“kr”] = “Korea”; auto item = m.find(“kr”); // m의 내부를 참조 m.clear(); // 변경으로 참조가 무효화 if (item != m.end()) { cout << item->first << “ = ” << item->second << endl; } }
  • 35. 2.7 무효화 fn main() { let mut m = HashMap::new(); m.insert(“kr”, “Korea”); let k = “kr”; let o = m.get(&k); m.clear(); if let Some(v) = o { println!(“{} = {}”, k, *v); } } o의 수명 = m의 내부 참조 수명 m의 변경
  • 36. 2.7 무효화 error: cannot borrow ‘m’ as mutable because it is also borrowed as immutable 8 m.clear(); note: previous borrow of ‘m’ occurs here; the immutable borrow prevents subsequent moves or mutable borrows of ‘m’ until the borrow ends 7 let o = m.get(&k);
  • 37. 2.7 무효화 fn get<’a, ’b>(&’a self, k: &’b K) -> Option<&’a V> get의 반환값은 k가 아니라 self를 참조한다고 선언합니다 다시 쓰이지 않는 선언은 생략할 수 있습니다 fn get<’a>(&’a self, k: &K) -> Option<&’a V>
  • 38. 2.7 무효화 fn main() { let mut m = HashMap::new(); m.insert(“kr”, “Korea”); let k = “kr”; m.get(&k); m.clear(); } 임시 = m의 내부 참조 수명 m의 변경
  • 40. 3.1 메모리 안전성과 쓰레드 안전성 다른 참조가 있는데 메모리를 해제하면 버그 다른 참조가 있는데 메모리를 변경하면 버그 (무효화) (다른 쓰레드에) 다른 참조가 있는데 (동기화 없이) 메모리를 변경하면 버그 (data race)
  • 41. 3.2 잘못 사용할 수 없는 인터페이스 impl<T> Mutex<T> { fn lock(&self) -> &mut T { ... } } 여러 쓰레드에서 변경 가능한 데이터 하지만 변경 가능한 참조를 얻으려면 반드시 동기화를 거쳐야 함 내부를 구현할때는 컴파일러 검사를 잠시 중단 (unsafe) 외부에서 사용할때는 컴파일러가 검사
  • 42. 3.2 잘못 사용할 수 없는 인터페이스 impl<T> RwLock<T> { fn read(&self) -> &T { ... } fn write(&self) -> &mut T { ... } }
  • 44. 4.1 성공적? C++ 노멀 모드 (하드 모드가 아닙니다) 경험적으로: C++만큼 빠릅니다 경험적으로: 확실히 덜 죽습니다 누구나 할 수 있는 시스템 프로그래밍
  • 45. 4.2 미래 이번 주에 1.3 릴리즈 (9월 18일) 6주마다 릴리즈 하위호환성 rust-kr.org: 한국 러스트 사용자 그룹
  • 46. Q&A