- Chào mừng bạn đến với Comprehensive Rust
- 1. Hướng Dẫn Khóa Học
❱
- 1.1. Cấu Trúc Khóa Học
- 1.2. Phím Tắt
- 1.3. Bản Dịch
- 2. Sử Dụng Cargo
❱
- 2.1. Hệ Sinh Thái Rust
- 2.2. Code Mẫu
- 2.3. Chạy Cargo Trong Máy Của Bạn
- Ngày 1: Buổi Sáng
- 3. Lời Chào Mừng
- 4. Hello, World
❱
- 4.1. Rust là gì?
- 4.2. Lợi ích của việc sử dụng Rust
- 4.3. Sân chơi (Playground)
- 5. Kiểu Dữ Liệu Và Giá Trị
❱
- 5.1. Hello, World
- 5.2. Biến
- 5.3. Giá trị
- 5.4. Số Học
- 5.5. Suy Luận Kiểu
- 5.6. Thực Hành: Fibonacci
❱
- 5.6.1. Đáp Án
- 6. Control flow (Điểu khiển luồng) căn bản
❱
- 6.1. Lệnh if
- 6.2. Vòng lặp
❱
- 6.2.1. for
- 6.2.2. loop
- 6.3. break và continue
❱
- 6.3.1. Labels (nhãn)
- 6.4. Blocks và scopes
❱
- 6.4.1. Scopes và shadowing
- 6.5. Hàm
- 6.6. Macros
- 6.7. Thực hành: Chuỗi Collatz
❱
- 6.7.1. Đáp Án
- Ngày 1: Buổi chiều
- 7. Lời Chào Mừng
- 8. Bộ (Tuples) và mảng (Arrays)
❱
- 8.1. Mảng (Arrays)
- 8.2. Bộ (Tuples)
- 8.3. Duyệt mảng
- 8.4. Mẫu (Patterns) và giải cấu trúc (Destructuring)
- 8.5. Bài tập: Mảng lồng nhau
❱
- 8.5.1. Đáp Án
- 9. Tham chiếu (References)
❱
- 9.1. Tham chiếu chia sẻ (Shared References)
- 9.2. Tham chiếu độc quyền (Exclusive References)
- 9.3. Slices: &\[T\]
- 9.4. Chuỗi ký tự (Strings)
- 9.5. Bài tập: Hình học
❱
- 9.5.1. Đáp Án
- 10. Kiểu do người dùng định nghĩa
❱
- 10.1. Kiểu cấu trúc có tên (Named Structs)
- 10.2. Kiểu cấu trúc bộ (Tuple Structs)
- 10.3. Kiểu liệt kê (Enums)
- 10.4. Tĩnh (Static)
- 10.5. Hằng (Const)
- 10.6. Biệt danh kiểu (Type Aliases)
- 10.7. Bài tập: Sự kiện thang máy
❱
- 10.7.1. Đáp Án
- Ngày 2: Buổi sáng
- 11. Lời Chào Mừng
- 12. Khớp mẫu (Pattern Matching)
❱
- 12.1. Khớp giá trị
- 12.2. Destructuring Structs
- 12.3. Destructuring Enums
- 12.4. Luồng điều khiển let
- 12.5. Bài tập: Đánh giá biểu thức (Expression Evaluation)
❱
- 12.5.1. Đáp Án
- 13. Phương thức (Methods) và đặc điểm (Traits)
❱
- 13.1. Phương thức (Methods)
- 13.2. Đặc điểm (Traits)
❱
- 13.2.1. Implementing Traits
- 13.2.2. Siêu đặc điểm (Supertraits)
- 13.2.3. Kiểu liên kết (Associated Types)
- 13.3. Dẫn xuất (Deriving) từ các đặc điểm (Traits)
- 13.4. Bài tập: Bộ ghi log tổng quát (Generic Logger)
❱
- 13.4.1. Đáp Án
- Ngày 2: Buổi chiều
- 14. Lời Chào Mừng
- 15. Tổng quát (Generics)
❱
- 15.1. Hàm tổng quát (Generic Functions)
- 15.2. Kiểu dữ liệu tổng quát (Generic Data Types)
- 15.3. Đặc điểm tổng quát (Generic Traits)
- 15.4. Gắn với đặc điểm (Trait Bounds)
- 15.5. impl Trait
- 15.6. Bài tập: Hàm tổng quát min
❱
- 15.6.1. Đáp Án
- 16. Các kiểu trong thư viện chuẩn (Standard Library Types)
❱
- 16.1. Thư viện chuẩn
- 16.2. Tài liệu
- 16.3. Option
- 16.4. Result
- 16.5. String
- 16.6. Vec
- 16.7. HashMap
- 16.8. Bài tập: Bộ đếm
❱
- 16.8.1. Đáp Án
- 17. Các đặc điểm trong thư viện chuẩn (Standard Library Traits)
❱
- 17.1. Hỗ trợ so sánh
- 17.2. Nạp chồng toán tử (Operator Overloading)
- 17.3. From và Into
- 17.4. Ép kiểu (Casting)
- 17.5. Read và Write
- 17.6. Default, cú pháp cập nhật kiểu cấu trúc
- 17.7. Bao đóng (Closures)
- 17.8. Bài tập: Mật mã ROT13
❱
- 17.8.1. Đáp Án
- Ngày 3: Buổi sáng
- 18. Lời Chào Mừng
- 19. Quản lý bộ nhớ
❱
- 19.1. Xem xét về bộ nhớ chương trình
- 19.2. Những cách tiếp cận quản lý bộ nhớ
- 19.3. Quyền sở hữu (Ownership)
- 19.4. Ngữ nghĩa chuyển dịch (Move Semantics)
- 19.5. Clone
- 19.6. Sao chép kiểu
- 19.7. Drop
- 19.8. Bài tập: Kiểu Builder
❱
- 19.8.1. Đáp Án
- 20. Con trỏ thông minh (Smart Pointers)
❱
- 20.1. Box<T>
- 20.2. Rc
- 20.3. Đối tượng đặc điểm (Trait Objects)
- 20.4. Bài tập: Cây nhị phân
❱
- 20.4.1. Đáp Án
- Ngày 3: Buổi chiều
- 21. Lời Chào Mừng
- 22. Mượn (Borrowing)
❱
- 22.1. Mượn một giá trị
- 22.2. Kiểm tra mượn (Borrow Checking)
- 22.3. Borrow Errors
- 22.4. Tính khả biến nội tại (Interior Mutability)
- 22.5. Bài tập: Thống kê sức khỏe
❱
- 22.5.1. Đáp Án
- 23. Vòng đời (Lifetimes)
❱
- 23.1. Chú thích vòng đời (Lifetime Annotations)
- 23.2. Sự lược bỏ vòng đời (Lifetime Elision)
- 23.3. Vòng đời kiểu cấu trúc (Struct Lifetimes)
- 23.4. Bài tập: Phân tích cú pháp Protobuf (Protobuf Parsing)
❱
- 23.4.1. Đáp Án
- Ngày 4: Buổi sáng
- 24. Lời Chào Mừng
- 25. Trình lặp (Iterators)
❱
- 25.1. Iterator
- 25.2. IntoIterator
- 25.3. FromIterator
- 25.4. Bài tập: Chuỗi phương thức trình lặp (Iterator Method Chaining)
❱
- 25.4.1. Đáp Án
- 26. Modules
❱
- 26.1. Modules
- 26.2. Thứ bậc hệ thống tập tin
- 26.3. Phạm vi truy cập (Visibility)
- 26.4. use, super, self
- 26.5. Bài tập: Modules cho thư viện giao diện đồ họa (GUI Library)
❱
- 26.5.1. Đáp Án
- 27. Kiểm thử
❱
- 27.1. Modules kiểm thử
- 27.2. Các loại kiểm thử khác
- 27.3. Các lỗi biên dịch và Clippy
- 27.4. Bài tập: Thuật toán Luhn
❱
- 27.4.1. Đáp Án
- Ngày 4: Buổi chiều
- 28. Lời Chào Mừng
- 29. Xử lý lỗi
❱
- 29.1. Sự sợ hãi (Panics)
- 29.2. Toán tử thử nghiệm (Try Operator)
- 29.3. Chuyển đổi thử nghiệm (Try Conversions)
- 29.4. Đặc điểm Error (Error Trait)
- 29.5. thiserror và anyhow
- 29.6. Bài tập: Viết lại với Result
❱
- 29.6.1. Đáp Án
- 30. Rust "không an toàn" (Unsafe Rust)
❱
- 30.1. Không an toàn (Unsafe)
- 30.2. Giải tham chiếu con trỏ thô (Dereferencing Raw Pointers)
- 30.3. Biến tĩnh khả biến (Mutable Static Variables)
- 30.4. Kiểu Union
- 30.5. Hàm "không an toàn" (Unsafe Functions)
- 30.6. Đặc điểm "không an toàn" (Unsafe Traits)
- 30.7. Bài tập: Lớp bọc FFI (FFI Wrapper)
❱
- 30.7.1. Đáp Án
- Android
- 31. Lời Chào Mừng
- 32. Cài đặt
- 33. Luật xây dựng (Build Rules)
❱
- 33.1. Tệp nhị phân (Binary)
- 33.2. Thư viện (Library)
- 34. AIDL
❱
- 34.1. Hướng dẫn: Dịch vụ sinh nhật
❱
- 34.1.1. Giao diện (Interface)
- 34.1.2. API dịch vụ (Service API)
- 34.1.3. Dịch vụ (Service)
- 34.1.4. Máy chủ (Server)
- 34.1.5. Triển khai (Deploy)
- 34.1.6. Máy khách (Client)
- 34.1.7. Thay đổi API
- 34.1.8. Cập nhật cài đặt (Updating Implementations)
- 34.2. Các kiểu trong AIDL (AIDL Types)
❱
- 34.2.1. Kiểu nguyên thủy (Primitive Types)
- 34.2.2. Kiểu mảng (Array Types)
- 34.2.3. Gửi đối tượng (Sending Objects)
- 34.2.4. Parcelables
- 34.2.5. Gửi tệp
- 35. Kiểm thử
❱
- 35.1. GoogleTest
- 35.2. Kỹ thuật tạo đối tượng giả (Mocking)
- 36. Ghi log (Logging)
- 37. Tính tương thích với các ngôn ngữ khác (Interoperability)
❱
- 37.1. Với ngôn ngữ C
❱
- 37.1.1. Gọi C với Bindgen
- 37.1.2. Gọi Rust từ C
- 37.2. Với ngôn ngữ C++
❱
- 37.2.1. Module cầu nối (The Bridge Module)
- 37.2.2. Cầu nối Rust (Rust Bridge)
- 37.2.3. Sinh code C++ (Generated C++)
- 37.2.4. Cầu nối C++ (C++ Bridge)
- 37.2.5. Các kiểu chung (Shared Types)
- 37.2.6. Các kiểu liệt kê chung (Shared Enums)
- 37.2.7. Xử lý lỗi trong Rust
- 37.2.8. Xử lý lỗi trong C++
- 37.2.9. Các kiểu bổ sung
- 37.2.10. Xây dựng cho Android: C++
- 37.2.11. Xây dựng cho Android: Genrules
- 37.2.12. Xây dựng cho Android: Rust
- 37.3. Với ngôn ngữ Java
- 38. Bài tập
- Chromium
- 39. Lời Chào Mừng
- 40. Cài đặt
- 41. So sánh hệ sinh thái Chromium và Cargo
- 42. Chính sách
- 43. Luật xây dựng (Build Rules)
❱
- 43.1. Code "không an toàn" (Unsafe Code)
- 43.2. Phụ thuộc vào code Rust từ Chromium C++
- 43.3. Visual Studio Code
- 43.4. Bài tập
- 44. Kiểm thử
❱
- 44.1. Thư viện rust_gtest_interop
- 44.2. Luật GN cho các bài kiểm thử Rust
- 44.3. Macro chromium::import!
- 44.4. Bài tập
- 45. Khả năng tương thích với C++ (Interoperability with C++)
❱
- 45.1. Kết nối ví dụ (Example Bindings)
- 45.2. Giới hạn của CXX
- 45.3. Xử lý lỗi trong CXX
❱
- 45.3.1. Xử lý lỗi: Ví dụ QR
- 45.3.2. Xử lý lỗi: Ví dụ PNG
- 45.4. Sử dụng CXX trong Chromium
- 45.5. Bài tập
- 46. Thêm các bộ thư viện của bên thứ ba (Adding Third Party Crates)
❱
- 46.1. Tùy chỉnh Cargo.toml
- 46.2. Tùy chỉnh gnrt_config.toml
- 46.3. Tải về các bộ thư viện (Downloading Crates)
- 46.4. Tạo ra luật xây dựng gn (Generating gn Build Rules)
- 46.5. Xử lý vấn đề
❱
- 46.5.1. Scripts xây dựng tạo ra code (Build Scripts Which Generate Code)
- 46.5.2. Scripts xây dựng ra C++ hoặc thực hiện các hành động tùy ý (Build Scripts Which Build C++ or Take Arbitrary Actions)
- 46.6. Phụ thuộc vào một bộ thư viện (Depending on a Crate)
- 46.7. Xem xét và kiểm tra (Reviews and Audits)
- 46.8. Kiểm tra vào mã nguồn Chromium (Checking into Chromium Source Code)
- 46.9. Giữ các bộ thư viện được cập nhật (Keeping Crates Up to Date)
- 46.10. Bài tập
- 47. Ghép tất cả lại - Bài tập
- 48. Lời giải bài tập
- Bare Metal: Morning
- 49. Lời Chào Mừng
- 50. no_std
❱
- 50.1. A Minimal Example
- 50.2. alloc
- 51. Microcontrollers
❱
- 51.1. Raw MMIO
- 51.2. PACs
- 51.3. HAL Crates
- 51.4. Board Support Crates
- 51.5. The Type State Pattern
- 51.6. embedded-hal
- 51.7. probe-rs and cargo-embed
❱
- 51.7.1. Debugging
- 51.8. Other Projects
- 52. Bài tập
❱
- 52.1. Compass
- 52.2. Solutions
- Bare Metal: Afternoon
- 53. Application Processors
❱
- 53.1. Getting Ready to Rust
- 53.2. Inline Assembly
- 53.3. MMIO
- 53.4. Let's Write a UART Driver
❱
- 53.4.1. More Traits
- 53.5. A Better UART Driver
❱
- 53.5.1. Bitflags
- 53.5.2. Multiple Registers
- 53.5.3. Driver
- 53.5.4. Using It
- 53.6. Ghi log (Logging)
❱
- 53.6.1. Using It
- 53.7. Exceptions
- 53.8. Other Projects
- 54. Useful Crates
❱
- 54.1. zerocopy
- 54.2. aarch64-paging
- 54.3. buddy_system_allocator
- 54.4. tinyvec
- 54.5. spin
- 55. Android
❱
- 55.1. vmbase
- 56. Bài tập
❱
- 56.1. RTC Driver
- 56.2. Solutions
- Concurrency: Morning
- 57. Lời Chào Mừng
- 58. Threads
❱
- 58.1. Plain Threads
- 58.2. Scoped Threads
- 59. Channels
❱
- 59.1. Senders and Receivers
- 59.2. Unbounded Channels
- 59.3. Bounded Channels
- 60. Send and Sync
❱
- 60.1. Marker Traits
- 60.2. Send
- 60.3. Sync
- 60.4. Examples
- 61. Shared State
❱
- 61.1. Arc
- 61.2. Mutex
- 61.3. Example
- 62. Bài tập
❱
- 62.1. Dining Philosophers
- 62.2. Multi-threaded Link Checker
- 62.3. Solutions
- Concurrency: Afternoon
- 63. Lời Chào Mừng
- 64. Async Basics
❱
- 64.1. async/await
- 64.2. Futures
- 64.3. Runtimes
❱
- 64.3.1. Tokio
- 64.4. Tasks
- 65. Channels and Control Flow
❱
- 65.1. Async Channels
- 65.2. Join
- 65.3. Select
- 66. Pitfalls
❱
- 66.1. Blocking the Executor
- 66.2. Pin
- 66.3. Async Traits
- 66.4. Cancellation
- 67. Bài tập
❱
- 67.1. Dining Philosophers
- 67.2. Broadcast Chat Application
- 67.3. Solutions
- Final Words
- 68. Thanks!
- 69. Chú giải thuật ngữ
- 70. Other Resources
- 71. Credits