Rust doesn’t have “safe” and “unsafe” modes in the sense your comment alludes to.
You can just do the little unsafe thing in a function that guarantees its safety, and then the rest of the code is safe.
For example, using C functions from rust is unsafe, but most of the time a simple wrapper can be made safe.
Example C function:
int arraysum(const int *array, int length) {
int sum = 0;
while (length > 0) {
sum += *array;
array++;
length--;
}
}
In rust, you can call that function safely by just wrapping it with a function that makes sure that length
is always the size of array
. Such as:
fn rust_arraysum(array: Vec<i32>) -> i32 {
unsafe{ arraysum(array.as_ptr(), array.len() as i32)}
}
Even though unsafe
is used, it is perfectly safe to do so. And now we can call rust_arraysum
without entering “unsafe mode”
You could do similar wrappers if you want to write your embedded code. Where only a fraction of the code is potentially unsafe.
And even in unsafe blocks, you don’t disable all of the rust checks.
I haven’t done the experiment, I’m curious to know if you can take a random binary compiled for Linux 10 years ago run on the latest version of popular distros. See in which ones it runs.