FH Kufstein Gastvortrag

FH Kufstein Gastvortrag

Beispiel Rust code Snippets

Hello world

fn main() {
  println!("Hallo, FH Kufstein!");
}

Immutable by default

fn main() {
  let data = 5;
  println!("Wert von data ist: {}", data);
}

Mutable variables

fn main() {
  let mut data = 5;
  println!("Wert von data ist: {}", data);
  data = 42;
  println!("Der neue Werte von data ist: {}", data);
}

Structs

struct Punkt {
    x: i32,
    y: i32,
}

impl Punkt {
    fn distanz_zum_nullpunkt(&self) -> f64 {
        ((self.x.pow(2) + self.y.pow(2)) as f64).sqrt()
    }
}

fn main() {
    let punkt = Punkt { x: 3, y: 4 };
    println!("Distanz zum Nullpunkt: {}", punkt.distanz_zum_nullpunkt());
}

Zuverlässigkeit

Ohne weiteres tooling

Alle tests laufen in einem Docker container auf 1 CPU & 64MB RAM. Timeout auf 5 Sekunden.

Python

import random 

def count_characters(s: str, c: str) -> int:
    return s.count(c)

def get_count():
    print("Start")
    if(random.random() < 0.5):
        return count_characters("Hello world", "o") 
    else:
        return count_characters("Hello world", 23) 

result = get_count()
print(result)

Rust

use std::time::{SystemTime, UNIX_EPOCH};

fn count_characters(s: &str, c: char) -> usize {
    s.chars().filter(|x| *x == c).count()
}

fn main() {
    println!("Start");
    let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
    let random_bool = now.subsec_nanos() % 2 == 0;
    
    if random_bool {
        let count = count_characters("Hello world", 'o');
        println!("{}", count);
    } else {
        let count = count_characters("Hello world", 23);
        println!("{}", count);
    }
}


Kein Wundermittel

Rust bedeutet nicht fehlerfreier Code.

fn main() {
    let numbers = vec![1, 2, 3];
    // Zugriff auf ein Element, das nicht existiert, führt zu einem Laufzeitfehler (panic)
    println!("Das zehnte Element ist: {}", numbers[9]);
}

Fix

fn main() {
    let numbers = vec![1, 2, 3];
    match numbers.get(9) {
        Some(value) => println!("Das zehnte Element ist: {}", value),
        None => println!("Es gibt kein zehntes Element."),
    }
}

Weitere Resourcen

Mein EuroPython 2023 Talk

Rust Blog von Shuttle.rs (guides & howtos)

Shuttle Blog
Get all your shuttle News on the shuttle blog.

YouTube Kanal von No Boilerplate

No Boilerplate
Fast technical videos. If you like sci-fi, check out my hopepunk podcast, Lost Terminal, at https://www.lostterminal.com If you like urban fantasy, I produce a wonderful podcast called Modem Prometheus: https://www.modemprometheus.com

Fragen, Feedback & Kontakt

Ihr könnt mir gerne jederzeit schreiben.

Email: karim.jedda@gmail.com

Webseite: https://karimjedda.com

LinkedIn: https://linkedin.com/karim-jedda