release disables bounds checking on non- at safe code?

monarch_dodra monarchdodra at gmail.com
Wed Apr 9 01:45:45 PDT 2014


On Wednesday, 9 April 2014 at 08:22:20 UTC, Gary Willoughby wrote:
> According to this issue: 
> https://issues.dlang.org/show_bug.cgi?id=12550
>
> -release disables bounds checking on non- at safe code? Is this 
> correct?

Correct.

> If the above is true and apart from removing asserts what else 
> does -release do?

release means:
assert/preconditions/invariants are stripped from everything.
bounds checking in @system [*] code is removed.

That's it. (AFAIK). It doesn't actually optimize your code or 
anything.

The option "-noboundscheck" can be used to deactivate bounds 
checking altogether, in either @safe code, or simply all code in 
non-release.

[*] An interesting "hack" is that @trusted code is considered 
"system code that can be used in safe code".

As such, if you need safe code that runs fast, you can mark it as 
@trusted instead. This will deactivate *its* bounds checking, 
without affecting the otherwise global bounds checking 
configurations.

There's another hack to mark your code as trusted, and use 
"slice.ptr[index]" to bypass bounds checking altogether. Use with 
caution :D !


More information about the Digitalmars-d-learn mailing list