On Sat, 05 Dec 2015 23:06:22 +0000, Andrew LaChance wrote: > I was reading a blog post here: http://3d.benjamin-thaut.de/?p=20 which > mentions: > > "Calls to the druntime invariant handler are emitted in release build > also and there is no way to turn them off. Even if the class does not > have any invariants the invariant handler will always be called, walk > the class hirarchy and generate multiple cache misses without actually > doing anything." > > I was curious if this was still true today (the post was written 3 years > ago in Sept 2012). > > Thanks!
It's not true today, as you can test yourself: class Foo { invariant { assert(false); } string str() { return this.toString; } } void main() { import std.stdio; writeln(new Foo().str); } $ rdmd invar.d core.exception.AssertError@invar.d(3): Assertion failure $ rdmd -release invar.d invar.Foo I've never used a release build of anything. Bounds checking isn't that expensive.