rust / intermediate
Snippet
Unsafe Rust: Rohe Pointer und FFI
Unsafe Rust ermöglicht fünf zusätzliche Fähigkeiten: Rohe Pointer-Dereferenzierung, Aufrufen von unsafe Funktionen, Zugriff auf mutable Statics, Implementieren von externen Traits und Zugriff auf mutable Referenzen in Inline-Assembly. Der unsafe Block teilt dem Compiler mit 'Ich verspreche, dass dies sicher ist.'
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
fn main() {let mut values = [1, 2, 3, 4, 5];let ptr = values.as_mut_ptr();let len = values.len();let capacity = values.capacity();unsafe {for i in 0..len {*ptr.add(i) *= 2;}println!("Doubled via raw pointer: {:?}", values);}extern "C" {fn abs(input: i32) -> i32;}let negative = -42;let absolute = unsafe { abs(negative) };println!("Absolute value of {}: {}", negative, absolute);unsafe fn dangerous_operation() -> i32 {println!("This function is unsafe!");42}let result = unsafe { dangerous_operation() };println!("Unsafe function result: {}", result);}
Erklärung
1
values.as_mut_ptr()
Erhält rohen mutable Pointer; kein Lifetime-Tracking
2
*ptr.add(i) *= 2
Dereferenziert und modifiziert; erfordert unsafe Block
3
extern "C" { fn abs }
FFI-Deklaration; ruft C Standard-Bibliotheksfunktion auf
4
unsafe fn dangerous_operation()
Funktion als unsafe markiert; Aufrufer muss unsafe Block verwenden
5
unsafe { abs(...) }
Aufruf einer unsafe externen Funktion erfordert unsafe Block