Elysia Tools

Parcourez outils, exemples, explications visuelles et guides thématiques dans un espace clair.

Catégories populaires

Dossiers

Langue
ZHDERUPTENFRES

Elysia Tools

Navigation mobile

Langages de programmation

Exemples Rust

Exemples de code Rust essentiels featuring ownership, concurrence, et programmation système

Exemples

Entrées de cette collection

Code sourcerustSimple

Hello World Rust

Programme Hello World de base et syntaxe fondamentale avec concepts d'ownership

Difficulté

3/10

Temps estimé

15 min

Étiquettes

rust, systems programming, ownership

Prérequis

Basic programming concepts

rust
// Rust Hello World Examples

// 1. Basic Hello World
fn main_basic() {
    println!("Hello, World!");
}

// 2. Hello World with variable binding
fn main_with_variable() {
    let message = "Hello, World!";
    println!("{}", message);
}

// 3. Hello World with function
fn say_hello() -> &'static str {
    "Hello, World!"
}

fn main_with_function() {
    println!("{}", say_hello());
}

// 4. Hello World with ownership demonstration
fn main_with_ownership() {
    let s1 = String::from("Hello");
    let s2 = s1; // s1 is moved to s2
    // println!("{}", s1); // This would cause a compile error
    println!("{} World!", s2);
}

// 5. Hello World with borrowing
fn main_with_borrowing() {
    let s1 = String::from("Hello");
    let len = calculate_length(&s1); // borrow s1
    println!("Length of '{}' is {}.", s1, len); // s1 is still valid
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

// 6. Hello World with mutable borrowing
fn main_with_mutable_borrowing() {
    let mut s = String::from("Hello");
    change(&mut s);
    println!("{}", s);
}

fn change(some_string: &mut String) {
    some_string.push_str(", World!");
}

// 7. Hello World with struct
struct Greeting {
    message: String,
}

impl Greeting {
    fn new(message: &str) -> Greeting {
        Greeting {
            message: message.to_string(),
        }
    }

    fn display(&self) {
        println!("{}", self.message);
    }
}

fn main_with_struct() {
    let greeting = Greeting::new("Hello, World!");
    greeting.display();
}

// 8. Hello World with enum
enum Status {
    Connected,
    Disconnected,
}

fn main_with_enum() {
    let status = Status::Connected;
    match status {
        Status::Connected => println!("Hello, Connected World!"),
        Status::Disconnected => println!("Goodbye, World!"),
    }
}

// 9. Hello World with error handling
use std::fs::File;

fn main_with_error_handling() {
    match File::open("hello.txt") {
        Ok(_file) => println!("Hello, File World!"),
        Err(_error) => println!("Hello, Error World!"),
    }
}

// 10. Hello World with vectors and iteration
fn main_with_vectors() {
    let greetings = vec!["Hello", "Bonjour", "Hola", "Ciao"];

    for greeting in greetings {
        println!("{}, World!", greeting);
    }
}

// Basic data types
fn main_data_types() {
    // Scalar types
    let integer: i32 = 42;
    let float: f64 = 3.14;
    let boolean: bool = true;
    let character: char = '🦀';

    // Compound types
    let tuple: (i32, f64, bool) = (42, 3.14, true);
    let array: [i32; 5] = [1, 2, 3, 4, 5];

    println!("Integer: {}, Float: {}, Boolean: {}, Char: {}", integer, float, boolean, character);
    println!("Tuple: {:?}", tuple);
    println!("Array: {:?}", array);
}

// Control flow
fn main_control_flow() {
    let number = 42;

    if number > 0 {
        println!("Positive number");
    } else {
        println!("Non-positive number");
    }

    // Match statement
    match number {
        0 => println!("Zero"),
        1..=9 => println!("Single digit"),
        _ => println!("Multiple digits"),
    }

    // Loops
    for i in 0..5 {
        println!("Iteration {}", i);
    }
}
Code sourcerustIntermédiaire

Patterns d'Ownership Rust

Concepts avancés d'ownership, borrowing, et gestion des lifetimes

Difficulté

6/10

Temps estimé

25 min

Étiquettes

rust, ownership, borrowing, memory management

Prérequis

Basic Rust syntax, Memory concepts

rust
// Rust Ownership Patterns Examples

// 1. Move semantics with vectors
fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec1; // vec1 is moved to vec2

    // println!("{:?}", vec1); // Error: value borrowed here after move
    println!("{:?}", vec2); // This works
}

// 2. Clone to create deep copy
fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec1.clone(); // Explicit cloning

    println!("{:?}", vec1); // This works
    println!("{:?}", vec2); // This also works
}

// 3. Copy types
fn main() {
    let x = 5;
    let y = x; // x is copied, not moved

    println!("x = {}, y = {}", x, y); // Both work
}

