Comprehensive Rust에 오신 것을 환영합니다 🦀
1.
강의 진행
❱
1.1.
강의 구성
1.2.
단축키
1.3.
다른 언어들
2.
카고 사용하기
❱
2.1.
러스트 생태계
2.2.
코드 샘플
2.3.
카고(Cargo) 수행하기
1일차 오전
3.
개요
4.
Hello World!
❱
4.1.
러스트란?
4.2.
Rust의 이점
4.3.
플레이그라운드
5.
타입 및 값
❱
5.1.
Hello World!
5.2.
변수
5.3.
값
5.4.
연산
5.5.
문자열
5.6.
타입 추론
5.7.
연습문제: 피보나치
❱
5.7.1.
해답
6.
흐름 제어
❱
6.1.
if 표현식
6.2.
배열과 for 반복문
❱
6.2.1.
배열과 for 반복문
6.2.2.
loop
6.3.
break와 continue
❱
6.3.1.
Labels
6.4.
블록 및 범위
❱
6.4.1.
범위(Scopes)와 쉐도잉(Shadowing)
6.5.
함수
6.6.
매크로
6.7.
연습문제: 콜라츠 수열
❱
6.7.1.
해답
1일차 오후
7.
개요
8.
튜플 및 배열
❱
8.1.
배열
8.2.
튜플
8.3.
Cargo에 통합됨
8.4.
열거형 분해(역구조화)
8.5.
연습문제: 중첩 배열
❱
8.5.1.
해답
9.
참조
❱
9.1.
공유 참조
9.2.
허상(dangling) 참조
9.3.
연습문제: 도형
❱
9.3.1.
해답
10.
사용자 정의 타입
❱
10.1.
구조체
10.2.
튜플
10.3.
열거형
10.4.
정적변수(static)와 상수(const)
10.5.
타입 별칭
10.6.
연습문제: 엘리베이터 이벤트
❱
10.6.1.
해답
2일차 오전
11.
개요
12.
패턴 매칭
❱
12.1.
Matching Values
12.2.
열거형 분해(역구조화)
12.3.
흐름 제어
12.4.
연습문제: 표현식 평가
❱
12.4.1.
해답
13.
메소드와 트레이트
❱
13.1.
메서드
13.2.
트레잇(Trait)
❱
13.2.1.
안전하지 않은 트레잇 구현하기
13.2.2.
트레잇(Trait)
13.2.3.
공유 타입
13.3.
트레잇 상속하기
13.4.
연습문제: 일반 min
❱
13.4.1.
해답
14.
제네릭
❱
14.1.
외부(다른언어) 함수들
14.2.
제네릭 데이터 타입
14.3.
제네릭
14.4.
제네릭 타입 제한(트레잇 경계)
14.5.
트레잇 구현하기(impl Trait)
14.6.
연습문제: 일반 min
❱
14.6.1.
해답
2일차 오후
15.
개요
16.
표준 라이브러리
❱
16.1.
표준 라이브러리
16.2.
문서화주석 테스트
16.3.
Duration
16.4.
Option, Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
연습문제: 카운터
❱
16.8.1.
해답
17.
표준 라이브러리
❱
17.1.
비교
17.2.
Iterators
17.3.
From과 Into
17.4.
테스트
17.5.
Read와 Write
17.6.
Default, 구조체 업데이트 문법
17.7.
클로저(Closure)
17.8.
연습문제: 바이너리 트리
❱
17.8.1.
해답
3일차 오전
18.
개요
19.
메모리 관리
❱
19.1.
프로그램 메모리 검토
19.2.
자동 메모리 관리
19.3.
소유권
19.4.
Move 문법
19.5.
Clone
19.6.
복합 타입
19.7.
Drop
19.8.
연습문제: 빌드 타입
❱
19.8.1.
해답
20.
스마트 포인터
❱
20.1.
Box
20.2.
Rc
20.3.
트레잇 객체
20.4.
연습문제: 바이너리 트리
❱
20.4.1.
해답
3일차 오후
21.
개요
22.
빌림
❱
22.1.
빌림
22.2.
빌림
22.3.
상호운용성
22.4.
연습문제: 엘리베이터 이벤트
❱
22.4.1.
해답
23.
수명
❱
23.1.
Slices: &\[T\]
23.2.
허상(dangling) 참조
23.3.
함수 호출에서의 수명
23.4.
수명
23.5.
수명
23.6.
연습문제: Protobuf 파싱
❱
23.6.1.
해답
1일차 오전
24.
개요
25.
Iterators
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
연습문제: 반복자 메서드 체이닝
❱
25.4.1.
해답
26.
모듈
❱
26.1.
모듈
26.2.
파일시스템 계층
26.3.
가시성
26.4.
use, super, self
26.5.
연습문제: GUI 라이브러리 모듈
❱
26.5.1.
해답
27.
테스트
❱
27.1.
테스트 모듈
27.2.
다른 프로젝트
27.3.
컴파일러 린트 및 Clippy
27.4.
룬 알고리즘
❱
27.4.1.
해답
1일차 오후
28.
개요
29.
오류처리
❱
29.1.
패닉
29.2.
Iterator
29.3.
묵시적 형변환
29.4.
Error
29.5.
From과 Into
29.6.
Result를 이용한 구조화된 오류처리
❱
29.6.1.
해답
30.
안전하지 않은 러스트
❱
30.1.
안전하지 않은 러스트
30.2.
원시 포인터 역참조(따라가기)
30.3.
정적 가변 변수
30.4.
Unions
30.5.
안전하지 않은 함수 호출
30.6.
안전하지 않은 트레잇 구현하기
30.7.
연습문제: FFI 래퍼(wrapper)
❱
30.7.1.
해답
안드로이드
31.
개요
32.
설치
33.
빌드 규칙
❱
33.1.
바이너리
33.2.
라이브러리
34.
AIDL
❱
34.1.
/\*\* 생일 서비스 인터페이스입니다. \*/
❱
34.1.1.
AIDL 인터페이스
34.1.2.
Service API
34.1.3.
AIDL 서버
34.1.4.
AIDL 서버
34.1.5.
배포
34.1.6.
클라이언트
34.1.7.
API 수정
34.1.8.
서비스 구현
34.2.
타입
❱
34.2.1.
Primitive Types
34.2.2.
배열
34.2.3.
트레잇 객체
34.2.4.
변수
34.2.5.
Sending Files
35.
테스트
❱
35.1.
GoogleTest
35.2.
모의 처리
36.
로깅
37.
상호운용성
❱
37.1.
C와의 상호운용성
❱
37.1.1.
Bindgen을 사용한 C호출
37.1.2.
C에서 러스트 호출
37.2.
C++와의 상호운용성
❱
37.2.1.
테스트 모듈
37.2.2.
Rust 브리지
37.2.3.
생성된 C++
37.2.4.
C++ 브리지
37.2.5.
공유 타입
37.2.6.
공유 Enum
37.2.7.
오류처리
37.2.8.
오류처리
37.2.9.
추가 타입
37.2.10.
Android용 빌드: C++
37.2.11.
Android용 빌드: Genrules
37.2.12.
Android용 빌드: Rust
37.3.
Java와의 상호운용성
38.
연습문제
Chromium
39.
개요
40.
설치
41.
Chromium 및 Cargo 생태계 비교
42.
정책
43.
빌드 규칙
❱
43.1.
안전하지 않은 러스트
43.2.
Chromium C++의 Rust 코드에 의존
43.3.
Visual Studio Code
43.4.
연습문제
44.
테스트
❱
44.1.
rust_gtest_interop Library
44.2.
GN Rules for Rust Tests
44.3.
chromium::import! Macro
44.4.
연습문제
45.
C와의 상호운용성
❱
45.1.
예제
45.2.
CXX 제한사항
45.3.
오류처리
❱
45.3.1.
오류처리
45.3.2.
오류처리
45.4.
Chromium에서 CXX 사용
45.5.
연습문제
46.
서드 파티 크레이트 추가
❱
46.1.
Cargo.toml 구성
46.2.
gnrt_config.toml 구성
46.3.
크레이트 다운로드
46.4.
gn 빌드 규칙 생성
46.5.
문제 해결
❱
46.5.1.
코드를 생성하는 스크립트 빌드
46.5.2.
C++를 빌드하거나 임의의 작업을 실행하는 스크립트 빌드
46.6.
크레이트에 따라 다름
46.7.
검토 및 분석
46.8.
Chromium 소스 코드에 체크인
46.9.
크레이트를 최신 상태로 유지
46.10.
연습문제
47.
총정리 - 연습문제
48.
연습문제 해답
Bare Metal 오전
49.
개요
50.
no_std
❱
50.1.
작은 예제
50.2.
alloc
51.
마이크로컨트롤러
❱
51.1.
원시 MMIO
51.2.
PAC
51.3.
HAL 크레이트
51.4.
보드 지원 크레이트
51.5.
Type State 패턴
51.6.
embedded-hal
51.7.
probe-rs, cargo-embed
❱
51.7.1.
디버깅
51.8.
다른 프로젝트
52.
연습문제
❱
52.1.
나침반
52.2.
해답
Bare Metal 오후
53.
애플리케이션 프로세서
❱
53.1.
Rust 수행 준비
53.2.
인라인 어셈블리
53.3.
MMIO
53.4.
UART 드라이버 작성
❱
53.4.1.
더 많은 트레잇
53.5.
더 나은 UART 드라이버
❱
53.5.1.
비트플래그
53.5.2.
더 많은 레지스터
53.5.3.
드라이버
53.5.4.
사용해 보기
53.6.
로깅
❱
53.6.1.
사용해 보기
53.7.
예외
53.8.
다른 프로젝트
54.
유용한 크레이트
❱
54.1.
zerocopy
54.2.
aarch64-paging
54.3.
buddy_system_allocator
54.4.
tinyvec
54.5.
회전
55.
안드로이드
❱
55.1.
vmbase
56.
연습문제
❱
56.1.
RTC 드라이버
56.2.
해답
동시성 오전
57.
개요
58.
스레드
❱
58.1.
범위 스레드(Scoped Threads)
59.
채널
❱
59.1.
무경계 채널
59.2.
경계 채널
60.
Send와 Sync
❱
60.1.
Send
60.2.
Sync
60.3.
예제
61.
상태 공유
❱
61.1.
Arc
61.2.
Mutex
61.3.
예제
62.
연습문제
❱
62.1.
식사하는 철학자들
62.2.
멀티스레드 링크 검사기
62.3.
해답
동시성 오후
63.
비동기 관련 기본사항
❱
63.1.
async/await
63.2.
Future
63.3.
비동기 런타임들
❱
63.3.1.
Tokio
63.4.
태스크
63.5.
비동기 채널
64.
흐름 제어
❱
64.1.
Join
64.2.
Select
65.
함정
❱
65.1.
Executor 블로킹 하기
65.2.
Pin
65.3.
비동기 트레잇
65.4.
취소
66.
연습문제
❱
66.1.
식사하는 철학자들
66.2.
채팅 애플리케이션
66.3.
해답
끝으로...
67.
감사인사
68.
용어집
69.
러스트 참고 자료
70.
도와주신 분들
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Japanese (日本語)
Korean (한국어)
Farsi (فارسی)
Spanish (Español)
Ukrainian (українська)
연습문제 해답
Solutions to the Chromium exercises can be found in
this series of CLs
.