1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-06-27 19:18:59 +02:00
Files
comprehensive-rust/src/why-rust/compile-time.md

34 lines
1.1 KiB
Markdown
Raw Normal View History

2022-12-21 16:36:30 +01:00
# Compile Time Guarantees
Static memory management at compile time:
* No uninitialized variables.
* No memory leaks (_mostly_, see notes).
2022-12-21 16:36:30 +01:00
* No double-frees.
* No use-after-free.
* No `NULL` pointers.
* No forgotten locked mutexes.
* No data races between threads.
* No iterator invalidation.
2022-12-22 14:03:18 +01:00
<details>
It is possible to produce memory leaks in (safe) Rust. Some examples
are:
* You can for use [`Box::leak`] to leak a pointer. A use of this could
be to get runtime-initialized and runtime-sized static variables
* You can use [`std::mem::forget`] to make the compiler "forget" about
a value (meaning the destructor is never run).
* You can also accidentally create a [reference cycle] with `Rc` or
`Arc`.
For the purpose of this course, "No memory leaks" should be understood
as "Pretty much no *accidental* memory leaks".
[`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method.leak
[`std::mem::forget`]: https://doc.rust-lang.org/std/mem/fn.forget.html
[reference cycle]: https://doc.rust-lang.org/book/ch15-06-reference-cycles.html
</details>