// 4. Borrowing with functions
fn take_ownership(some_string: String) {
    println!("I own: {}", some_string);
} // some_string goes out of scope and is dropped

fn borrow_string(some_string: &String) {
    println!("I'm borrowing: {}", some_string);
} // some_string is not dropped

fn main() {
    let s1 = String::from("hello");
    take_ownership(s1); // s1 is moved
    // println!("{}", s1); // Error: s1 was moved

    let s2 = String::from("world");
    borrow_string(&s2); // s2 is borrowed
    println!("{}", s2); // s2 is still valid
}

// 5. Mutable borrowing
fn change_string(some_string: &mut String) {
    some_string.push_str(" and more");
}

fn main() {
    let mut s = String::from("hello");
    change_string(&mut s);
    println!("{}", s);
}

// 6. Multiple immutable borrows
fn main() {
    let s = String::from("hello");

    let r1 = &s; // OK
    let r2 = &s; // OK
    let r3 = &s; // OK

    println!("{}, {}, {}", r1, r2, r3);
}

// 7. Dangling references (prevented by compiler)
// fn dangle() -> &String { // This would not compile
//     let s = String::from("hello");
//     &s // s goes out of scope, dangling reference
// }

fn no_dangle() -> String { // This works
    let s = String::from("hello");
    s // ownership is moved out
}

// 8. Struct lifetimes
struct ImportantExcerpt<'a> {
    part: &'a str,
}

impl<'a> ImportantExcerpt<'a> {
    fn level(&self) -> i32 {
        3
    }

    fn announce_and_return_part<'a>(&self, announcement: &str) -> &'a str {
        println!("Attention please: {}", announcement);
        self.part
    }
}

fn main() {
    let novel = String::from("Call me Ishmael. Some years ago...");
    let first_sentence = novel.split('.').next().expect("Could not find a '.'");

    let i = ImportantExcerpt {
        part: first_sentence,
    };

    println!("Level: {}", i.level());
}

// 9. Slices
fn main() {
    let s = String::from("hello world");

    let hello = &s[0..5];
    let world = &s[6..11];

    println!("first word: {}, second word: {}", hello, world);

    let word = first_word(&s);
    println!("first word: {}", word);
}

fn first_word(s: &String) -> &str {
    let bytes = s.as_bytes();

    for (i, &item) in bytes.iter().enumerate() {
        if item == b' ' {
            return &s[0..i];
        }
    }

    &s[..]
}

// 10. Smart pointers - Box<T>
fn main() {
    let b = Box::new(5);
    println!("b = {}", b);
}

#[derive(Debug)]
enum List {
    Cons(i32, Box<List>),
    Nil,
}

use List::{Cons, Nil};

fn main() {
    let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil))))));
    println!("{:?}", list);
}
Code sourcerustComplexe

Patterns de Concurrence Rust

Programmation concurrente moderne avec threads, async/await, et channels

Difficulté

8/10

Temps estimé

30 min

Étiquettes

rust, concurrency, multithreading, async

Prérequis

Rust ownership, Basic threading concepts

rust
// Rust Concurrency Examples

use std::thread;
use std::sync::{Arc, Mutex};
use std::time::Duration;

// 1. Basic thread creation
fn main() {
    thread::spawn(|| {
        for i in 1..10 {
            println!("hi number {} from the spawned thread!", i);
            thread::sleep(Duration::from_millis(1));
        }
    });

    for i in 1..5 {
        println!("hi number {} from the main thread!", i);
        thread::sleep(Duration::from_millis(1));
    }
}

// 2. Joining threads
fn main() {
    let handle = thread::spawn(|| {
        for i in 1..10 {
            println!("hi number {} from the spawned thread!", i);
            thread::sleep(Duration::from_millis(1));
        }
    });

    for i in 1..5 {
        println!("hi number {} from the main thread!", i);
        thread::sleep(Duration::from_millis(1));
    }

    handle.join().unwrap();
}

// 3. Using move closures with threads
fn main() {
    let v = vec![1, 2, 3];

    let handle = thread::spawn(move || {
        println!("Here's a vector: {:?}", v);
    });

    handle.join().unwrap();
}

// 4. Shared state with Arc<Mutex<T>>
use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let counter = Arc::new(Mutex::new(0));
    let mut handles = vec![];

    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            let mut num = counter.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("Result: {}", *counter.lock().unwrap());
}

// 5. Channels for message passing
use std::sync::mpsc;
use std::thread;

fn main() {
    let (tx, rx) = mpsc::channel();

    thread::spawn(move || {
        let val = String::from("hi");
        tx.send(val).unwrap();
        println!("Sent: {}", val);
    });

    let received = rx.recv().unwrap();
    println!("Got: {}", received);
}

