On Sunday 10 July 2011 21:54:42 Jonathan M Davis wrote:
> On Monday 11 July 2011 14:26:32 Daniel Murphy wrote:
> > "Jonathan M Davis" <jmdavisp...@gmx.com> wrote in message
> > news:mailman.1520.1310357559.14074.digitalmars-d-annou...@puremagic.com.
> > ..
> > 
> > > Now, if deprecated were improved to take a message (and to allow for
> > > soft
> > > deprecation, since the messages printing here are about stuff being
> > > scheduled
> > > for deprecation rather than actually being deprecated yet), then
> > > maybe
> > > they
> > > could give a useful file and line number (at least for the
> > > functions),
> > > since
> > > then the compiler would know that a function was scheduled for
> > > deprecation and
> > > could warn you about using it. But since the best that we have for
> > > that
> > > is pragmas, that doesn't work. And actually, without that sort of
> > > feature, any
> > > function that isn't a template can't even have such a message - at
> > > best
> > > it can
> > > have a note in the documentation.
> > 
> > Would the following cover all the common use cases? (Phobos seems to be
> > the biggest user of deprecated so far)
> > 
> > deprecated("message") int a;
> > deprecated("message", warn) int b;
> > 
> > With deprecated(warn) messages only being displayed with warnings
> > enabled.
> 
> No. That's not quite right. If something is actually deprecated, -d is
> required to compile using it. Being able to have a message with it - e.g.
> deprecated("message") - would be very useful, because it could tell you what
> you're supposed to use instead (or that nothing is replacing it if that's
> the case). Error vs warning has nothing to do with it. Now, it could be
> that compiling with -w would result in the message being printed even if
> you compiled with -d, but that's debatable.
> 
> In the case of something which is scheduled for deprecation, the code should
> compile regardless. A message would print if that symbol were used, but
> beyond that, nothing happens. That _could_ be made so that it only prints
> when you compile with -w, and if it's classified as a warning, then that
> would make sense, except that it shouldn't stop compilation even if
> compiling with -w, so it can't really follow what warnings normally do with
> -w. So, how it should function with regards to -w is debatable.
> 
> Essentially, what's needed is the ability to give a message to the deprecate
> attribute _and_ the ability to make the deprecation "soft" when it's
> something which is scheduled for deprecation and not yet actually
> deprecated. e.g.
> 
> deprecated("message", hard)
> deprecated("message", soft)
> 
> or maybe
> 
> deprecated("message", full)
> deprecated("message", scheduled)
> 
> Obviously, the message can't be required, and the default if no deprecation
> type was given (soft or hard) would be hard so that you could still use
> deprecated the way that we do now. But by allowing for the extra arguments,
> it would be possible give a message for full/hard deprecation as well as
> indicate that something is only scheduled for deprecation.
> 
> With that implemented, it would fix the problem for functions, but I'm not
> sure that it would fix the problem for modules. That would depend on how it
> was implemented. As it stands, if you deprecate an entire module, you end
> up doing something like
> 
> deprecated:
> 
> at the top of the module, which is then going to complain about each symbol
> in the model individually when you use it. Ideally, you could make it
> complain about the module when it's imported (and then maybe the specific
> functions on top of that), and that syntax doesn't really give you that. It
> just makes it complain about the symbols when you use them. But that can
> work too.

*Sigh* I really need to kill the shortcut in my e-mail client for sending 
messages. I was about to say that an implementation of 
http://d.puremagic.com/issues/show_bug.cgi?id=5481  _is_ essentially what we 
need but that your example seems to show a lack of understanding of the 
feature (particularly with regards to "scheduled for deprecation" rather than 
full deprecation).

- Jonathan M Davis

Reply via email to