Meiner Meinung nach ist das Beste daran, ein Entwickler zu sein, das Erlernen einer neuen Programmiersprache. Etwas Neues zu lernen bringt Sie aus Ihrer Komfortzone heraus, Sie machen Fehler und während Sie die neue Syntax und die neuen Konzepte lernen, beginnen Sie die Sprache zu schätzen. Das Erlernen einer neuen Sprache ist sicherlich eine Herausforderung und Herausforderungen machen Spaß! Werfen wir einen kurzen Blick auf Hello World mit Rust!
Hallo Rost
In meinem letzten Blog über Rust haben wir uns Cargo angesehen - das Build-Tool für Rust. Cargo verwaltet Rust-Codebasen, indem es das Rust-Modulsystem namens Crates einführt. Es gibt 'binary' Crates für Anwendungen und 'library' Crates für Bibliotheken! Lassen Sie uns eine Hello World 'binary' Crate erstellen:
$ pwd
~/projects
# create a new project
$ cargo new hello-rust
cd hello-rust
$ cargo run
Hello, world!
Bearbeiten Sie 'src/main.rs' und ändern Sie es in:
fn main() {
let xs = [1, 2, 3, 4, 5];
for x in &xs {
print!("{} ", x);
}
println!("Hello, world!");
}
Ausgänge:
$ cargo run
1 2 3 4 5 Hello, world!
SegFaults?
In dem Blog Rückblick auf C und C++ haben wir uns angesehen, wie einfach es ist, illegal auf den Speicher zuzugreifen und dadurch einen Anwendungsabsturz zu verursachen. Da Rust eine moderne Systemprogrammiersprache ist, frage ich mich, ob das auch bei Rust möglich ist.
fn main() {
let mut xs = [1, 2, 3, 4, 5];
// surprise!
xs[10] = 10;
let x = xs[100];
println!("{}", x);
}
Ausgänge:
$ cargo run
Compiling hello-rust v0.1.0 (/Users/dennis/projects/hello-rust)
error: index out of bounds: the len is 5 but the index is 10
--> src/main.rs:3:5
|
3 | xs[10] = 10;
| ^^^^^^
|
= note: #[deny(const_err)] on by default
error: index out of bounds: the len is 5 but the index is 100
--> src/main.rs:4:13
|
4 | let x = xs[100];
| ^^^^^^^
error: aborting due to 2 previous errors
error: Could not compile hello-rust.
Perfekt! Das Beispiel lässt sich nicht kompilieren und gibt Rückmeldung über das Problem und wie man es beheben kann.
Abhängigkeiten
Fügen wir eine Abhängigkeit zur Erstellung von Zufallszahlen hinzu. Bearbeiten Sie die Datei
[package]
name = "hello-rust"
version = "0.1.0"
authors = ["Dennis Vriend <dnvriendvriend@binx.io>"]
edition = "2018"
[dependencies]
rand = "0.3.14"
Um die Kiste zu verwenden, müssen wir sie bei Rust registrieren. Wir verwenden die Schlüsselwörter
extern crate rand;
use rand::Rng;
fn main() {
for x in 1..11 {
let random_number = rand::thread_rng()
.gen_range(1, 101);
println!("{} -> {}", x, random_number)
}
}
Ausgänge:
$ cargo run
Compiling hello-rust v0.1.0 (/Users/dennis/projects/hello-rust)
Finished dev [unoptimized + debuginfo] target(s) in 0.55s
Running target/debug/hello-rust
1 -> 89
2 -> 2
3 -> 75
4 -> 84
5 -> 3
6 -> 56
7 -> 82
8 -> 66
9 -> 17
10 -> 76
Fazit
In diesem Blog haben wir ein Hallo-Welt-Beispiel erstellt. Dann haben wir versucht, die Anwendung durch illegalen Speicherzugriff (Segfault) zum Absturz zu bringen, aber der Rust-Compiler verhindert dies. Wir haben dann eine externe Abhängigkeit 'rand' importiert, die Zufallszahlengeneratoren bereitstellt. Wir haben 10 Zufallszahlen generiert und das Ergebnis auf der Konsole ausgegeben. Wir haben Cargo, das Rust-Build-Tool, verwendet, um alle Beispiele zu erstellen.
Ich mache immer noch viele Anfängerfehler, aber ich bleibe dran und habe in der Zwischenzeit viel Spaß!
Verfasst von
Dennis Vriend
Contact
