digitalmars.D - -release and -debug are not mutually-exclusive?
- James Dunne (7/7) May 24 2005 Does not having -debug mode imply -release mode?
- Unknown W. Brackets (29/38) May 24 2005 You're misunderstanding the options. I admit this is misleading:
- James Dunne (6/44) May 24 2005 Thank you. That was so clear. You should seriously write documentation...
- Unknown W. Brackets (9/12) May 24 2005 Thanks. I'm glad I was able to help, and as it happens I do write
- James Dunne (6/18) May 24 2005 It's hard to duplicate, but they're linker errors when you forget to com...
- Derek Parnell (20/26) May 24 2005 The -debug switch is poorly named as it is confusing. One tends to think...
- James Dunne (10/36) May 25 2005 Shouldn't this be changed to the traditional debug/release dichotomy?
- Unknown W. Brackets (7/7) May 25 2005 But, then, what enables sections like this:
- Derek Parnell (9/20) May 25 2005 I think that -debug should have been named differently. It's too late no...
Does not having -debug mode imply -release mode? Does not having -release mode imply -debug mode? It seems there is some intermediate mode here which is neither release nor debug which is causing some headaches with missing _assert functions during linking. I think this needs to be fixed. Either have -release or -debug. Regards, James Dunne
May 24 2005
You're misunderstanding the options. I admit this is misleading: -debug compile in debug code -release compile release version But, it's really this simple: Debug means anything in debug {} sections. Release means no asserts, no dbc, etc. No release, no debug means asserts, dbc, etc... but no code in debug {}. Debug and release means no asserts, no dbc, but code in debug {} compiled in. So, no - they are not mutually exclusive. They only change the default behavior in different ways. For a more visual example, this code: int main() { debug printf("hello!"); assert(0); return 0; } When compiled with no paramaters (just dmd test) will fail with an assertion error. When compiled with -debug, it will say: hello! And then fail with an assertion failure. When compiled with -release, it will output nothing and return to the prompt happy as can be. When compiled with -release -debug, it will say: hello! And then return to the prompt happy as can be, no assertion failure. -[Unknown]Does not having -debug mode imply -release mode? Does not having -release mode imply -debug mode? It seems there is some intermediate mode here which is neither release nor debug which is causing some headaches with missing _assert functions during linking. I think this needs to be fixed. Either have -release or -debug. Regards, James Dunne
May 24 2005
Thank you. That was so clear. You should seriously write documentation. But still, what is with the missing _assert functions? Is this just a phobos compilation problem? In article <d6vg7t$1jqp$1 digitaldaemon.com>, Unknown W. Brackets says...You're misunderstanding the options. I admit this is misleading: -debug compile in debug code -release compile release version But, it's really this simple: Debug means anything in debug {} sections. Release means no asserts, no dbc, etc. No release, no debug means asserts, dbc, etc... but no code in debug {}. Debug and release means no asserts, no dbc, but code in debug {} compiled in. So, no - they are not mutually exclusive. They only change the default behavior in different ways. For a more visual example, this code: int main() { debug printf("hello!"); assert(0); return 0; } When compiled with no paramaters (just dmd test) will fail with an assertion error. When compiled with -debug, it will say: hello! And then fail with an assertion failure. When compiled with -release, it will output nothing and return to the prompt happy as can be. When compiled with -release -debug, it will say: hello! And then return to the prompt happy as can be, no assertion failure. -[Unknown]Regards, James DunneDoes not having -debug mode imply -release mode? Does not having -release mode imply -debug mode? It seems there is some intermediate mode here which is neither release nor debug which is causing some headaches with missing _assert functions during linking. I think this needs to be fixed. Either have -release or -debug. Regards, James Dunne
May 24 2005
Thank you. That was so clear. You should seriously write documentation.Thanks. I'm glad I was able to help, and as it happens I do write (development) documentation ;). For my own project, that is. But mostly I code.But still, what is with the missing _assert functions? Is this just a phobos compilation problem?_assert functions? I'm afraid I don't know what you mean. I know there's no _assert, but rather assert (built into the language.) As for phobos, it's compiled in -release mode by default, which imho isn't how I'd like it. Ideally, I would have it use phobos in release only when I compile in release. Maybe "phobos-release.lib"/.a. -[Unknown]
May 24 2005
In article <d702j1$2aao$1 digitaldaemon.com>, Unknown W. Brackets says...It's hard to duplicate, but they're linker errors when you forget to compile with -release mode and have asserts in your code I believe.Thank you. That was so clear. You should seriously write documentation.Thanks. I'm glad I was able to help, and as it happens I do write (development) documentation ;). For my own project, that is. But mostly I code.But still, what is with the missing _assert functions? Is this just a phobos compilation problem?_assert functions? I'm afraid I don't know what you mean. I know there's no _assert, but rather assert (built into the language.)As for phobos, it's compiled in -release mode by default, which imho isn't how I'd like it. Ideally, I would have it use phobos in release only when I compile in release. Maybe "phobos-release.lib"/.a.I agree.-[Unknown]Regards, James Dunne
May 24 2005
On Tue, 24 May 2005 13:31:06 +0000 (UTC), James Dunne wrote:Does not having -debug mode imply -release mode? Does not having -release mode imply -debug mode? It seems there is some intermediate mode here which is neither release nor debug which is causing some headaches with missing _assert functions during linking. I think this needs to be fixed. Either have -release or -debug.The -debug switch is poorly named as it is confusing. One tends to think in the release-debug dichotomy, that is, its either one or the other and never both. In fact, the -debug is exactly equivalent to the -version switch in functionality. It is really just another *type* of -version switch. It has no other meaning or usage except to include blocks of code enclosed in 'debug' statements, just like -version is used to include blocks of code enclosed by 'version' statements. The switch "-debug" has no effect on asserts, array-bounds testing, or contracts (or unit tests). It only includes those blocks of code that you have enclosed in debug statements. The switch "-release" effects asserts, array-bounds testing, and contracts (but not unit tests). By default these are all active unless you compile with "-release". The switch "-unittest" causes unittest statement blocks to be compiled in. By default these blocks are not compiled. -- Derek Parnell Melbourne, Australia 25/05/2005 6:50:00 AM
May 24 2005
In article <55k5c5vx3sib$.17niib7t09wqa$.dlg 40tude.net>, Derek Parnell says...On Tue, 24 May 2005 13:31:06 +0000 (UTC), James Dunne wrote:Shouldn't this be changed to the traditional debug/release dichotomy? For example: -debug enables asserts, contracts, debug statements, and array bounds checking. -release disables all asserts, contracts, debug statements, and array bounds checking. and set -debug mode to default. I think this would be clearer. It feels like a 'gotcha' right now. Regards, James DunneDoes not having -debug mode imply -release mode? Does not having -release mode imply -debug mode? It seems there is some intermediate mode here which is neither release nor debug which is causing some headaches with missing _assert functions during linking. I think this needs to be fixed. Either have -release or -debug.The -debug switch is poorly named as it is confusing. One tends to think in the release-debug dichotomy, that is, its either one or the other and never both. In fact, the -debug is exactly equivalent to the -version switch in functionality. It is really just another *type* of -version switch. It has no other meaning or usage except to include blocks of code enclosed in 'debug' statements, just like -version is used to include blocks of code enclosed by 'version' statements. The switch "-debug" has no effect on asserts, array-bounds testing, or contracts (or unit tests). It only includes those blocks of code that you have enclosed in debug statements. The switch "-release" effects asserts, array-bounds testing, and contracts (but not unit tests). By default these are all active unless you compile with "-release". The switch "-unittest" causes unittest statement blocks to be compiled in. By default these blocks are not compiled. -- Derek Parnell Melbourne, Australia 25/05/2005 6:50:00 AM
May 25 2005
But, then, what enables sections like this: debug { writef("test!"); } Or are you saying they should just be removed? Or always compiled in? -[Unknown]
May 25 2005
On Wed, 25 May 2005 13:37:04 +0000 (UTC), James Dunne wrote: [snip]Shouldn't this be changed to the traditional debug/release dichotomy? For example: -debug enables asserts, contracts, debug statements, and array bounds checking. -release disables all asserts, contracts, debug statements, and array bounds checking. and set -debug mode to default. I think this would be clearer. It feels like a 'gotcha' right now.I think that -debug should have been named differently. It's too late now for it to change, I guess, so we just have to live with the confusion it is always going to cause. -- Derek Parnell Melbourne, Australia 26/05/2005 5:49:26 AM
May 25 2005