> On Jun 28, 2016, at 01:14, David Hart <da...@hartbit.com> wrote:
> 
> 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?

I am strongly against this. Swift uses scope-based privacy; the new ‘private’ 
is still scope-based. Type-based privacy encourages extensions where none are 
needed and the right answer was ‘fileprivate’.

Jordan

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

Reply via email to