May 14, 2005 version system: query-change lock idea | ||||
---|---|---|---|---|
| ||||
Attachments: | The current version/debug system has some undefined/unenforced corners. #--- sample 1 --- version(A){ pragma(msg, "everytime"); }else{ version=A; } #------ The "everytime" message will always be displayed. #--- sample 2 ---- version=A; version(A){ version=B; } version(B){ pragma(msg, "sometimes"); } #------ #--- sample 3 ---- version(A){ version=B; } version=A; version(B){ pragma(msg, "sometimes"); } #------ The content of sample 3 is a reordered sample 2. Sample 2 displays the message whereas sample 3 displays nothing. I suggest a query-change lock mechanism to close those corners. The compiler has to ensure that re-evaluating a conditional - "version(A)" - will always have the same result. #--- sample 4 --- version(A){ pragma(msg, "A: true"); } version=A; // ***illegal, the status of A was changed*** #------ #--- sample 5 --- version=A; version(A){ pragma(msg, "A: true"); } version=A; // ***legal, the status of A didn't change *** #------ #--- sample 6 --- version=2; version(2){ pragma(msg, "level >= 2"); } version=3; // ***legal*** #------ true: newLevel >= highestQuery true: highestQuery >= current level #--- sample 7 --- version=1; version(2){ pragma(msg, "level >= 2"); } version=3; // ***illegal*** #------ true: newLevel >= highestQuery false: highestQuery >= currentLevel #--- sample 8 --- version=1; version(2){ pragma(msg, "level >= 2"); } version=0; // ***illegal*** #------ false: newLevel >= highestQuery true: highestQuery >= currentLevel Thomas |
May 15, 2005 Re: version system: query-change lock idea | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kühne | Yeah, I was thinking that too. You're right. |
Copyright © 1999-2021 by the D Language Foundation