- 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. 배열 반복
- 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. Option
- 16.4. Option, Result
- 16.5. String
- 16.6. Vec
- 16.7. HashMap
- 16.8. 연습문제: 카운터
❱
- 16.8.1. 해답
- 17. 표준 라이브러리
❱
- 17.1. 비교
- 17.2. 연산자
- 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. 도와주신 분들