Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

The-Rust-Programming-Language

rust language code base on https://doc.rust-lang.org/book/ch01-02-hello-world.html

This tutorial is base on The Rust Programming Language

Table of Contents

The Rust Programming Language

Foreword

Introduction

1. Getting Started

1.1. Installation

1.2. Hello, World!

  • Now open the main.rs file you just created and enter the code in Listing 1-1. Filename: main.rs
fn main() {
    println!("Hello, world!");
}

enter the following commands to compile and run the file:

❯ rustc main.rs
❯ rustc main.rs
❯ ./main
Hello, world!

1.3. Hello, Cargo!

  • Install Cargo and use Cargo to make projects.
❯ cargo --version                                                                              
cargo 1.75.0 (1d8b05cdd 2023-11-20)
  • Creating a Project with Cargo
❯ cargo new hello_cargo
     Created binary (application) `hello_cargo` package
❯ cd hello_cargo
  • Building and Running a Cargo Project
❯ cargo build
   Compiling hello_cargo v0.1.0 (/home/dc/5W/github/DC-Melo/The-Rust-Programming-Language/01-Getting
-Started/1.3.Hello-Cargo/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
# run the executable with this command:
❯ ./target/debug/hello_cargo
Hello, world!
# we can also use cargo run to compile the code and then run the resultant executable all in one command:
❯ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_cargo`
Hello, world!
# cargo check. This command quickly checks your code to make sure it compiles but doesn’t produce an executable:
❯ cargo check
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
  • Building for Release
❯ cargo build --release
   Compiling hello_cargo v0.1.0 (/home/dc/5W/github/DC-Melo/The-Rust-Programming-Language/01-Getting
-Started/1.3.Hello-Cargo/hello_cargo)
    Finished release [optimized] target(s) in 0.15s

2. Programming a Guessing Game

  • Setting Up a New Project
❯ cargo new guessing_game
     Created binary (application) `guessing_game` package
dc in 🌐 dc-iMac in The-Rust-Programming-Language/02-Programming-a-Guessing-Game on  02.Programming-a-Guessing-Game [!?] 
❯ cd guessing_game
dc in 🌐 dc-iMac in The-Rust-Programming-Language/02-Programming-a-Guessing-Game/guessing_game on  02.Programming-a-Guessing-Game [!?] is 📦
 v0.1.0 via 🦀 v1.75.0 
❯ cargo run
   Compiling guessing_game v0.1.0 (/home/dc/5W/github/DC-Melo/The-Rust-Programming-Language/02-Programming-a-Guessing-Game/guessing_game)
    Finished dev [unoptimized + debuginfo] target(s) in 0.16s
     Running `target/debug/guessing_game`
Hello, world!
  • Processing a Guess Filename: src/main.rs tag: v0.02.1
use std::io;

fn main() {
    println!("Guess the number!");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {guess}");
}
❯ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
❯ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/guessing_game`
Guess the number!
Please input your guess.
10
You guessed: 10

Filename: src/main.rs tag: v0.02.2

use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);

    loop {
        println!("Please input your guess.");

        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        println!("You guessed: {guess}");

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}

Filename: Cargo.toml tag: v0.02.2

[dependencies]
rand = "0.8.0"
  • Build project
❯ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s

