version(deprecated)?

monarch_dodra monarchdodra at gmail.com
Mon Nov 5 01:48:47 PST 2012


On Monday, 5 November 2012 at 08:53:48 UTC, Johannes Pfau wrote:
> Am Sun, 04 Nov 2012 16:48:26 +0100
> schrieb "monarch_dodra" <monarchdodra at gmail.com>:
>
>> I'm wondering if there is a way to know you are in deprecated 
>> mode or not?
>> 
>> The deprecated attribute is great, because it gives a clear 
>> compile error (as opposed to a static if, which just hides the 
>> function completely).
>> 
>> But the attribute alone is not enough: I have a class with a 
>> deprecated method, which consumes a book-keeping attribute: 
>> Not only will this attribute exist even though it has become 
>> useless, but the other functions will keep updating this 
>> attribute, even though it has no more consumers.
>> 
>> What's more, I'd still want to unittest that function, but 
>> obviously, only when compiled in "-unittest -d".
>> 
>> So I have a problem.
>> 
>> --------
>> Finding out if the compilation mode is deprecated is easy 
>> enough:
>> 
>> //----
>> deprecated @property void deprecateExists(){}
>> enum deprecatedActive = is(typeof(deprecateExists));
>> //----
>> 
>> The thing is it's kind of dirty, and I wouldn't want to have 
>> to copy paste this in all of my modules, just to know whether 
>> or not deprecation is active...
>> 
>> 
>> --------
>> We've currently implemented "version(assert)" and 
>> "version(debug)". Do you think we should request having a 
>> "version(deprecated)"? I think it would be very helpful. 
>> Thoughts?
>> 
>> 
>
> As deprecated now allows optional messages some folks have 
> suggested to
> make deprecated behave like in other languages: Warn if 
> something
> deprecated is used, do not print warnings if compiling with
> -deprecated.
> This would conflict with your proposed usage of 
> version(deprecated).

Is that even possible? I mean, if I deprecate R.index, then what 
is the value of isRandomAccessRange!R? If I call algorithm 
"find(r1, r2);", then will I get a message I'm using a deprecated 
branch?

Wouldn't the proposal be better served as:
-- : Deprecated stuff just can't be used
-d : You can use deprecated stuff, and you get no warning 
whatsoever
-dw : You can use deprecated stuff, but are served with a warning

In that context, we'd keep a clear [w|w/o] deprecated, and my 
proposal would not conflict either.


More information about the Digitalmars-d mailing list