I wanted some second opinions on an idea I had for D before I made a bugzilla issue.

Currently in D, to have a statement run only in debug mode, you can mark it with the debug keyword. But, there is currently no way to mark a statement so that it only runs in release. So what I propose is a release statement like so:

debug {
    // only runs when -debug is given
}

release {
    // only runs when -release is given
}

Or, if adding a new keyword to the language is a no go, it could be done like so:

debug {
    // only runs when -debug is given
} else {
    // only runs when -release is given
}

I have run into a need for this twice in one day, both having to do with unit tests in phobos. For the first one, I needed a way to make sure that a function is @nogc in release. For the other, the function I was tested had different outputs for release and debug if the input was an empty range, and I had no way to test both cases.

I can think of several other use cases off the top of my head. One, If you have a GUI application that checks for a serial number on startup, there's no reason to do that check in a debug build. Or, if your making a game, there's no reason to do the opening logo crawl before the menu if your using debug mode.

A rebuttal to this might be to just use version and pass something in during compilation. The problem that I have is this is not a solution for the phobos code that I am working on. Also, I think the first example above is very clear code and follows the debug statement's precedent.

Reply via email to