> Le 15 févr. 2017 à 10:52, Matthew Johnson <matt...@anandabits.com> a écrit :
> 
> 
>> On Feb 15, 2017, at 9:37 AM, Michel Fortin via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>> 
>>> Le 15 févr. 2017 à 9:28, Vladimir.S via swift-evolution 
>>> <swift-evolution@swift.org> a écrit :
>>> 
>>> On 15.02.2017 14:29, Joanna Carter via swift-evolution wrote:
>>>>> The beauty of Swift 2's access modifiers was that they were based
>>>>> around files and modules, explicitly rejecting types and scopes as
>>>>> units for determining visibility. It seems at base there's a group of
>>>>> people who reject that decision altogether. Hence, new `private`,
>>>>> proposals around `protected`, `friend`, `hidden`, `extensible`, etc.
>>>> 
>>>> I suppose, for those coming from an Objective-C only background, any
>>>> extra visibilities are seen as a bonus.
>>>> 
>>>> For those coming from a Pascal background, file-based visibility seems
>>>> more natural.
>>>> 
>>>> But for those of us who have used languages like C++ and C#, losing the
>>>> visibilities that we have been used to can seriously affect how we think
>>>> and design stuff.
>>>> 
>>> 
>>> Was surprised that you expressed exactly what I'm thinking about this 
>>> subject.
>>> 
>>> I do believe even in Swift we need a way to say "only code that *knows* 
>>> what it does should see this" and to not force us to write(and manage) the 
>>> the code in same file.
>>> Yes, some implementation details that shouldn't be used by "users" of the 
>>> type, but can be used by "extenders" of our type. At least in the same 
>>> module.
>>> 
>>> While reading, the question was raised(if was discussed, let me know pls): 
>>> what if we extend the meaning of 'private' to 'visible to current 
>>> type/scope and subtypes and extensions in the *same module*' ?
>>> This will help us to split types by files, help to better model access 
>>> policy for fields/methods(i.e. only scope that can know about details can 
>>> see them) while 'private' still will be hidden outside of the module even 
>>> for subclasses/extensions.
>>> 
>>> So, we'll have such situation:
>>> 
>>> "modifier" -> "can be accessed from"
>>> -------------------------------
>>> public -> outside of the mondule
>>> internal -> inside the module only
>>> fileprivate -> the same file only
>>> private -> the same type/scope, or subtype, or extension in the same 
>>> module. I.e. some kind of 'internal' but scope-oriented.
>>> 
>>> Actually I still believe we need current 'private' and additionally some 
>>> 'protected' with meaning "access from subtype, or extension" probably with 
>>> this limitation: "only in the same module". But suggested extended 
>>> 'private' will be also OK for me.
>>> 
>>> Thoughts?
>> 
>> Here's an idea in three points:
>> 
>> 1. Return to the Swift 2 definition of `private`.
>> 2. Introduce `scoped` to limit the visibility to within the same type, 
>> subtype, or extension.
>> 3. Allow mixing the two.
>> 
>> So you have:
>> 
>>      private         // current file
>>      private scoped  // current file, in the same type, subtype, or ext.
>>      internal        // current module
>>      internal scoped // current module, in the same type, subtype, or ext.
>>      public          // external modules
>>      public scoped   // maybe we want that one?
>> 
>> Since `internal` is implied, using `scoped` alone would be equivalent to 
>> `internal scoped`.
>> 
>> Swift 3's private could be mapped to `private scoped` to achieve (almost) 
>> the same results and thus preserve source compatibility.
> 
> This definition of `scoped` is actually much different than the current 
> `private` which restricts visibility to the *current* scope.  Your definition 
> allows visibility in an unlimited number of scopes that just happen to be of 
> the same type.  I don’t think `scoped` is a good name for this.  

I was using the definition of `private` from Vladimir.S's post quoted above 
because this is basically an extension of his idea. You're right that `scoped` 
might not be the best word for this.

-- 
Michel Fortin
https://michelf.ca

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

Reply via email to