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