// 6. Multiple producers
fn main() {
    let (tx, rx) = mpsc::channel();

    thread::spawn(move || {
        let vals = vec![
            String::from("hi"),
            String::from("from"),
            String::from("the"),
            String::from("thread"),
        ];

        for val in vals {
            tx.send(val).unwrap();
        }
    });

    for received in rx {
        println!("Got: {}", received);
    }
}

// 7. Async/Await with Tokio (requires tokio crate)
// Add to Cargo.toml: tokio = { version = "1", features = ["full"] }

/*
use tokio;

async fn hello_world() {
    println!("Hello, async world!");
}

#[tokio::main]
async fn main() {
    hello_world().await;
}
*/

// 8. Concurrent HTTP requests with async (requires reqwest and tokio)
/*
use reqwest;
use tokio;

async fn fetch_url(url: &str) -> Result<String, Box<dyn std::error::Error>> {
    let response = reqwest::get(url).await?;
    let body = response.text().await?;
    Ok(body)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let urls = vec![
        "https://api.example.com/users",
        "https://api.example.com/posts",
        "https://api.example.com/comments",
    ];

    let mut handles = vec![];

    for url in urls {
        let handle = tokio::spawn(async move {
            fetch_url(url).await
        });
        handles.push(handle);
    }

    for handle in handles {
        let result = handle.await??;
        println!("Response length: {}", result.len());
    }

    Ok(())
}
*/

// 9. Barrier for thread synchronization
use std::sync::Barrier;
use std::thread;

fn main() {
    let mut handles = vec![];
    let barrier = Arc::new(Barrier::new(5));

    for i in 0..5 {
        let c = Arc::clone(&barrier);
        let handle = thread::spawn(move || {
            println!("before barrier in thread {}", i);
            c.wait();
            println!("after barrier in thread {}", i);
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }
}

// 10. Atomic operations
use std::sync::atomic::{AtomicUsize, Ordering};

fn main() {
    let counter = AtomicUsize::new(0);
    let mut handles = vec![];

    for _ in 0..10 {
        let handle = thread::spawn(|| {
            for _ in 0..1000 {
                counter.fetch_add(1, Ordering::Relaxed);
            }
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("Final count: {}", counter.load(Ordering::Relaxed));
}

Outils

Outils souvent utilisés avec cet exemple

Associé

Collections d’exemples associées

Associé

Dossiers associés

Dossier

Déduire un JSON Schema depuis des exemples et des tableurs

Produisez un brouillon de JSON Schema relisible à partir d'exemples JSON représentatifs ou de lignes XLSX, puis examinez types, caractère obligatoire, valeurs nulles et anomalies avant toute adoption contractuelle.

Dossier

Generateurs JSON vers code type

Generez des modeles types depuis JSON ou schema pour TypeScript, Go, Rust, Kotlin, Java, C# et la validation Zod.

Dossier

Workflow de conversion, integration et localisation des sous-titres

Transformez des videos ou fichiers de sous-titres en sous-titres traduits, convertis, integres ou incrustes prets pour la revue et la diffusion.

Dossier

Revue et livraison d’un module de jeu promotionnel auto-hébergé

Contrôlez configuration, exemples de réponses, lisibilité et affichage adaptatif avant de livrer les fichiers du module et les preuves de recette de son intégration.

Accueil
Outils3212
Exemples593
Visualisations471
Visionneuses de fichiers103
Dossiers239
Étiquettes333
Images, audio et vidéo657

Outils de traitement, conversion et optimisation d’images, d’audio et de vidéo

Maths, dates et finance647

Calculateurs, outils numériques, logique de dates, statistiques et finance

Design et couleur298

Outils de couleur, mise en page, graphisme, style visuel et assistance design

Texte et rédaction209

Outils de rédaction, nettoyage, formatage, extraction et analyse de texte

Développement et Web193

Utilitaires développeur, réseau, débogage Web et assistants d’automatisation

Conversion et encodage175

Outils de conversion de formats, fichiers, archives, unités et encodages

Lancement d’un quiz de prospection et transmission des contacts
Textes commémoratifs : validation familiale et remise pour impression
Habitudes privées : sauvegarde, restauration et partage vérifié
D’un article aux brouillons X et LinkedIn : revue factuelle et livraison
Revue de cours Markdown interactif et livraison hors ligne

© 2026 Elysia Tools. Tous droits réservés.

DocumentationTarifsÀ proposConditions d'utilisationPolitique de confidentialitéCookiesContact

Development

JSON vers Rust Struct

Convertit des données JSON en structs Rust avec derives serde Serialize/Deserialize, champs snake_case et attributs serde rename

Langages de programmation

Exemples Carbon

Exemples de langage de programmation Carbon - successeur de C++ de Google avec fonctionnalités modernes et performance

Langages de programmation

Exemples Elixir

Exemples essentiels de programmation Elixir pour les systèmes concurrents et distribués

Langages de programmation

Exemples Zig

Exemples de langage de programmation Zig - programmation système simple et efficace avec sécurité mémoire