[swift-evolution] [Discussion] A Problem With SE-0025?

Robert Widmann devteam.codafi at gmail.com
Thu Jun 16 00:07:45 CDT 2016


I think this was the original intent of SE-0025, but it is subject to the issue I raised in the root: If the entire decl is declaration-private, then it cannot be constructed because its members are also declaration-private.  We can forbid it at the top level but that doesn't solve the problem for inner classes and we'd have to needlessly special-case the grammar.  We could solve it with a diagnostic for top-level declaration-private aggregates but is that really a good solution?   Then again, we could raise the access level of declaration-private members with no access modifier but then we'd break containment and we're back to square one because declaration-private now just effectively means fileprivate for this one huge use case.

~Robert Widmann

2016/06/15 22:02、Charlie Monroe <charlie at charliemonroe.net> のメッセージ:

> Wouldn't this get solved by ditching fileprivate (which would be /is right now/ the default behavior for private) and introduce a more private level instead, e.g. "declaration" or "scope"
> 
> /// File A
> 
> public struct MyStruct {
> 	declaration var x: Int
> 	private var y: Int
> 	internal var z: Int
> 
> 	init() {
> 		x = 0
> 		y = 1
> 		z = 2
> 	}
> }
> 
> /// Within the same file
> let str = MyStruct()
> str.x // Error
> str.y // OK
> str.z // OK
> 
> /// File B
> 
> /// Another file
> let str = MyStruct()
> str.x // Error
> str.y // Error
> str.z // OK
> 
> I know that this goes in the other direction than the original proposal, but it would solve all these issues, while fully preserving backward compatibility. Am I missing something?
> 
> 
>> On Jun 16, 2016, at 6:30 AM, Robert Widmann via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Yes, we agree.  Can we please discuss what to do about SE-0025?
>> 
>> ~Robert Widmann
>> 
>> 2016/06/15 21:18、Charles Srstka <cocoadev at charlessoft.com> のメッセージ:
>> 
>>>> On Jun 15, 2016, at 11:04 PM, Charles Srstka via swift-evolution <swift-evolution at swift.org> wrote:
>>>> 
>>>> Result is that the property is only accessible from inside its parent type.
>>> 
>>> *inside the type’s parent type
>>> 
>>> Charles
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160615/75b43a14/attachment.html>


More information about the swift-evolution mailing list