[swift-evolution] [Draft] A Consistent Foundation For Access Control: Scope-Bounded Capabilities

John McCall rjmccall at apple.com
Fri Mar 3 14:30:02 CST 2017


> On Mar 3, 2017, at 1:36 PM, Adrian Zubarev via swift-evolution <swift-evolution at swift.org> wrote:
> I actually found the source, and it’s even an official one. :)
> 
> https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID483 <https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID483>
> NOTE
> 
> In a class declaration, the static keyword has the same effect as marking the declaration with both the class and final declaration modifiers.
> It’s overlapping but you might be able to adjust the behavior to cover that in your model as well ;)
> 
Note that is arguably not quite true, depending on one's mental model of class properties.

If you think of a class var as being, in essence, an instance property of the class object, then a *stored* class var should be a different variable for each subclass of the class.  That's a reasonable mental model, and it's consistent with the behavior of class methods and so on, for which the Self type changes depending on what class you invoked the method on; but it's not trivial to implement, and it hasn't yet come up to the top of the priority list, which is why we don't currently allow you do define stored class vars.  Anyway, class properties are normally overridable in subclasses, just like class methods; a final class property can't be overridden, but, if stored, under this model it's still a different property for each subclass.

That is conspicuously *not* what a static property of a class is.  A static property of a class is basically a property of *that specific class*; it can be accessed via a subclass but always yields the same variable, which means that in a non-generic context it's essentially a namespaced global.  Now, that's what people want and expect from a static variable on a class, and that's why we implemented it that way, but it's not at all the same thing as "final class".

John.
> 
> 
> 
> -- 
> Adrian Zubarev
> Sent with Airmail
> 
> Am 3. März 2017 um 18:14:42, Matthew Johnson (matthew at anandabits.com <mailto:matthew at anandabits.com>) schrieb:
> 
>> It would be really helpful if you can find a reference to this somewhere.  If it’s possible to define static in terms of this system also that would be pretty cool.
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170303/5d27162a/attachment-0001.html>


More information about the swift-evolution mailing list