digitalmars.D - -debug and -release
- lurker (5/5) May 27 2007 What does it mean to compile a file with -debug and -release switches? L...
- Sean Kelly (8/14) May 27 2007 IIRC the -release flag turns off contracts and array range checking
- Manfred Nowak (5/6) May 27 2007 Lurker probably has lurked at my other thread.
- Daniel Keep (17/27) May 27 2007 I've never really had a problem with -debug and -release; one enables
- Manfred Nowak (12/14) May 27 2007 Alright. But that should hold for every peace of documentation. Under
- Derek Parnell (13/31) May 27 2007 Of course it should, but because it doesn't apply to some parts of the D
- Charlie (7/29) May 27 2007 I dislike how -release strips out contracts, its often valuable to have
- janderson (10/19) May 27 2007 I agree in part. I think there should be debug, release, and final.
- Manfred Nowak (4/6) May 28 2007 Are you able to give some reasonings for the value that is lost by
- Lars Ivar Igesund (9/10) May 29 2007 FWIW, Sean committed an alternative solution to the Tango runtime a few ...
- Myron Alexander (7/17) May 27 2007 Please no. I like my code tight and solid, none of this airy, fluffy cod...
- Derek Parnell (30/36) May 27 2007 The compiler accepts both because they are not opposites of each other,
- Derek Parnell (27/27) May 27 2007 On Mon, 28 May 2007 08:09:39 +1000, Derek Parnell wrote:
- Don Clugston (10/49) May 29 2007 Maybe something like -nochecks would be a better name for -release.
- Regan Heath (3/5) May 29 2007 Perhaps we want a table of things with the various compile flags which e...
- Tomas Lindquist Olsen (16/25) May 30 2007 Until that happens, you can look inside the 'dmd/mars.c' file of the dmd
What does it mean to compile a file with -debug and -release switches? Like so: $ echo "void main() {}" > test.d $ dmd -debug -release test.d Why the compiler accepts both and doesn't complaint? Thanks.
May 27 2007
lurker wrote:What does it mean to compile a file with -debug and -release switches? Like so: $ echo "void main() {}" > test.d $ dmd -debug -release test.d Why the compiler accepts both and doesn't complaint?IIRC the -release flag turns off contracts and array range checking while -debug enables code in debug blocks. I think -release may turn off asserts as well. I think -release is probably a bad name for that particular flag since control of contracts and such isn't really a release option. The name is also confusing because of its application to other languages like C/C++. Sean
May 27 2007
Sean Kelly wroteI think -release is probably a bad nameLurker probably has lurked at my other thread. I really think -dmc or -airy are good names. -dmc may stand for "DeMilitarized Code" also. -manfred
May 27 2007
Manfred Nowak wrote:Sean Kelly wroteI've never really had a problem with -debug and -release; one enables debugging code and the other strips out testing code for release. Reading the documentation makes it pretty clear what -debug and -release do. On the other hand, -dmc looks like it enables support for DigitalMars C (which doesn't really make any sense), and my first thought when I saw -airy was "...maybe it has something to do with birds?" -- Daniel -- int getRandomNumber() { return 4; // chosen by fair dice roll. // guaranteed to be random. } http://xkcd.com/ v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP http://hackerkey.com/I think -release is probably a bad nameLurker probably has lurked at my other thread. I really think -dmc or -airy are good names. -dmc may stand for "DeMilitarized Code" also. -manfred
May 27 2007
Daniel Keep wroteReading the documentation makes it pretty clear what -debug and -release do.Alright. But that should hold for every peace of documentation. Under this argument one can use names without any meaning or that language from "1984". I think Walters faible for avoiding negations released this option under the name "-release" to the public. But from formal languages one should know, that some language categories are not closed under complement. Therefore trying to avoid generic complements by always using a positive description might turn out to be hard to understand, because that positive descriptuion might fall into a language category with higher computational needs. -manfred
May 27 2007
On Sun, 27 May 2007 20:25:18 +0000 (UTC), Manfred Nowak wrote:Daniel Keep wroteOf course it should, but because it doesn't apply to some parts of the D documentation does not mean that it therefore doesn't apply to all of the D documentation. The docs re -debug and -release are fairly accurate and complete even though other areas are well below what is needed.Reading the documentation makes it pretty clear what -debug and -release do.Alright. But that should hold for every peace of documentation.Under this argument one can use names without any meaning or that language from "1984". I think Walters faible for avoiding negations released this option under the name "-release" to the public. But from formal languages one should know, that some language categories are not closed under complement. Therefore trying to avoid generic complements by always using a positive description might turn out to be hard to understand, because that positive descriptuion might fall into a language category with higher computational needs.Rough translation: "-release" is a poor choice for this functionality. I agree, but I've gotten used to it now. -- Derek Parnell Melbourne, Australia "Justice for David Hicks!" skype: derek.j.parnell
May 27 2007
I dislike how -release strips out contracts, its often valuable to have contracts left in even in a release build. I believe the front end even has specific flags for disabling contracts and asserts, I don't think Walter accepted the user submitted patch though. And while we're on the topic whatever happen to Gregor's unittest patch ? Charlie Daniel Keep wrote:Manfred Nowak wrote:Sean Kelly wroteI've never really had a problem with -debug and -release; one enables debugging code and the other strips out testing code for release. Reading the documentation makes it pretty clear what -debug and -release do. On the other hand, -dmc looks like it enables support for DigitalMars C (which doesn't really make any sense), and my first thought when I saw -airy was "...maybe it has something to do with birds?" -- DanielI think -release is probably a bad nameLurker probably has lurked at my other thread. I really think -dmc or -airy are good names. -dmc may stand for "DeMilitarized Code" also. -manfred
May 27 2007
Charlie wrote:I dislike how -release strips out contracts, its often valuable to have contracts left in even in a release build. I believe the front end even has specific flags for disabling contracts and asserts, I don't think Walter accepted the user submitted patch though.I agree in part. I think there should be debug, release, and final. Final should have all assets removed but they should remain in release. If you still want them in final then the user should specify -unittest. In general I see a release as something you release internally to QA and other users. Final is something you send to a publisher or to the public. Another thing. Often I've seen 3 types of runtime-assets. assert //debug only release_assert final_assertAnd while we're on the topic whatever happen to Gregor's unittest patch ? Charlie
May 27 2007
Charlie wroteits often valuable to have contracts left in even in a release build.Are you able to give some reasonings for the value that is lost by disabling contracts, when a binary is given into production? -manfred
May 28 2007
Charlie wrote:And while we're on the topic whatever happen to Gregor's unittest patch ?FWIW, Sean committed an alternative solution to the Tango runtime a few days ago. -- Lars Ivar Igesund blog at http://larsivi.net DSource, #d.tango & #D: larsivi Dancing the Tango
May 29 2007
Manfred Nowak wrote:Sean Kelly wrotePlease no. I like my code tight and solid, none of this airy, fluffy code :) On a serious note, I think this is one of those cases where it's a subjective thing. When I saw dmc, I thought "use digital mars c" and "DeMilitarized Code" does not, for me, imply anything. Same for "airy". Regards, Myron.I think -release is probably a bad nameLurker probably has lurked at my other thread. I really think -dmc or -airy are good names. -dmc may stand for "DeMilitarized Code" also. -manfred
May 27 2007
On Sun, 27 May 2007 14:15:13 -0400, lurker wrote:What does it mean to compile a file with -debug and -release switches? Like so: $ echo "void main() {}" > test.d $ dmd -debug -release test.d Why the compiler accepts both and doesn't complaint?The compiler accepts both because they are not opposites of each other, despite what one may think just knowing the English terms. "-debug" functionality is almost exactly like the "-version" switch. It actually has nothing intrinsic to with debugging other than identifying sections of code as ones in which the author nominates, and thus presumably intends, to be debugging code. But the code can contain anything at all. These sections of code are brought into the compilation process in exactly the same way as sections identified using the version construct. In fact, one can use "version(XXX){}" and "debug(XXX){}" interchangeably. In other words ... debug(ABC) { ... } is functionally identical to version(ABC) { ... } The purpose of using "debug" rather than "version" is just to highlight to readers of the source code the sections that are intended to be debugging stuff. There is nothing 'magic' about "-debug". "-release" controls whether or not built-in and user-defined checks are excluded from the compilation. If you do not have "-release" the compiler adds array bounds checking, assert() functionality, invariant blocks in classes, and in/out blocks in functions. If you use "-release" such functionality is ignored by the compiler. Presumably the name "release" is being associated with the desire to remove time consuming run time checks in a program that has been debugged and is ready now for production release. -- Derek Parnell Melbourne, Australia "Justice for David Hicks!" skype: derek.j.parnell
May 27 2007
On Mon, 28 May 2007 08:09:39 +1000, Derek Parnell wrote: Furthermore, to illustrate the similarities between -version and -debug ... module xyz; debug { import std.stdio; } void main() { debug { std.stdio.writefln("Starting"); } } ---------- dmd -debug xyz.d is identical in function to ... module xyz; version(debug) { import std.stdio; } void main() { version(debug) { std.stdio.writefln("Starting"); } } ---------- dmd -version=debug xyz.d So it could be said that "-debug" is sort of a shorthand for "-version(debug)". -- Derek (skype: derek.j.parnell) Melbourne, Australia "Justice for David Hicks!" 28/05/2007 11:52:15 AM
May 27 2007
Derek Parnell wrote:On Sun, 27 May 2007 14:15:13 -0400, lurker wrote:What does it mean to compile a file with -debug and -release switches? Like so: $ echo "void main() {}" > test.d $ dmd -debug -release test.d Why the compiler accepts both and doesn't complaint?The compiler accepts both because they are not opposites of each other, despite what one may think just knowing the English terms. "-debug" functionality is almost exactly like the "-version" switch. It actually has nothing intrinsic to with debugging other than identifying sections of code as ones in which the author nominates, and thus presumably intends, to be debugging code. But the code can contain anything at all. These sections of code are brought into the compilation process in exactly the same way as sections identified using the version construct. In fact, one can use "version(XXX){}" and "debug(XXX){}" interchangeably. In other words ... debug(ABC) { ... } is functionally identical to version(ABC) { ... } The purpose of using "debug" rather than "version" is just to highlight to readers of the source code the sections that are intended to be debugging stuff. There is nothing 'magic' about "-debug"."-release" controls whether or not built-in and user-defined checks are excluded from the compilation. If you do not have "-release" the compiler adds array bounds checking, assert() functionality, invariant blocks in classes, and in/out blocks in functions. If you use "-release" such functionality is ignored by the compiler. Presumably the name "release" is being associated with the desire to remove time consuming run time checks in a program that has been debugged and is ready now for production release.Maybe something like -nochecks would be a better name for -release. At least, the command line description should change -quiet suppress unnecessary messages -release compile release version That's really not helpful! How about: -release do not generate runtime checks I only just discovered that assert(0) is _not_ disabled by -release. I didn't find that mentioned in the documentation.
May 29 2007
Don Clugston Wrote:I only just discovered that assert(0) is _not_ disabled by -release. I didn't find that mentioned in the documentation.Perhaps we want a table of things with the various compile flags which enable/disable them in the docs. Similar to the comparison table for structs, classes, etc. Regan Heath
May 29 2007
Regan Heath wrote:Don Clugston Wrote:Until that happens, you can look inside the 'dmd/mars.c' file of the dmd frontend source code. The options parsing happens here and it's fairly easy to follow. For example the -release flag does this: ... snip ... else if (strcmp(p + 1, "release") == 0) global.params.release = 1; ... snip ... if (global.params.release) { global.params.useInvariants = 0; global.params.useIn = 0; global.params.useOut = 0; global.params.useAssert = 0; global.params.useArrayBounds = 0; global.params.useSwitchError = 0; }I only just discovered that assert(0) is _not_ disabled by -release. I didn't find that mentioned in the documentation.Perhaps we want a table of things with the various compile flags which enable/disable them in the docs. Similar to the comparison table for structs, classes, etc. Regan Heath
May 30 2007