[swift-evolution] SE-0025: Scoped Access Level, next steps

Matthew Johnson matthew at anandabits.com
Mon Mar 28 20:38:23 CDT 2016


> On Mar 28, 2016, at 8:32 PM, Jordan Rose via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
>> On Mar 28, 2016, at 18:20, Matthew Judge <matthew.judge at gmail.com> wrote:
>> 
>> There are two different  questions that we keep bouncing back and forth between. Given:
>> 
>> class Outer {
>>    private var outerVar: Int
>>    class Inner {
>>        private var innerVar: Int
>>    }
>> }
>> 
>> Is outerVar visible inside Inner? To me this seems 'obvious'... Yes.
>> 
>> Is innerVar visible to Outer? The answer to this impacts what I think the access modifiers should be called.
> 
> Fair question. Data:
> 
> - C++: no, but the language has "friend".
> - Java: yes
> - C#: no
> 
> - Ruby: no, but "private" means something slightly different
> - D: yes, but "private" means something more like Swift's current "private"
> 
> - Kotlin: no
> - Scala, Python, Go, Rust, Objective-C, Smalltalk: either no access control or no nested types, AFAICT
> 
> So it's tending towards "no" but it's not as consistent. I agree that if we pick "yes" then (for example) "scoped" would be a confusing name.

No is the only answer that is consistent with Swift’s other access modifiers - i.e. strictly based on lexical scope.  My opinion is that we should stick to strict lexical scoping.  It is a simple and consistent principle that is easy to understand and explain.

> 
> Jordan
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list