37 lines
1.2 KiB
Zig
37 lines
1.2 KiB
Zig
// Zig provides a level of safety, where problems may be found during execution.
|
|
// Safety can be left on, or turned off.
|
|
// Zig has many cases of so-called `detectable illegal behaviour`,
|
|
// meaning that illegal behaviour will be caught (causing a panic) with safety on,
|
|
// but will result in undefined behaviour with safety off.
|
|
// Users are strongly recommended to develop and test their software with safety on, despite its speed penalties.
|
|
|
|
// For example, runtime safety protects you from out of bounds indices.
|
|
|
|
test "out of bounds" {
|
|
const a = [3]u8{ 1, 2, 3 };
|
|
var index: u8 = 5;
|
|
const b = a[index];
|
|
|
|
_ = b;
|
|
index = index;
|
|
}
|
|
|
|
// test "out of bounds"...index out of bounds
|
|
// .\tests.zig:43:14: 0x7ff698cc1b82 in test "out of bounds" (test.obj)
|
|
// const b = a[index];
|
|
// ^
|
|
|
|
// The user may disable runtime safety for the current block using the built-in function `@setRuntimeSafety`.
|
|
test "out of bounds, no safety" {
|
|
@setRuntimeSafety(true);
|
|
// defer @setRuntimeSafety(false);
|
|
const a = [3]u8{ 1, 2, 3 };
|
|
var index: u8 = 5;
|
|
const b = a[index]; // no panic
|
|
|
|
_ = b;
|
|
index = index; // no panic
|
|
}
|
|
|
|
// Safety is off for some build modes (to be discussed later).
|