dc in 🌐 dc-iMac in The-Rust-Programming-Language/02-Programming-a-Guessing-Game/guessing_game on  
02.Programming-a-Guessing-Game [!?] is 📦 v0.1.0 via 🦀 v1.75.0 
❯ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/guessing_game`
Guess the number!
Please input your guess.
10
You guessed: 10
Too small!

3. Common Programming Concepts

3.1. Variables and Mutability

3.2. Data Types

3.3. Functions

3.4. Comments

3.5. Control Flow

4. Understanding Ownership

4.1. What is Ownership?

4.2. References and Borrowing

4.3. The Slice Type

5. Using Structs to Structure Related Data

5.1. Defining and Instantiating Structs

5.2. An Example Program Using Structs

5.3. Method Syntax

6. Enums and Pattern Matching

6.1. Defining an Enum

6.2. The match Control Flow Construct

6.3. Concise Control Flow with if let

7. Managing Growing Projects with Packages, Crates, and Modules

7.1. Packages and Crates

7.2. Defining Modules to Control Scope and Privacy

7.3. Paths for Referring to an Item in the Module Tree

7.4. Bringing Paths Into Scope with the use Keyword

7.5. Separating Modules into Different Files

8. Common Collections

8.1. Storing Lists of Values with Vectors

8.2. Storing UTF-8 Encoded Text with Strings

8.3. Storing Keys with Associated Values in Hash Maps

9. Error Handling

9.1. Unrecoverable Errors with panic!

9.2. Recoverable Errors with Result

9.3. To panic! or Not to panic!

10. Generic Types, Traits, and Lifetimes

10.1. Generic Data Types

10.2. Traits: Defining Shared Behavior

10.3. Validating References with Lifetimes

11. Writing Automated Tests

11.1. How to Write Tests

11.2. Controlling How Tests Are Run

11.3. Test Organization

12. An I/O Project: Building a Command Line Program

12.1. Accepting Command Line Arguments

12.2. Reading a File

12.3. Refactoring to Improve Modularity and Error Handling

12.4. Developing the Library’s Functionality with Test Driven Development

12.5. Working with Environment Variables

12.6. Writing Error Messages to Standard Error Instead of Standard Output

13. Functional Language Features: Iterators and Closures

13.1. Closures: Anonymous Functions that Capture Their Environment

13.2. Processing a Series of Items with Iterators

13.3. Improving Our I/O Project

13.4. Comparing Performance: Loops vs. Iterators

14. More about Cargo and Crates.io

14.1. Customizing Builds with Release Profiles

14.2. Publishing a Crate to Crates.io

14.3. Cargo Workspaces

14.4. Installing Binaries from Crates.io with cargo install

14.5. Extending Cargo with Custom Commands

15. Smart Pointers

15.1. Using Box to Point to Data on the Heap

15.2. Treating Smart Pointers Like Regular References with the Deref Trait

15.3. Running Code on Cleanup with the Drop Trait

15.4. Rc, the Reference Counted Smart Pointer

15.5. RefCell and the Interior Mutability Pattern

15.6. Reference Cycles Can Leak Memory

16. Fearless Concurrency

16.1. Using Threads to Run Code Simultaneously

16.2. Using Message Passing to Transfer Data Between Threads

16.3. Shared-State Concurrency

16.4. Extensible Concurrency with the Sync and Send Traits

17. Object Oriented Programming Features of Rust

17.1. Characteristics of Object-Oriented Languages

17.2. Using Trait Objects That Allow for Values of Different Types

17.3. Implementing an Object-Oriented Design Pattern

18. Patterns and Matching

18.1. All the Places Patterns Can Be Used

18.2. Refutability: Whether a Pattern Might Fail to Match

18.3. Pattern Syntax

19. Advanced Features

19.1. Unsafe Rust

19.2. Advanced Traits

19.3. Advanced Types

19.4. Advanced Functions and Closures

19.5. Macros

20. Final Project: Building a Multithreaded Web Server

20.1. Building a Single-Threaded Web Server

20.2. Turning Our Single-Threaded Server into a Multithreaded Server

20.3. Graceful Shutdown and Cleanup

21. Appendix

21.1. A - Keywords

21.2. B - Operators and Symbols

21.3. C - Derivable Traits

21.4. D - Useful Development Tools

21.5. E - Editions

21.6. F - Translations of the Book

21.7. G - How Rust is Made and “Nightly Rust”

About

rust language code base on https://doc.rust-lang.org/book/ch01-02-hello-world.html

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages