Skip to content

Commit

Permalink
Merge pull request #372 from damoasda/master
Browse files Browse the repository at this point in the history
Änderungen im Originalbuch bis zum 11.05.2024 nachziehen
  • Loading branch information
damoasda authored May 12, 2024
2 parents 9263bb7 + 070b439 commit 02f308a
Show file tree
Hide file tree
Showing 62 changed files with 612 additions and 483 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/pages-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
toolchain: stable

- name: Install mdbook
run: cargo install mdbook --vers "^0.4.36" --no-default-features
run: cargo install mdbook --vers "^0.4.37" --no-default-features

- name: Build Book
run: mdbook build
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Das Buch „Die Programmiersprache Rust“ ist eine deutsche Gemeinschafts-Übersetzung
des [offiziellen Rust-Buchs][rustbook-en].
Es enthält alle Änderungen des englischen Originals bis einschließlich zum **19.02.2024**.
Es enthält alle Änderungen des englischen Originals bis einschließlich zum **11.05.2024**.

## [📖 > Hier online lesen < 📖][rustbook-de]

Expand All @@ -14,7 +14,7 @@ Die deutsche Übersetzung gibt es auch als **Taschenbuch** und als **E-Book**:

Schritte zum Bauen und Anschauen des Buchs:

1. mdBook installieren: `cargo install mdbook --vers "^0.4.36"`
1. mdBook installieren: `cargo install mdbook --vers "^0.4.37"`
2. Live-Vorschau-Server starten: `mdbook serve`
3. http://localhost:3000/ im Browser öffnen

Expand Down
2 changes: 1 addition & 1 deletion src/appendix-06-translation.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ eine neue Übersetzung zu informieren!
- [Esperanto](https://github.com/psychoslave/Rust-libro)
- [ελληνική](https://github.com/TChatzigiannakis/rust-book-greek)
- [Svenska](https://github.com/sebras/book)
- [Farsi](https://github.com/pomokhtari/rust-book-fa)
- [Farsi](https://github.com/RustFarsi/book)
- [Deutsch](https://github.com/rust-lang-de/rustbook-de)
- [हिंदी](https://github.com/venkatarun95/rust-book-hindi)
- [ไทย](https://github.com/rust-lang-th/book-th)
Expand Down
7 changes: 7 additions & 0 deletions src/appendix-07-nightly-rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,13 @@ melden und sie vor der nächsten stabilen Version korrigieren lassen! Ein Bruch
in einer Beta-Version ist relativ selten, aber `rustc` ist immer noch ein Stück
Software und es gibt Fehler.

### Wartungsdauer

Das Rust-Projekt unterstützt die neueste stabile Version. Wenn eine neue
stabile Version veröffentlicht wird, erreicht die alte Version ihr
Lebensende (engl. end of life, EOL). Das bedeutet, dass jede Version
sechs Wochen lang unterstützt wird.

### Instabile Funktionalitäten

Bei diesem Veröffentlichungsmodell gibt es noch einen weiteren Haken: Instabile
Expand Down
4 changes: 2 additions & 2 deletions src/ch00-00-introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ Systemprogrammierung:
Rust-Ökosystem schmerzlos und konsistent.
* Das Formatierungstool Rustfmt sorgt für einen einheitlichen Codierstil bei
den Entwicklern.
* Der Rust Sprachdienst (Language Server) ermöglicht Codevervollständigung und
im Code angezeigte Fehlermeldungen innerhalb der Entwicklungsumgebung (IDE).
* Der rust-analyzer ermöglicht Codevervollständigung und im Code angezeigte
Fehlermeldungen innerhalb der Entwicklungsumgebung (IDE).

Durch den Einsatz dieser und anderer Werkzeuge des Rust-Ökosystems können
Entwickler produktiv arbeiten, während sie Code auf Systemebene schreiben.
Expand Down
17 changes: 5 additions & 12 deletions src/ch01-01-installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,10 @@ kannst du das Paket `build-essential` installieren.

Rufe [https://www.rust-lang.org/tools/install][install] auf und folge
den Anweisungen, um Rust in Windows zu installieren. Während der Installation
wirst du eine Meldung erhalten, dass du auch die MSVC Bauwerkzeuge für Visual
Studio 2013 oder höher benötigst.

Um die Bauwerkzeuge zu erhalten, musst du [Visual Studio 2022][visualstudio]
installieren. Wenn du gefragt wirst, welche Komponenten installiert werden
sollen, gib folgendes an:

* „Desktop Development with C++“
* Das Windows 10 oder 11 SDK
* Das englische Sprachpaket zusammen mit einem beliebigen anderen Sprachpaket
deiner Wahl.
wirst du aufgefordert, Visual Studio zu installieren. Dieses enthält einen
Linker und die nativen Bibliotheken, die zum Kompilieren von Programmen
benötigt werden. Wenn du an dieser Stelle weitere Hilfe brauchst, geht zu
[https://rust-lang.github.io/rustup/installation/windows-msvc.html][msvc].

Der Rest dieses Buchs verwendet Befehle, die sowohl in *cmd.exe* als auch
in der PowerShell funktionieren. Falls es spezifische Unterschiede geben sollte,
Expand Down Expand Up @@ -152,5 +145,5 @@ Standardbibliothek verwenden sollst, dann schau in der API-Dokumentation nach!

[community]: https://www.rust-lang.org/community
[install]: https://www.rust-lang.org/tools/install
[msvc]: https://rust-lang.github.io/rustup/installation/windows-msvc.html
[otherinstall]: https://forge.rust-lang.org/infra/other-installation-methods.html
[visualstudio]: https://visualstudio.microsoft.com/downloads/
3 changes: 1 addition & 2 deletions src/ch01-03-hello-cargo.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,7 @@ name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# Weitere Schlüssel und ihre Definitionen findest du unter
# https://doc.rust-lang.org/cargo/reference/manifest.html
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
```
Expand Down
10 changes: 5 additions & 5 deletions src/ch02-00-guessing-game-tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -611,10 +611,10 @@ Code deines Projekts in die Versionskontrolle eingecheckt.
Wenn du eine Kiste aktualisieren *willst*, bietet Cargo den Befehl `update` an,
der die Datei *Cargo.lock* ignoriert und alle neuesten Versionen, die deinen
Spezifikationen entsprechen, in *Cargo.toml* herausfindet. Cargo schreibt diese
Versionen dann in die Datei *Cargo.lock*. Andernfalls wird Cargo standardmäßig
nur nach Versionen größer als 0.8.5 und kleiner als 0.9.0 suchen. Wenn die
Kiste `rand` zwei neue Versionen 0.8.6 und 0.9.0 veröffentlicht hat, würdest du
folgendes sehen, wenn du `cargo update` ausführst:
Versionen dann in die Datei *Cargo.lock*. In diesem Fall wird Cargo nur nach
Versionen größer als 0.8.5 und kleiner als 0.9.0 suchen. Wenn die Kiste `rand`
zwei neue Versionen 0.8.6 und 0.9.0 veröffentlicht hat, würdest du folgendes
sehen, wenn du `cargo update` ausführst:

```console
$ cargo update
Expand Down Expand Up @@ -865,7 +865,7 @@ numerischen Typ zu schließen. Der Grund für den Fehler liegt darin, dass Rust
eine Zeichenkette und einen Zahlentyp nicht vergleichen kann.

Letztendlich wollen wir den `String`, den das Programm als Eingabe liest, in
einen echten Zahlentyp umwandeln, damit wir ihn numerisch mit der Geheimzahl
einen Zahlentyp umwandeln, damit wir ihn numerisch mit der Geheimzahl
vergleichen können. Das tun wir, indem wir folgendes zum `main`-Funktionsrumpf
hinzufügen:

Expand Down
5 changes: 4 additions & 1 deletion src/ch03-05-control-flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,9 @@ wir ein Semikolon, um die Anweisung zu beenden, die `result` den Wert zuweist.
Schließlich geben wir den Wert in `result` aus, der in diesem Fall `20`
beträgt.

Du kannst auch innerhalb einer Schleife `return` aufrufen. Während `break` nur
die aktuelle Schleife verlässt, verlässt `return` immer die aktuelle Funktion.

#### Schleifenlabel zur eindeutigen Unterscheidung mehrerer Schleifen

Wenn du Schleifen innerhalb von Schleifen hast, gelten `break` und `continue`
Expand Down Expand Up @@ -460,7 +463,7 @@ wären, wenn du `loop`, `if`, `else` und `break` verwenden würdest, und es ist
klarer. Solange eine Bedingung zu `true` auswertet, läuft der Code ab;
andernfalls wird die Schleife verlassen.

#### Wiederholen anhand einer Kollektion mit `for`
#### Durchlaufen einer Kollektion mit `for`

Du kannst das `while`-Konstrukt verwenden, um die Elemente einer Kollektion,
z.B. ein Array, in einer Schleife zu durchlaufen. Die Schleife in Codeblock 3-4
Expand Down
39 changes: 19 additions & 20 deletions src/ch04-01-what-is-ownership.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ let mut s = String::from("Hallo");

s.push_str(" Welt!"); // push_str() hängt ein Literal an eine Zeichenfolge an

println!("{}", s); // Gibt `Hallo Welt!` aus
println!("{s}"); // Gibt `Hallo Welt!` aus
```

Was ist hier nun der Unterschied? Warum kann `String` verändert werden,
Expand Down Expand Up @@ -388,34 +388,33 @@ wird nicht funktionieren:
let s1 = String::from("Hallo");
let s2 = s1;
println!("{} Welt!", s1);
println!("{s1} Welt!");
```

Du erhältst eine Fehlermeldung wie diese, wodurch Rust dich daran hindert, die
ungültige Referenz zu verwenden:

```console
$ cargo run
Compiling ownership v0.1.0 (file:///projects/ownership)
Compiling playground v0.0.1 (/playground)
error[E0382]: borrow of moved value: `s1`
--> src/main.rs:5:28
--> src/main.rs:6:11
|
2 | let s1 = String::from("Hallo");
| -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
3 | let s2 = s1;
| -- value moved here
4 |
5 | println!("{} Welt!", s1);
| ^^ value borrowed here after move
3 | let s1 = String::from("Hallo");
| -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
4 | let s2 = s1;
| -- value moved here
5 |
6 | println!("{s1} Welt!");
| ^^^^ value borrowed here after move
|
= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider cloning the value if the performance cost is acceptable
|
3 | let s2 = s1.clone();
| ++++++++
4 | let s2 = s1.clone();
| ++++++++

For more information about this error, try `rustc --explain E0382`.
error: could not compile `ownership` (bin "ownership") due to 1 previous error
error: could not compile `playground` (bin "playground") due to 1 previous error
```

Wenn du beim Arbeiten mit anderen Sprachen schon mal die Begriffe *flache
Expand Down Expand Up @@ -461,7 +460,7 @@ Hier ist ein Beispiel für die Methode `clone`:
let s1 = String::from("Hallo");
let s2 = s1.clone();

println!("s1 = {}, s2 = {}", s1, s2);
println!("s1 = {s1}, s2 = {s2}");
```

Das funktioniert sehr gut und erzeugt explizit das in Abbildung 4-3 gezeigte
Expand All @@ -481,7 +480,7 @@ funktioniert und ist gültig:
let x = 5;
let y = x;

println!("x = {}, y = {}", x, y);
println!("x = {x}, y = {y}");
```

Aber dieser Code scheint dem zu widersprechen, was wir gerade gelernt haben:
Expand Down Expand Up @@ -554,12 +553,12 @@ fn main() {

fn takes_ownership(some_string: String) { // some_string kommt in den
// Gültigkeitsbereich
println!("{}", some_string);
println!("{some_string}");
} // Hier verlässt some_string den Gültigkeitsbereich und `drop` wird aufgerufen.
// Der zugehörige Speicherplatz wird freigegeben.

fn makes_copy(some_integer: i32) { // some_integer kommt in den Gültigkeitsbereich
println!("{}", some_integer);
println!("{some_integer}");
} // Hier verlässt some_integer den Gültigkeitsbereich.
// Es passiert nichts Besonderes.
```
Expand Down Expand Up @@ -643,7 +642,7 @@ fn main() {

let (s2, len) = calculate_length(s1);

println!("Die Länge von '{}' ist {}.", s2, len);
println!("Die Länge von '{s2}' ist {len}.");
}

fn calculate_length(s: String) -> (String, usize) {
Expand Down
52 changes: 26 additions & 26 deletions src/ch04-02-references-and-borrowing.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ fn main() {

let len = calculate_length(&s1);

println!("Die Länge von '{}' ist {}.", s1, len);
println!("Die Länge von '{s1}' ist {len}.");
}

fn calculate_length(s: &String) -> usize {
Expand Down Expand Up @@ -185,27 +185,27 @@ let mut s = String::from("Hallo");
let r1 = &mut s;
let r2 = &mut s;
println!("{}, {}", r1, r2);
println!("{r1}, {r2}");
```

Hier ist die Fehlermeldung:

```console
$ cargo run
Compiling ownership v0.1.0 (file:///projects/ownership)
Compiling playground v0.0.1 (/playground)
error[E0499]: cannot borrow `s` as mutable more than once at a time
--> src/main.rs:5:14
--> src/main.rs:6:10
|
4 | let r1 = &mut s;
| ------ first mutable borrow occurs here
5 | let r2 = &mut s;
| ^^^^^^ second mutable borrow occurs here
6 |
7 | println!("{}, {}", r1, r2);
| -- first borrow later used here
5 | let r1 = &mut s;
| ------ first mutable borrow occurs here
6 | let r2 = &mut s;
| ^^^^^^ second mutable borrow occurs here
7 |
8 | println!("{r1}, {r2}");
| ---- first borrow later used here

For more information about this error, try `rustc --explain E0499`.
error: could not compile `ownership` (bin "ownership") due to 1 previous error
error: could not compile `playground` (bin "playground") due to 1 previous error
```

Dieser Fehler besagt, dass dieser Code ungültig ist, weil wir `s` nicht mehr
Expand Down Expand Up @@ -258,28 +258,28 @@ let r1 = &s; // kein Problem
let r2 = &s; // kein Problem
let r3 = &mut s; // GROSSES PROBLEM
println!("{}, {} und {}", r1, r2, r3);
println!("{r1}, {r2} und {r3}");
```

Hier ist die Fehlermeldung:

```console
$ cargo run
Compiling ownership v0.1.0 (file:///projects/ownership)
Compiling playground v0.0.1 (/playground)
error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
--> src/main.rs:6:14
--> src/main.rs:7:10
|
4 | let r1 = &s; // kein Problem
| -- immutable borrow occurs here
5 | let r2 = &s; // kein Problem
6 | let r3 = &mut s; // GROSSES PROBLEM
| ^^^^^^ mutable borrow occurs here
7 |
8 | println!("{}, {} und {}", r1, r2, r3);
| -- immutable borrow later used here
5 | let r1 = &s; // kein Problem
| -- immutable borrow occurs here
6 | let r2 = &s; // kein Problem
7 | let r3 = &mut s; // GROSSES PROBLEM
| ^^^^^^ mutable borrow occurs here
8 |
9 | println!("{r1}, {r2} und {r3}");
| ---- immutable borrow later used here

For more information about this error, try `rustc --explain E0502`.
error: could not compile `ownership` (bin "ownership") due to 1 previous error
error: could not compile `playground` (bin "playground") due to 1 previous error
```

Puh! Wir können auch keine veränderbaren Referenzen verwenden, solange wir eine
Expand All @@ -301,11 +301,11 @@ let mut s = String::from("Hallo");
let r1 = &s; // kein Problem
let r2 = &s; // kein Problem
println!("{} und {}", r1, r2);
println!("{r1} und {r2}");
// r1 und r2 werden nach dieser Stelle nicht mehr verwendet
let r3 = &mut s; // kein Problem
println!("{}", r3);
println!("{r3}");
```

Die Gültigkeitsbereiche der unveränderbaren Referenzen `r1` und `r2` enden
Expand Down
Loading

0 comments on commit 02f308a

Please sign in to comment.