* RE: On obsoleting defcustoms [not found] ` <<83lfh743j8.fsf@gnu.org> @ 2020-11-12 21:37 ` Drew Adams 2020-11-12 21:54 ` Stefan Kangas 2020-11-13 7:46 ` Eli Zaretskii 0 siblings, 2 replies; 12+ messages in thread From: Drew Adams @ 2020-11-12 21:37 UTC (permalink / raw) To: Eli Zaretskii, Stefan Kangas; +Cc: emacs-devel > > Would it make sense to change ignored options such as this into > > defvars instead? > > What problem would that solve? Not all obsolete defcustoms have no > effect, do they? > > > 2. Finding out that an option is obsolete > > > > The obsolete options use a different face. However, it's not obvious > > that this is the meaning of that face. > > IMO, we shouldn't show obsolete options at all in a Custom buffer, for > the same reason why we remove them from the manuals. Just because something is declared obsolete, that doesn't (normally) mean that it's not supported or that it doesn't still work. Dunno whether that's true (always? sometimes? never?) for Emacs. But if it is, then why would it make any more sense to remove customization of an obsolete option that it would to remove advising an obsolete function or setting an obsolete defvar? If people are concerned about someone continuing to use something that's obsolete, why not just have Customize give a warning/message saying that the option is obsolete, and that the effect of changing its value is undefined? That's assuming that Emacs takes the (unusual, IME) point of view that, once declared obsolete, something should no longer be usable. And in that case, the right way to handle it would be to raise an error when it's used. We don't, thankfully, do that. ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: On obsoleting defcustoms 2020-11-12 21:37 ` On obsoleting defcustoms Drew Adams @ 2020-11-12 21:54 ` Stefan Kangas 2020-11-12 22:16 ` Drew Adams 2020-11-13 7:46 ` Eli Zaretskii 1 sibling, 1 reply; 12+ messages in thread From: Stefan Kangas @ 2020-11-12 21:54 UTC (permalink / raw) To: Drew Adams, Eli Zaretskii; +Cc: emacs-devel [[ For context, I have just filed this bug: bug#44598: [PATCH] Do not show obsolete options in customize ]] Drew Adams <drew.adams@oracle.com> writes: > If people are concerned about someone continuing to use > something that's obsolete, why not just have Customize give > a warning/message saying that the option is obsolete That's what we do now. See `M-x customize-group RET browse-url RET' in Emacs 27 for a bad case of what that might look like. > That's assuming that Emacs takes the (unusual, IME) point of > view that, once declared obsolete, something should no longer > be usable. It's still usable with the patch, just not advertised. ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: On obsoleting defcustoms 2020-11-12 21:54 ` Stefan Kangas @ 2020-11-12 22:16 ` Drew Adams 2020-11-13 0:07 ` Stefan Kangas 0 siblings, 1 reply; 12+ messages in thread From: Drew Adams @ 2020-11-12 22:16 UTC (permalink / raw) To: Stefan Kangas, Eli Zaretskii; +Cc: emacs-devel > > If people are concerned about someone continuing to use > > something that's obsolete, why not just have Customize give > > a warning/message saying that the option is obsolete > > That's what we do now. See `M-x customize-group RET browse-url RET' I don't see any such warnings/messages there, until you open the full doc string of an option. If every option in the group is obsolete, and so is the group itself (which should presumably follow), then one might expect a notification at the top (i.e. customize-group) level. > in Emacs 27 for a bad case of what that might look like. What's bad about it? If all of those options still "work", a user should be able to make use of Customize to change their values. And if they don't work then there should be no supporting code, and they'd be unrecognized - raise an error if referenced in any way. Typically, deprecated/obsolete != unsupported. Does Emacs take the point of view that all of this is unsupported? If so, remove its code, so using raises an error. > > That's assuming that Emacs takes the (unusual, IME) point of > > view that, once declared obsolete, something should no longer > > be usable. > > It's still usable with the patch, just not advertised. Not advertising is fine. Telling users, including in the Customize UI, that something is obsolete is also fine. What's not fine, IMO, is to remove it from Customize. If something is removed from Customize then it's not the case that it's still usable with Customize (or Customize is still usable for it). ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: On obsoleting defcustoms 2020-11-12 22:16 ` Drew Adams @ 2020-11-13 0:07 ` Stefan Kangas 2020-11-13 1:59 ` Drew Adams 0 siblings, 1 reply; 12+ messages in thread From: Stefan Kangas @ 2020-11-13 0:07 UTC (permalink / raw) To: Drew Adams, Eli Zaretskii; +Cc: emacs-devel Drew Adams <drew.adams@oracle.com> writes: >> That's what we do now. See `M-x customize-group RET browse-url RET' > > I don't see any such warnings/messages there, until you > open the full doc string of an option. We have the face `custom-variable-obsolete', but indeed the warning is unfortunately only made explicit on the help screen. >> in Emacs 27 for a bad case of what that might look like. > > What's bad about it? There are more obsolete options than relevant ones. (Including, e.g., the options for the now wildly irrelevant Mosaic browser.) > If all of those options still "work", a user should be > able to make use of Customize to change their values. > > And if they don't work then there should be no supporting > code, and they'd be unrecognized - raise an error if > referenced in any way. Typically, deprecated/obsolete != > unsupported. Does Emacs take the point of view that all > of this is unsupported? If so, remove its code, so using > raises an error. The problem is that, AFAICT, it is not really feasible to have a one-size-fits-all for how we go about deprecating options. In some cases it makes sense for them to continue to have effect during the obsoletion period, but in other cases it does not. I for one was bitten by this trying to customize an option that turned out to simply no longer have any effect. Should it have just been removed in this case? Well, it would of course have helped me. But third-party code that tried to use it would get the signal "Symbol's value as variable is void" at run-time, instead of the much gentler byte-compiler warning that it is obsolete. Not showing it in `M-x customize-group' seems like a good compromise. > What's not fine, IMO, is to remove it from Customize. If > something is removed from Customize then it's not the case > that it's still usable with Customize (or Customize is > still usable for it). The current proposal as discussed in the bug will keep both `customize-option' and `customize-saved'. So you can still customize them using customize. ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: On obsoleting defcustoms 2020-11-13 0:07 ` Stefan Kangas @ 2020-11-13 1:59 ` Drew Adams 2020-11-13 3:10 ` Stefan Kangas 2020-11-13 8:16 ` Eli Zaretskii 0 siblings, 2 replies; 12+ messages in thread From: Drew Adams @ 2020-11-13 1:59 UTC (permalink / raw) To: Stefan Kangas, Eli Zaretskii; +Cc: emacs-devel > > And if they don't work then there should be no supporting > > code, and they'd be unrecognized - raise an error if > > referenced in any way. Typically, deprecated/obsolete != > > unsupported. Does Emacs take the point of view that all > > of this is unsupported? If so, remove its code, so using > > raises an error. > > The problem is that, AFAICT, it is not really feasible to have a > one-size-fits-all for how we go about deprecating options. In some > cases it makes sense for them to continue to have effect during the > obsoletion period, but in other cases it does not. > > I for one was bitten by this trying to customize an option > that turned out to simply no longer have any effect. But are you then applying your lesson from that one option to all of these options? Doesn't that contradict your previous paragraph? (And there are likely some non-obsolete options that in some cases have no effect.) But see what I wrote above: if an option no longer works then we should raise an error when it's referenced - it should be desupported. Obsolete should mean still works and is still supported, but is no longer being actively developed. Desupport means the code supporting it is gone and we raise an error instead. > Should it have just been > removed in this case? Well, it would of course have helped me. But > third-party code that tried to use it would get the signal "Symbol's > value as variable is void" at run-time, instead of the much gentler > byte-compiler warning that it is obsolete. It's either one or the other, no? If it doesn't work then users deserve the runtime error. In that case, what good is a byte-compiler message intended to warn you to move away from using it? If it does work, and we just want you to move away from it, then a warning makes sense. What are we warning about? The fact that it might become desupported at some point. That's the point of a deprecation notice and warnings. > Not showing it in `M-x customize-group' seems like a > good compromise. If it no longer works, yes. But in that case we should raise an error, not issue a compiler warning. If it does still work then I see no reason why we'd remove it from `customize-group'. Especially if `customize-option' still works etc. This makes no sense to me. (Just one opinion.) > > What's not fine, IMO, is to remove it from Customize. If > > something is removed from Customize then it's not the case > > that it's still usable with Customize (or Customize is > > still usable for it). > > The current proposal as discussed in the bug will keep both > `customize-option' and `customize-saved'. So you can still customize > them using customize. See above. I don't see how that helps users. ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: On obsoleting defcustoms 2020-11-13 1:59 ` Drew Adams @ 2020-11-13 3:10 ` Stefan Kangas 2020-11-13 5:18 ` Drew Adams 2020-11-13 8:16 ` Eli Zaretskii 1 sibling, 1 reply; 12+ messages in thread From: Stefan Kangas @ 2020-11-13 3:10 UTC (permalink / raw) To: Drew Adams, Eli Zaretskii; +Cc: emacs-devel Drew Adams <drew.adams@oracle.com> writes: > Obsolete should mean still works and is still supported, > but is no longer being actively developed. Desupport > means the code supporting it is gone and we raise an > error instead. Is "desupported" defined in Emacs development? Searching online, I was only able to find that word used in reference to Oracle Database. I think we talk about "making obsolete" and "removing" a variable/function/face, and their definitions are: a) Obsolete means the byte-compiler warns about their use b) Removed means it no longer exists Note that we have many obsolete variables that are declared to be "no longer used", that is, they have no effect. You are free to argue against the status quo, of course, but that is what we have. > If it doesn't work then users deserve the runtime error. I don't think raising a run-time error is wise just because we decided that a variable should have no effect. That would mean gratuitously breaking code that might otherwise be working. It is better to allow for a grace period by raising an obsoletion warning. > I don't see how that helps users. The point IMO is that advertising features that we are planning to remove does not help users. On the contrary, we should recommend moving away from obsolete features. ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: On obsoleting defcustoms 2020-11-13 3:10 ` Stefan Kangas @ 2020-11-13 5:18 ` Drew Adams 0 siblings, 0 replies; 12+ messages in thread From: Drew Adams @ 2020-11-13 5:18 UTC (permalink / raw) To: Stefan Kangas, Eli Zaretskii; +Cc: emacs-devel > > Obsolete should mean still works and is still supported, > > but is no longer being actively developed. Desupport > > means the code supporting it is gone and we raise an > > error instead. > > Is "desupported" defined in Emacs development? Searching online, I > was only able to find that word used in reference to Oracle Database. No idea, and I don't care what terms we use. There's often (usually?) a distinction between these 3 levels of support (these are descriptions, not names): 1. Actively supported and developed. If you file a bug or suggest an enhancement it will likely be looked at, at some point. 2. Not actively supported and developed, but still in the code, still working (but support for fixing bugs may not be there or may be reduced), and maybe even still documented to some extent. 3. Not supported at all. Doesn't work. Not in the code. Not documented (except old doc out on the wild web). Each is a gray area, and different organizations have different policies and draw lines in different places. In principle, at least, #2 is transitional, or at least users are told that the feature _might_ at some point in the future change to status #3. Things may continue to work, but you're recommended to use the preferred alternative/replacement (if any). Since in #3 the feature is absent - doesn't work, you generally get an error if you try somehow to use it. The transition from #1 to #2 is sometimes called deprecation, and in #2 the feature is sometimes called obsolete or deprecated. In #3, the feature no longer exists, and it's sometimes said to be unsupported. The transition from #2 to #3 is sometimes called desupport. There's no obligation to move from #2 to #3, BTW. At least in business, where there can be particularly important customers, some features may be deprecated (move to #2) with no intention or expectation that they will ever really be moved to #3. Users might not be told that, however, since the idea is to get them to abandon the deprecated feature. But some considerations can come into play that make it impossible or undesirable to ever really remove a feature altogether. > I think we talk about "making obsolete" and "removing" a > variable/function/face, and their definitions are: > > a) Obsolete means the byte-compiler warns about their use > b) Removed means it no longer exists OK, that sounds to me like #2 and #3, respectively. > Note that we have many obsolete variables that are declared to be "no > longer used", that is, they have no effect. You are free to argue > against the status quo, of course, but that is what we have. Maybe so. We also have lots of stuff that's called obsolete and that still works - thank goodness, IMO! It may no longer be used much by the distributed Emacs code, but it may well still be used by Emacs users. And even if an obsolete feature is no longer used, that doesn't necessarily mean that it would have no effect if someone did use it. If something really has no effect then there's no reason to warn about using it. There may be, and often is, a reason to retain code that just raises an error for something that's unsupported (which isn't quite the same thing as having no effect, but it's at least not having the expected effect). > > If it doesn't work then users deserve the runtime error. > > I don't think raising a run-time error is wise just because we decided > that a variable should have no effect. That would mean gratuitously > breaking code that might otherwise be working. It is better to allow > for a grace period by raising an obsoletion warning. It sounds like we maybe have different understandings of "have no effect". A variable that has no effect isn't a variable. It's not even an unbound variable. But yes, if you want to remove a variable from having its formerly expected effect, then unbind it so users get an unbound error. A variable that continues to have its expected effect, or at least some semblance of that, and that you're warned/recommended not to continue to use, is just obsolete - it's not yet missing/removed. > > I don't see how that helps users. > > The point IMO is that advertising features that we are planning to > remove does not help users. On the contrary, we should recommend > moving away from obsolete features. Yes, a warning is appropriate in that case. Removing the feature is something else. You're keeping `customize-option' for such a variable, but you're removing it from `customize-group'. To me that's not a great approach, but it's not a big deal. And I wouldn't call keeping either of those customize possibilities "advertising". If you remove the possibility of using an option as an option, i.e., remove its usual customization, then you've removed more than advertising. OK, you've only removed some, not all, possibilities of customizing - just `customize-group', I guess. You did that to reduce noise in the group UI. That's understandable. I suggested instead keeping the obsolete options in the group but showing warnings there for them. Not a big deal anyway. These things aren't hard & fast rules. They're judgment calls. And opinions can differ. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: On obsoleting defcustoms 2020-11-13 1:59 ` Drew Adams 2020-11-13 3:10 ` Stefan Kangas @ 2020-11-13 8:16 ` Eli Zaretskii 1 sibling, 0 replies; 12+ messages in thread From: Eli Zaretskii @ 2020-11-13 8:16 UTC (permalink / raw) To: Drew Adams; +Cc: stefan, emacs-devel > Date: Thu, 12 Nov 2020 17:59:34 -0800 (PST) > From: Drew Adams <drew.adams@oracle.com> > Cc: emacs-devel@gnu.org > > > Not showing it in `M-x customize-group' seems like a > > good compromise. > > If it no longer works, yes. But in that case we > should raise an error, not issue a compiler warning. > > If it does still work then I see no reason why we'd > remove it from `customize-group'. Especially if > `customize-option' still works etc. This makes no > sense to me. (Just one opinion.) Your opinion is noted. I think otherwise, and so does Stefan; others who chimed in didn't think the idea was wrong, either. So let's agree to disagree, and please let's stop arguing about this aspect of the issue. Our decision is that we want to remove the obsolete options from display where that makes sense, to advertise them less. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: On obsoleting defcustoms 2020-11-12 21:37 ` On obsoleting defcustoms Drew Adams 2020-11-12 21:54 ` Stefan Kangas @ 2020-11-13 7:46 ` Eli Zaretskii 1 sibling, 0 replies; 12+ messages in thread From: Eli Zaretskii @ 2020-11-13 7:46 UTC (permalink / raw) To: Drew Adams; +Cc: stefan, emacs-devel > Date: Thu, 12 Nov 2020 13:37:24 -0800 (PST) > From: Drew Adams <drew.adams@oracle.com> > Cc: emacs-devel@gnu.org > > But if it is, then why would it make any more sense to remove > customization of an obsolete option that it would to remove > advising an obsolete function or setting an obsolete defvar? I didn't say we should remove customization of those, I said we should not show them in the "customize group" buffer. > If people are concerned about someone continuing to use > something that's obsolete, why not just have Customize give > a warning/message saying that the option is obsolete, and > that the effect of changing its value is undefined? We already say that, since we show the doc string. > That's assuming that Emacs takes the (unusual, IME) point of > view that, once declared obsolete, something should no longer > be usable. Not "usable", "used". ^ permalink raw reply [flat|nested] 12+ messages in thread
* On obsoleting defcustoms @ 2020-09-18 13:01 Stefan Kangas 2020-09-18 13:28 ` Eli Zaretskii 0 siblings, 1 reply; 12+ messages in thread From: Stefan Kangas @ 2020-09-18 13:01 UTC (permalink / raw) To: emacs-devel I see two issues with how defcustoms are currently being obsoleted. See `M-x customize-group RET dired RET', for example. 1. Why is Emacs offering to customize something that has no effect? See "Dired Free Space Args", whose documentation says: This variable is obsolete since 27.1; ignored, as Emacs uses ‘file-system-info’ instead Would it make sense to change ignored options such as this into defvars instead? (We could keep variables like "Dired Load Hook" as a defcustom, since it still has an effect.) 2. Finding out that an option is obsolete The obsolete options use a different face. However, it's not obvious that this is the meaning of that face. One either has to run `what-cursor-position' to see that the face is named `custom-variable-obsolete', or expand first the option itself, and then its documentation, and then after having seen a couple of examples induce that the face means "obsolete". Could we add some other marker besides just the color to show that these options have been declared obsolete? For example by adding the text "(obsolete)" in a prominent location. Best regards, Stefan Kangas ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: On obsoleting defcustoms 2020-09-18 13:01 Stefan Kangas @ 2020-09-18 13:28 ` Eli Zaretskii 2020-09-18 13:40 ` Stefan Kangas 0 siblings, 1 reply; 12+ messages in thread From: Eli Zaretskii @ 2020-09-18 13:28 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Fri, 18 Sep 2020 06:01:14 -0700 > > Would it make sense to change ignored options such as this into defvars > instead? What problem would that solve? Not all obsolete defcustoms have no effect, do they? > 2. Finding out that an option is obsolete > > The obsolete options use a different face. However, it's not obvious > that this is the meaning of that face. IMO, we shouldn't show obsolete options at all in a Custom buffer, for the same reason why we remove them from the manuals. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: On obsoleting defcustoms 2020-09-18 13:28 ` Eli Zaretskii @ 2020-09-18 13:40 ` Stefan Kangas 0 siblings, 0 replies; 12+ messages in thread From: Stefan Kangas @ 2020-09-18 13:40 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > IMO, we shouldn't show obsolete options at all in a Custom buffer, for > the same reason why we remove them from the manuals. Yes, that is an even better solution. Thank you for pointing it out. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2020-11-13 8:16 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <<CADwFkmm2G=OPOdgadhDk+1uCbHzuqpqaYDs1KgdDes7gXLYgxg@mail.gmail.com> [not found] ` <<83lfh743j8.fsf@gnu.org> 2020-11-12 21:37 ` On obsoleting defcustoms Drew Adams 2020-11-12 21:54 ` Stefan Kangas 2020-11-12 22:16 ` Drew Adams 2020-11-13 0:07 ` Stefan Kangas 2020-11-13 1:59 ` Drew Adams 2020-11-13 3:10 ` Stefan Kangas 2020-11-13 5:18 ` Drew Adams 2020-11-13 8:16 ` Eli Zaretskii 2020-11-13 7:46 ` Eli Zaretskii 2020-09-18 13:01 Stefan Kangas 2020-09-18 13:28 ` Eli Zaretskii 2020-09-18 13:40 ` Stefan Kangas
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).