www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - versioning between modules

reply bobef <bobef_member pathlink.com> writes:
When I define version to be something in one module it is not passed to the
imported modules. What I mean:

module asdasda;

version=something;
import somemodule;

version(something) dosome(); //this is executed

------------------------

module somemodule;

version(something) dosome2(); //this is not executed

Am I doing something wrong?
Jan 26 2005
next sibling parent reply J C Calvarese <jcc7 cox.net> writes:
In article <ct91pp$2p5i$1 digitaldaemon.com>, bobef says...
When I define version to be something in one module it is not passed to the
imported modules. What I mean:

module asdasda;

version=something;
import somemodule;

version(something) dosome(); //this is executed

------------------------

module somemodule;

version(something) dosome2(); //this is not executed

Am I doing something wrong?

Yes. "VersionSpecifications and DebugSpecifications apply only to the module they appear in. The only global ones are the predefined ones and any that are specified on the command line." (http://www.digitalmars.com/d/version.html) So you should either specify the version on the command line or set it at the beginning of of each module. jcc7
Jan 26 2005
parent reply bobef <bobef_member pathlink.com> writes:
Yep. This is another reason why D needs preprocessor. What if I don't need the
version globaly and only for one module and modules imported by it? #define
rules.


In article <ct941q$2sfg$1 digitaldaemon.com>, J C Calvarese says...
In article <ct91pp$2p5i$1 digitaldaemon.com>, bobef says...
When I define version to be something in one module it is not passed to the
imported modules. What I mean:

module asdasda;

version=something;
import somemodule;

version(something) dosome(); //this is executed

------------------------

module somemodule;

version(something) dosome2(); //this is not executed

Am I doing something wrong?

Yes. "VersionSpecifications and DebugSpecifications apply only to the module they appear in. The only global ones are the predefined ones and any that are specified on the command line." (http://www.digitalmars.com/d/version.html) So you should either specify the version on the command line or set it at the beginning of of each module. jcc7

Jan 27 2005
next sibling parent John Reimer <brk_6502 yahoo.com> writes:
On Thu, 27 Jan 2005 15:50:31 +0000, bobef wrote:

 Yep. This is another reason why D needs preprocessor. What if I don't need the
 version globaly and only for one module and modules imported by it? #define
 rules.
 

No. D does not need a preprocessor. With a little creativity and familiarity, one can get version to work quite effectively. You just need to look at the problem differently than you would with #define, #ifdef, and #ifndef. D is a new language: it requires looking at things from a different perspective. In truth, version and the C preprocessor don't really have a one-to-one correspondence. I've always disliked what the preprocessor does C/C++ code. It turns it into a nightmare to read. D's version statement is a welcome replacement. - John R.
Jan 27 2005
prev sibling parent "Walter" <newshound digitalmars.com> writes:
"bobef" <bobef_member pathlink.com> wrote in message
news:ctb2k7$2dm5$1 digitaldaemon.com...
 Yep. This is another reason why D needs preprocessor. What if I don't need

 version globaly and only for one module and modules imported by it?

 rules.

You can actually use the C preprocessor (dmpp.exe) on D source code, since the D parser supports #line. The reason that versions are either strictly global or strictly local to a module is so that modules can be parsed independently of how they are imported. They will always parse the same. This is required to support the notion of them being actually imported symbol tables, rather than being a textual inclusion. C++ has run into terrible problems trying to graft import semantics onto its textual inclusion model. D avoids that problem completely. Forcing all intermodule versions to be global will also have the (I think positive) effect of pushing the configuration of the build into one place, instead of the normal C/C++ practice of arbitrarilly distributing them all over the place.
Jan 27 2005
prev sibling parent reply "Ben Hinkle" <ben.hinkle gmail.com> writes:
"bobef" <bobef_member pathlink.com> wrote in message 
news:ct91pp$2p5i$1 digitaldaemon.com...
 When I define version to be something in one module it is not passed to 
 the
 imported modules.

This was discussed before http://www.digitalmars.com/d/archives/digitalmars/D/11981.html One nice idea is to allow both public and private version declarations. Currently D only has private version declarations. Seems like something to bring up again post-1.0.
Jan 27 2005
parent John Reimer <brk_6502 yahoo.com> writes:
On Thu, 27 Jan 2005 12:39:27 -0500, Ben Hinkle wrote:

 "bobef" <bobef_member pathlink.com> wrote in message 
 news:ct91pp$2p5i$1 digitaldaemon.com...
 When I define version to be something in one module it is not passed to 
 the
 imported modules.

This was discussed before http://www.digitalmars.com/d/archives/digitalmars/D/11981.html One nice idea is to allow both public and private version declarations. Currently D only has private version declarations. Seems like something to bring up again post-1.0.

True. That could improve upon the current versioning scheme.
Jan 27 2005