mirror of
https://github.com/ArthurDanjou/rustlings.git
synced 2026-02-03 21:27:49 +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