<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Are we back in a position where a different attribute (back to <font face="Menlo" class="">@restricted</font><font style="color: rgb(255, 64, 19);" class=""> </font>or similar keyword) would clear up the readability concerns?</div><div class=""><br class=""></div><div class="">The current equivalent in <font face="Menlo" class="">@available</font> terms:</div><div class=""><br class=""></div><div class="">Short form:</div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX 10.8, iOS 8.0, *)</font></div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(tvOS, unavailable)</font></div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(watchOS, unavailable)</font></div><div class=""><br class=""></div><div class="">Long form:</div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX, introduced: 10.8,&nbsp;</font><span style="font-family: Menlo;" class="">deprecated: 10.10</span><span style="font-family: Menlo;" class="">)</span></div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(iOS, introduced: 8.0,&nbsp;</font><span style="font-family: Menlo;" class="">deprecated: 8.4, obsoleted: 9.0</span><span style="font-family: Menlo;" class="">)</span></div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(tvOS, unavailable)</font></div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(watchOS, unavailable)</font></div><div class=""><span style="color: rgb(255, 64, 19);" class=""><br class=""></span></div><div class=""><div class="">Short form replacement:</div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>@restricted(OSX 10.8, iOS 8.0) // Restricted to OSX, iOS from 10.8 and 8.0, respectively.</font></div><div class=""><br class=""></div><div class="">Long form replacement:</div><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>@restricted(OSX, introduced: 10.8, deprecated: 10.10)</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; @restricted(iOS, introduced: 8.0, deprecated: 8.4, obsoleted: 9.0)</font></div></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class="">I would amend the draft proposal:&nbsp;<font face="Menlo" class="">*</font>&nbsp;would not be permitted with&nbsp;<span style="font-family: Menlo;" class="">@restricted</span>. The rationale being that if you are restricting to <i class="">everything, </i>or marking everything as unavailable,&nbsp;<font face="Menlo" class="">@available(*,unavailable)&nbsp;</font>is a better candidate.</div><div class=""><font color="#ff4013" face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" color="#3a88fe" class="">Stuart</font></div><br class=""><div><blockquote type="cite" class=""><div class="">On 27 May 2016, at 11:06, Brent Royal-Gordon &lt;<a href="mailto:brent@architechies.com" class="">brent@architechies.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">What I'm saying here is that even if you accept that the asterisk means all platforms, it does not follow that another argument in the same place should refer to the platform names *listed in the attribute*. That's not at all precedented in the meaning of the asterisk.<br class=""></blockquote><br class="">The problem is, the most natural way to express this is absolutely this:<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX 10.8, iOS 8, *)<span class="Apple-tab-span" style="white-space:pre">        </span>// includes other platforms<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX 10.8, iOS 8)<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>// excludes other platforms<br class=""><br class="">But we don't want to do that because we want people to use `*` by default. You could maybe do something like:<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX 10.8, iOS 8, * unavailable)<br class=""><br class="">But I think that reads very strangely, and it doesn't seem consistent with the other parameters. (Well, unless you can write `OSX unavailable`, which would actually be kind of convenient, but would still read oddly in a declaration named `@available`.) Hence my suggestion:<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX 10.8, iOS 8, only)<br class=""><br class="">Which is meant to be read as "Available in OS X (starting in 10.8) and iOS (starting in 8) only".<br class=""><br class="">(It would be nice if the syntax actually said "OSX 10.8+", and maybe even permitted a range for things that have been retired, like `OSX 10.8..&lt;10.10`. The main problem I see with supporting a range is that the most natural interpretation of the right end is an unavailability version, but the most useful thing to have there would be a deprecation version.)<br class=""><br class=""><blockquote type="cite" class="">Furthermore, the asterisk is put after a list of things *only in the shorthand syntax*, whereas you are proposing that "only" should be usable in the full syntax as well, in a position where the asterisk is not allowed. It is something else entirely to say that a feature is available in OSX version so-and-so only and then to say it's available in iOS version so-and-so only, when in fact you mean that it's not available *on other platforms*.<br class=""></blockquote><br class="">Yes, that was not what I intended when I suggested `only`.<br class=""><br class=""><blockquote type="cite" class="">What makes more sense to me would be allowing (if it isn't already allowed) `@available(*, unavailable)` to follow a previous @available declaration in order to mean that the feature is unavailable on all platforms not otherwise specified.<br class=""></blockquote><br class="">Yes, something like this makes sense to me too. Basically, I think the shorthand form should look like:<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX 10.8, iOS 9.4, only)<br class=""><br class="">And the longhand form like:<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(OSX, introduced: 10.8)<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(iOS, introduced: 9.4)<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>@available(*, unavailable)<br class=""><br class="">(The switch from `introduced=` to `introduced:` is an already-approved Swift 3 change.)<br class=""><br class="">Perhaps you should even be required to say either `@available(*)` or `@available(*, unavailable)` if there are longhand `@available` attributes on the type. <br class=""><br class="">-- <br class="">Brent Royal-Gordon<br class="">Architechies<br class=""><br class=""></div></div></blockquote></div><br class=""></body></html>