Version declaration proposal

Chris Nicholson-Sauls ibisbasenji at gmail.com
Wed Feb 11 06:32:37 PST 2009


Don wrote:
> I think I have a solution to the versioning problems.
> My belief is that version statements are fine, and Walter's 'rats nest' 
> argument is valid. Instead, I believe that version declarations limited 
> to "version = XXX;" are too weak. They also have syntax which is subtly 
> different to the rest of the language.
> (version = A; version = B; looks as though you're changing the value of 
> the 'version' variable).
> My proposal is therefore:
> 
> --------
> * Keep version statements unchanged.
> * Change version declarations to make them almost identical to bool 
> declarations:
> 
> version _versionidentifier_ = _versionexpression_;
> 
> where _versionexpression_ is a boolean expression involving only true, 
> false, or other version identifiers, and standard boolean operators.
> * If, in addition, we allow:
> 
> version _versionidentifier_ = extern;
> 
> for versions which are supplied from the command line, it can then 
> become illegal to have a version statement referring to an undeclared 
> version identifier.
> (Any version identifier beginning with D_ is implicitly an "= extern;" 
> identifier, so does not need to be declared).
> Another possibile syntax is extern version _versionidentifier_; to make 
> the syntax identical to normal declarations.
> 
> --------
> 
> This addresses a few problems:
> * typos in version identifiers.
> * Comprehensibility. When you see something like:
> version (UseLargeSize) {
> }
> 
> you have no idea if that version identifier declaration is buried in the 
> code somewhere, or whether it is a command-line option. It could even be 
> both!
> * The effect of this would be to encourage you to create a block of 
> version declarations at the start of the module, where they are easy to 
> analyze and refactor.
> * A lint tool could even enforce this, by disallowing any version 
> declarations after the first normal declaration is encountered.
> 
> I believe this would reduce rats-nest versioning, and also eliminate the 
> rats-nesting we have in version declarations right now.
> Is there anything wrong with it?

Looks good to me.

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list