[swift-evolution] access control
mayoff at dqd.com
Mon Jan 25 22:22:33 CST 2016
I agree with everything Matthew Johnson said in his response. In addition:
On Mon, Jan 25, 2016 at 5:40 PM, Taras Zakharko via swift-evolution <
swift-evolution at swift.org> wrote:
> Personally, I use it quite often because of the way I like to design
> things as groups of tightly interdependent components (friends, if you
> want) who are aware of each other’s inner workings. I also want to have
> full access to the interface of any project I work on because I trust
> myself to make the judgement whether I am allowed to use a particular
> functionality or not.
By this logic, you don't want or need private (Swift's private-to-file)
either. You just want/need internal and public, because you trust your
judgement and you want access to everything in the project.
I trust my judgement, but I don't trust my memory. In six months, I won't
remember every detail of the code I wrote today. Private-to-file is a
message from past-me to future-me: "Dear future-Rob, you don't need to
worry about looking for any use of this element outside this file, but if
you want to make it visible to other files, you better study it to make
sure it's safe to expose. Warmest regards, past-Rob."
This is a useful message. It helps jog future-Rob's memory, it saves
future-Rob from bugs, and it lets past-Rob rest easy because the message is
guaranteed to be delivered, and is guaranteed to be correct. No comment or
policy or convention can make that guarantee.
I want the ability to send another useful message: "Dear future-Rob, you
don't need to worry about looking for any use of this element outside this
class, but if you want to make it visible to other classes, you better
study it to make sure it's safe to expose. Very truly yours, past-Rob."
Note that moving a private class to its own file to make its privates more
private does not work. Now I have to make the formerly-private class an
internal class, so I'm not sending the first message anymore.
I'm not arguing that Swift needs, say, Scala's level of detail in its
access modifiers, but I think an access modifier for private-to-class or
private-to-instance or private-to-scope would let past-Rob convey useful
information to future-Rob in a lot of places where currently the
information is less precise or entirely absent, and that this ability is
useful enough to justify the additional language complexity.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution