mirror of
https://github.com/ArthurDanjou/rustlings.git
synced 2026-02-04 05:37:50 +01:00
Ajout du fichier README.md avec la documentation complète des exercices Rustlings
This commit is contained in:
351
README.md
Normal file
351
README.md
Normal file
@@ -0,0 +1,351 @@
|
|||||||
|
# Rustlings - Learn Rust the Fun Way! 🦀
|
||||||
|
|
||||||
|
A collection of small exercises to get you familiar with reading and writing Rust code. This is the completed solutions version where all 94 exercises have been solved.
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
- [Overview](#overview)
|
||||||
|
- [Exercise Categories](#exercise-categories)
|
||||||
|
- [Installation & Setup](#installation--setup)
|
||||||
|
- [Running Exercises](#running-exercises)
|
||||||
|
- [Project Structure](#project-structure)
|
||||||
|
- [Exercise Completion Status](#exercise-completion-status)
|
||||||
|
- [Learning Path](#learning-path)
|
||||||
|
- [Resources](#resources)
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Rustlings is a collection of small, bite-sized exercises designed to teach you the fundamentals of Rust. Each exercise focuses on a specific concept and provides a hands-on learning experience. This repository contains all 94 exercises fully solved, organized into 24 different topics.
|
||||||
|
|
||||||
|
The course progresses from the absolute basics (variables, functions) through intermediate concepts (ownership, traits, lifetimes) to advanced topics (smart pointers, macros, error handling).
|
||||||
|
|
||||||
|
## Exercise Categories
|
||||||
|
|
||||||
|
### Core Fundamentals (27 exercises)
|
||||||
|
|
||||||
|
| Topic | Exercises | Concepts |
|
||||||
|
|-------|-----------|----------|
|
||||||
|
| **00_intro** | 2 | Basic syntax, println! macro |
|
||||||
|
| **01_variables** | 6 | Variable declaration, mutability, shadowing, const |
|
||||||
|
| **02_functions** | 5 | Function definitions, parameters, return types |
|
||||||
|
| **03_if** | 3 | Conditional logic, if-else expressions |
|
||||||
|
| **04_primitive_types** | 6 | Booleans, characters, arrays, slices, tuples |
|
||||||
|
|
||||||
|
### Collections & Ownership (12 exercises)
|
||||||
|
|
||||||
|
| Topic | Exercises | Concepts |
|
||||||
|
|-------|-----------|----------|
|
||||||
|
| **05_vecs** | 2 | Vector creation, iteration, modification |
|
||||||
|
| **06_move_semantics** | 5 | Ownership, borrowing, references |
|
||||||
|
| **07_structs** | 3 | Struct definition, initialization, methods |
|
||||||
|
| **08_enums** | 3 | Enum variants, pattern matching |
|
||||||
|
|
||||||
|
### Strings & Collections (10 exercises)
|
||||||
|
|
||||||
|
| Topic | Exercises | Concepts |
|
||||||
|
|-------|-----------|----------|
|
||||||
|
| **09_strings** | 4 | String types, conversion, manipulation |
|
||||||
|
| **10_modules** | 3 | Module system, visibility, imports |
|
||||||
|
| **11_hashmaps** | 3 | HashMap operations, entry API |
|
||||||
|
|
||||||
|
### Type System & Traits (16 exercises)
|
||||||
|
|
||||||
|
| Topic | Exercises | Concepts |
|
||||||
|
|-------|-----------|----------|
|
||||||
|
| **12_options** | 3 | Option type, pattern matching |
|
||||||
|
| **13_error_handling** | 6 | Result type, error propagation, ? operator |
|
||||||
|
| **14_generics** | 2 | Generic type parameters |
|
||||||
|
| **15_traits** | 5 | Trait definition, implementation, objects |
|
||||||
|
|
||||||
|
### Advanced Concepts (22 exercises)
|
||||||
|
|
||||||
|
| Topic | Exercises | Concepts |
|
||||||
|
|-------|-----------|----------|
|
||||||
|
| **16_lifetimes** | 3 | Lifetime annotations, scope |
|
||||||
|
| **17_tests** | 3 | Writing and running tests |
|
||||||
|
| **18_iterators** | 5 | Iterator trait, adapters, consumers |
|
||||||
|
| **19_smart_pointers** | 4 | Box, Rc, Arc, Cow smart pointers |
|
||||||
|
| **20_threads** | 3 | Thread spawning, synchronization, channels |
|
||||||
|
| **21_macros** | 4 | Macro definition, visibility |
|
||||||
|
| **22_clippy** | 3 | Code linting, clippy recommendations |
|
||||||
|
|
||||||
|
### Conversions & Quizzes (8 exercises)
|
||||||
|
|
||||||
|
| Topic | Exercises | Concepts |
|
||||||
|
|-------|-----------|----------|
|
||||||
|
| **23_conversions** | 5 | From/Into, TryFrom, FromStr, AsRef/AsMut |
|
||||||
|
| **quizzes** | 3 | Comprehensive knowledge checks |
|
||||||
|
|
||||||
|
## Installation & Setup
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- **Rust 1.56+** (Latest stable recommended)
|
||||||
|
- **Cargo** (comes with Rust)
|
||||||
|
|
||||||
|
### Getting Started
|
||||||
|
|
||||||
|
1. **Clone or extract the repository**
|
||||||
|
```bash
|
||||||
|
cd rustlings
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Verify Rust installation**
|
||||||
|
```bash
|
||||||
|
rustc --version
|
||||||
|
cargo --version
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Check the Cargo configuration**
|
||||||
|
```bash
|
||||||
|
cat Cargo.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running Exercises
|
||||||
|
|
||||||
|
### Running All Tests
|
||||||
|
|
||||||
|
To verify all solutions are correct:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running Specific Exercise Tests
|
||||||
|
|
||||||
|
To test a specific topic:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test a specific category
|
||||||
|
cargo test --test 01_variables
|
||||||
|
|
||||||
|
# Test a specific exercise
|
||||||
|
cargo test variables1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Viewing Exercise Details
|
||||||
|
|
||||||
|
Each exercise directory contains:
|
||||||
|
- Individual `.rs` files with code
|
||||||
|
- `README.md` with instructions and hints
|
||||||
|
- Tests in the code to verify correctness
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View exercise instructions
|
||||||
|
cat exercises/01_variables/README.md
|
||||||
|
|
||||||
|
# Check a specific exercise file
|
||||||
|
cat exercises/01_variables/variables1.rs
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
rustlings/
|
||||||
|
├── Cargo.toml # Project manifest
|
||||||
|
├── rust-analyzer.toml # Rust analyzer configuration
|
||||||
|
├── README.md # This file
|
||||||
|
├── exercises/ # All exercise files
|
||||||
|
│ ├── 00_intro/ # Introduction exercises
|
||||||
|
│ ├── 01_variables/ # Variable exercises
|
||||||
|
│ ├── 02_functions/ # Function exercises
|
||||||
|
│ ├── ...
|
||||||
|
│ ├── 22_clippy/ # Code linting exercises
|
||||||
|
│ ├── 23_conversions/ # Type conversion exercises
|
||||||
|
│ └── quizzes/ # Comprehensive quizzes
|
||||||
|
├── solutions/ # Reference solutions
|
||||||
|
│ ├── 00_intro/
|
||||||
|
│ ├── 01_variables/
|
||||||
|
│ └── ...
|
||||||
|
└── target/ # Compiled artifacts (auto-generated)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exercise File Format
|
||||||
|
|
||||||
|
Each exercise file typically contains:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// Description of what to learn
|
||||||
|
// TODO: instructions for what to implement
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Your code here
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
// Tests that verify your solution
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exercise Completion Status
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
- **Total Exercises:** 94
|
||||||
|
- **Status:** ✅ All 100% Complete
|
||||||
|
|
||||||
|
### By Category
|
||||||
|
|
||||||
|
✅ **Intro** - 2/2
|
||||||
|
✅ **Variables** - 6/6
|
||||||
|
✅ **Functions** - 5/5
|
||||||
|
✅ **If Statements** - 3/3
|
||||||
|
✅ **Primitive Types** - 6/6
|
||||||
|
✅ **Vectors** - 2/2
|
||||||
|
✅ **Move Semantics** - 5/5
|
||||||
|
✅ **Structs** - 3/3
|
||||||
|
✅ **Enums** - 3/3
|
||||||
|
✅ **Strings** - 4/4
|
||||||
|
✅ **Modules** - 3/3
|
||||||
|
✅ **Hashmaps** - 3/3
|
||||||
|
✅ **Options** - 3/3
|
||||||
|
✅ **Error Handling** - 6/6
|
||||||
|
✅ **Generics** - 2/2
|
||||||
|
✅ **Traits** - 5/5
|
||||||
|
✅ **Lifetimes** - 3/3
|
||||||
|
✅ **Tests** - 3/3
|
||||||
|
✅ **Iterators** - 5/5
|
||||||
|
✅ **Smart Pointers** - 4/4
|
||||||
|
✅ **Threads** - 3/3
|
||||||
|
✅ **Macros** - 4/4
|
||||||
|
✅ **Clippy** - 3/3
|
||||||
|
✅ **Conversions** - 5/5
|
||||||
|
✅ **Quizzes** - 3/3
|
||||||
|
|
||||||
|
## Learning Path
|
||||||
|
|
||||||
|
### Recommended Order
|
||||||
|
|
||||||
|
**Phase 1: Foundations (Days 1-2)**
|
||||||
|
1. 00_intro - Learn basic syntax
|
||||||
|
2. 01_variables - Understand variable binding
|
||||||
|
3. 02_functions - Write functions
|
||||||
|
4. 03_if - Control flow
|
||||||
|
5. 04_primitive_types - Data types
|
||||||
|
|
||||||
|
**Phase 2: Collections & Ownership (Days 3-4)**
|
||||||
|
6. 05_vecs - Collections
|
||||||
|
7. 06_move_semantics - Rust's unique ownership system
|
||||||
|
8. 07_structs - Custom types
|
||||||
|
9. 08_enums - Sum types
|
||||||
|
|
||||||
|
**Phase 3: Strings & Modules (Days 5)**
|
||||||
|
10. 09_strings - String handling
|
||||||
|
11. 10_modules - Code organization
|
||||||
|
12. 11_hashmaps - More collections
|
||||||
|
|
||||||
|
**Phase 4: Type System (Days 6-7)**
|
||||||
|
13. 12_options - Null safety
|
||||||
|
14. 13_error_handling - Error management
|
||||||
|
15. 14_generics - Generic programming
|
||||||
|
16. 15_traits - Interface abstraction
|
||||||
|
|
||||||
|
**Phase 5: Advanced (Days 8-10)**
|
||||||
|
17. 16_lifetimes - Reference lifetimes
|
||||||
|
18. 17_tests - Testing
|
||||||
|
19. 18_iterators - Functional programming
|
||||||
|
20. 19_smart_pointers - Memory management
|
||||||
|
21. 20_threads - Concurrency
|
||||||
|
22. 21_macros - Metaprogramming
|
||||||
|
23. 22_clippy - Code quality
|
||||||
|
24. 23_conversions - Type conversions
|
||||||
|
25. quizzes - Assessment
|
||||||
|
|
||||||
|
## Key Concepts Covered
|
||||||
|
|
||||||
|
### Ownership & Borrowing
|
||||||
|
- Move semantics
|
||||||
|
- References and borrowing
|
||||||
|
- Lifetimes
|
||||||
|
- Smart pointers (Box, Rc, Arc, Cow)
|
||||||
|
|
||||||
|
### Type System
|
||||||
|
- Pattern matching
|
||||||
|
- Enums and Options
|
||||||
|
- Result for error handling
|
||||||
|
- Generics and traits
|
||||||
|
- Type conversions
|
||||||
|
|
||||||
|
### Collections
|
||||||
|
- Vectors
|
||||||
|
- Strings
|
||||||
|
- Hashmaps
|
||||||
|
|
||||||
|
### Advanced Topics
|
||||||
|
- Iterators and functional programming
|
||||||
|
- Testing
|
||||||
|
- Macros
|
||||||
|
- Threading and concurrency
|
||||||
|
- Error handling patterns
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
### Official Documentation
|
||||||
|
- [The Rust Book](https://doc.rust-lang.org/book/) - Comprehensive guide
|
||||||
|
- [Rust API Documentation](https://docs.rs/) - Standard library docs
|
||||||
|
- [Rust by Example](https://doc.rust-lang.org/rust-by-example/) - Practical examples
|
||||||
|
|
||||||
|
### Learning
|
||||||
|
- [Rust Playground](https://play.rust-lang.org/) - Try Rust online
|
||||||
|
- [Clippy Lint Documentation](https://doc.rust-lang.org/clippy/) - Code quality
|
||||||
|
- [Rustlings Official](https://github.com/rust-lang/rustlings) - Original project
|
||||||
|
|
||||||
|
### Tools
|
||||||
|
- [rust-analyzer](https://rust-analyzer.github.io/) - IDE support
|
||||||
|
- [rustfmt](https://github.com/rust-lang/rustfmt) - Code formatter
|
||||||
|
- [clippy](https://github.com/rust-lang/rust-clippy) - Linter
|
||||||
|
|
||||||
|
## Tips for Learning
|
||||||
|
|
||||||
|
1. **Read the README in each exercise directory** - They provide valuable context
|
||||||
|
2. **Understand the error messages** - Rust's compiler is very helpful
|
||||||
|
3. **Don't just copy solutions** - Type them out to build muscle memory
|
||||||
|
4. **Run tests frequently** - `cargo test` is your friend
|
||||||
|
5. **Experiment with variations** - Try modifying working solutions
|
||||||
|
6. **Use rust-analyzer** - Get IDE support for better learning
|
||||||
|
|
||||||
|
## Common Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
cargo test
|
||||||
|
|
||||||
|
# Run tests with output
|
||||||
|
cargo test -- --nocapture
|
||||||
|
|
||||||
|
# Check code without running
|
||||||
|
cargo check
|
||||||
|
|
||||||
|
# Format code
|
||||||
|
cargo fmt
|
||||||
|
|
||||||
|
# Run clippy linter
|
||||||
|
cargo clippy
|
||||||
|
|
||||||
|
# Build release version
|
||||||
|
cargo build --release
|
||||||
|
|
||||||
|
# View test file details
|
||||||
|
cargo test --doc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
This is a completed version of Rustlings. To:
|
||||||
|
- **Learn from solutions**: Examine the exercise files in `exercises/`
|
||||||
|
- **Review solutions**: Check the `solutions/` directory
|
||||||
|
- **Understand concepts**: Read the README files in each exercise category
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Rustlings is licensed under the MIT license.
|
||||||
|
|
||||||
|
## Acknowledgments
|
||||||
|
|
||||||
|
Rustlings was created by the Rust community to help new learners understand Rust concepts through practical exercises. This completed version includes all solutions for reference and learning purposes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Happy Learning!** 🎓🦀
|
||||||
|
|
||||||
|
If you have questions about specific concepts, refer to the official Rust documentation or the README files in each exercise directory.
|
||||||
Reference in New Issue
Block a user