Hello everybody,

I tried using the access rules defined in SE-0025 in some code of mine to see 
what effect it would have. I came out of the experiment more disappointed than 
I thought. Here are several reasons:

1) The new rules make `private` more prominent compared to `fileprivate` (the 
latter has a somewhat worse name). But at the same time, the Swift community 
has developed a style of coding where a type is defined through a set of 
extensions. To hide members from other types, but have access to them inside 
the type extensions, we have often used `private` and placed the type and its 
extensions in the same file. Because `private` is scoped, we are forced into 
using `fileprivate` pervasively (which is uglier), using `internal` instead 
(which is less safe) or moving the extension code into the type's scope (which 
is against the way Swift code is being written today). All of these options 
look worse to be than before SE-0025.

2) The new amended rules look complicated to me. I think they have the risk of 
being confusing in practice, but we’ll have to see.

More generally, I think that the scoping rules of `fileprivate` may have an in 
insidious effect that favour moving code back into the type’s scope instead of 
preferring the cleaner style of putting it into extensions.

Potential solution:

What is `private` members were also visible to all extensions of the type in 
the same module?

David.

> On 28 Jun 2016, at 01:19, Jordan Rose via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Robert and I wrote up the changes in the form of an amendment to SE-0025: 
> https://github.com/apple/swift-evolution/pull/383 
> <https://github.com/apple/swift-evolution/pull/383>. Please let me know if we 
> missed anything!
> 
> I talked briefly to Chris and he said the core team will decide whether it 
> needs a full review period, or whether it counts as the “obvious” semantics 
> and can thus be accepted without a formal review.
> 
> Jordan
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to