memcopy! and memset! intrinsics
This commit is contained in:
+19
@@ -180,6 +180,25 @@ infinity/NaN behavior.
|
||||
Only these six division bang calls select integer-division behavior. Bare calls such as
|
||||
`divfloor(a, b)` and qualified calls such as `math.divfloor(a, b)` resolve to ordinary functions.
|
||||
|
||||
#### typed memory operations
|
||||
|
||||
`memcopy!(destination, source)` and `memset!(destination, value)` are available at runtime and
|
||||
comptime. A destination must be a mutable slice or mutable pointer-to-array. A `memcopy!` source
|
||||
may be a slice or pointer-to-array; many-item pointers must first be sliced. Array pointers are
|
||||
treated as regions containing their explicit logical elements, including a sentinel only when it
|
||||
is part of that array region.
|
||||
|
||||
`memcopy!` requires the same element type after alias resolution and the same element count. Its
|
||||
non-empty regions must not overlap. Comptime calls diagnose unequal lengths and overlap; runtime
|
||||
calls trap for either condition or if the element count cannot be converted to a byte count.
|
||||
Zero-sized elements still require equal counts. Empty copies are no-ops and may name the same
|
||||
region.
|
||||
|
||||
`memset!` coerces `value` to the destination element type. Use `memset!(destination, 0)` to zero a
|
||||
region; there is no separate `memzero!`, and `memset!` does not promise secure zeroing. Copying or
|
||||
filling with `undefined` transfers undefined state without reading it. Each operand is evaluated
|
||||
exactly once. Bare functions named `memcopy` or `memset` remain ordinary user functions.
|
||||
|
||||
### functions, C interop, and linking
|
||||
|
||||
- demand-monomorphized Brolang and C-ABI functions
|
||||
|
||||
Reference in New Issue
Block a user