docs: expand the explanation for the `[unsafe]` fn tag
parent
6048d0e974
commit
4c7b6ce2fd
20
doc/docs.md
20
doc/docs.md
|
@ -4043,12 +4043,28 @@ fn bar() {
|
||||||
foo() // will not be called if `-d debug` is not passed
|
foo() // will not be called if `-d debug` is not passed
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calls to this function must be in unsafe{} blocks
|
// Calls to following function must be in unsafe{} blocks.
|
||||||
|
// Note that the code in the body of `risky_business()` will still be
|
||||||
|
// checked, unless you also wrap it in `unsafe {}` blocks.
|
||||||
|
// This is usefull, when you want to have an `[unsafe]` function that
|
||||||
|
// has checks before/after a certain unsafe operation, that will still
|
||||||
|
// benefit from V's safety features.
|
||||||
[unsafe]
|
[unsafe]
|
||||||
fn risky_business() {
|
fn risky_business() {
|
||||||
|
// code that will be checked, perhaps checking pre conditions
|
||||||
|
unsafe {
|
||||||
|
// code that *will not be* checked, like pointer arithmetic,
|
||||||
|
// accessing union fields, calling other `[unsafe]` fns, etc...
|
||||||
|
// Usually, it is a good idea to try minimizing code wrapped
|
||||||
|
// in unsafe{} as much as possible.
|
||||||
|
// See also [Memory-unsafe code](#memory-unsafe-code)
|
||||||
|
}
|
||||||
|
// code that will be checked, perhaps checking post conditions and/or
|
||||||
|
// keeping invariants
|
||||||
}
|
}
|
||||||
|
|
||||||
// V's autofree engine will not take care of memory management in this function
|
// V's autofree engine will not take care of memory management in this function.
|
||||||
|
// You will have the responsibility to free memory manually yourself in it.
|
||||||
[manualfree]
|
[manualfree]
|
||||||
fn custom_allocations() {
|
fn custom_allocations() {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue