Improving version(...)
Don
nospam at nospam.com
Mon Oct 18 12:24:48 PDT 2010
Vladimir Panteleev wrote:
> On Mon, 18 Oct 2010 19:15:47 +0300, F. Almeida
> <francisco.m.almeida at gmail.com> wrote:
>
>> The version() { ... } blocks would greatly improve from support of
>> boolean operators, which would make code much more readable.
>>
>> Let us assume, for example, that I have several version identifiers
>> (VERSION1, VERSION2, VERSION3, VERSION4, etc.) and that a block of
>> code may be compiled in the cases of VERSION1 or VERSION3. It would
>> prove the simplest if one could simply use boolean operators to
>> express combinations of valid versions and thus be able to do
>>
>>
>> version(VERSION1 || VERSION3)
>> {
>> // ...
>> }
>
> I remember reading somewhere that this limitation is deliberate.
>
> I believe the reason for this is that programmers with a C background
> will tend to abuse this feature to create near-unreadable code (#ifdef
> mess).
Yes. Unfortunately the current situation doesn't really prevent that.
My opinion (a significant departure from the current situation,
unfortunately):
It should be possible to define version identifiers with booleans.
version EnableFeatureX = !Lite && !Demo;
Possibly:
* make it illegal to define a version identifier from inside a version
{} block.
* disallow duplicate version definitions.
* require declarations for all version identifiers. Versions which are
set from the command line should be explicitly declared, eg:
version Lite = extern;
version Demo = extern;
That would make creating a bird's nest impossible.
And currently, you can make a typo like:
version(Linix) {}
and it compiles happily. I don't like that. Especially when we have
builtin names like D_Inline_Asm_X86_64!
More information about the Digitalmars-d
mailing list