[swift-evolution] final + lazy + fileprivate modifiers

David Hart david at hartbit.com
Tue Feb 14 05:20:26 CST 2017


> On 14 Feb 2017, at 09:25, Goffredo Marocchi <panajev at gmail.com> wrote:
> 
> I disagree with that as well as I still think we are damaging the language each time we take a known concept (like access levels) and give new meanings to the same keywords. I still look baffled at the redefinition of do and the addition of repeat for example...
> 
> Private, the way it was before, was an admittedly curious take on how most languages mean by private and we have jumped through a lot of hoops to justify why we did not start with Java/C++/C# like access control and augmented it instead of redefining things, omitting others, and then constantly pulling the language left and right with not a lot of permanent consensus either way as this discussion and others before show.

It's a curious take, but it is a curious take is perfectly coherent with Swift extensions. How else would you access private implementation details from an extension? But putting it in the same file, instead of having to resort to an internal access level.

I don't see this as pulling the language left and right: I'm seeing it as the last opportunity to return to a simpler access model we derailed from. I want this evolution process allow us the opportunity to fix modifications if and when we recognize them as mistakes.

> Sent from my iPhone
> 
>> On 14 Feb 2017, at 08:05, David Hart <david at hartbit.com> wrote:
>> 
>> 
>>> On 14 Feb 2017, at 08:28, Goffredo Marocchi <panajev at gmail.com> wrote:
>>> 
>>> I personally think that removing file private by itself does not solve the issue. We either put it all up for change (permissions levels and axis systems... including unsubclassable outside the module by default, warnings about overriding a default method only define in the protocol) and we look at a holistic situation admitting that what we have is not perfect or we just risk damaging the language over religious fronts that each declare to be Swiftier than the other.
>> 
>> Just to make it clear, I’m not suggesting removing fileprivate the access-level but fileprivate the keyword, and go back to Swift 2’s private. I honestly think its not that bad. As Xiaodi said it much better than me in another thread:
>> 
>> 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. […] The point of the other thread was that a sizable proportion of people are finding the old system to be elegant and a suitable basis for future enhancements such as submodules. Here, there's another proportion of people who want to dismantle the old design completely. […] At some point, we've got to stop relitigating this design.
>> 
>> If we remove scope-based private, we are back in a simpler and elegant world of file/module scope.
>> 
>>> We cannot just address every bit of things with a very specific and restrictive language feature unless we want to go to the C++ language lawyers land for real.
>>> 
>>> Sent from my iPhone
>>> 
>>>> On 14 Feb 2017, at 07:08, David Hart via swift-evolution <swift-evolution at swift.org> wrote:
>>>> 
>>>> 
>>>>> On 14 Feb 2017, at 07:06, Chris Lattner via swift-evolution <swift-evolution at swift.org> wrote:
>>>>> 
>>>>> 
>>>>>> On Feb 12, 2017, at 12:35 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
>>>>>> 
>>>>>> _Potentially_ meaningful, certainly. But what I'm hearing is that it isn't actually meaningful.
>>>>> 
>>>>> Yes, for sure.  That was carefully worded :-)
>>>>> 
>>>>>> Here's why:
>>>>>> 
>>>>>> If I see `fileprivate` and can understand that to mean "gee, the author _designed_ this member to be visible elsewhere inside the file," then it's actually meaningful. OTOH, if I see `fileprivate` and can only deduce "gee, the author mashed some button in his or her IDE," then it's not really telling me anything.
>>>>>> 
>>>>>> What you've said above, as I understand it, is that it's not currently meaningful to see `fileprivate` because the migrator is writing it and not the author. The improved approach you proposed is the additional warning. In that case, the compiler will help to ensure that when I see `fileprivate`, at least I know it's necessary. But that's only telling me a fact (this member is accessed at least once outside the private scope), but it's still machine-based bookkeeping, not authorial intent.
>>>>> 
>>>>> I see what you’re saying, but from a mechanical perspective, I disagree: seeing fileprivate in this (theoretical) world would be more meaningful than seeing private, because you know that there must be something in an extension that uses the member.
>>>>> 
>>>>> That said, whether it is meaningful or not is really not the question.  Assuming you agree that it would carry “some” meaning, the question is really whether or not that meaning carries its own weight in terms of complexity in the language footprint.  I tend to think “no”.
>>>>> 
>>>>> If you agree with “no", then Swift 4.x should eradicate fileprivate as a concept and that we should revert SE-0025 from Swift 4 mode.  What to do with Swift 3.x still hangs in the balance of course.
>>>> 
>>>> Wouldn't 3.x mode just warn of the future deprecation?
>>>> 
>>>> Xiaodi: I'd be very tempted to write a proposal myself to revert SE-0025. But it's going to be unpopular and I don't feel like I have the same ease as you do to make the necessary points eloquently to convince as many people as possible. Do you have the time to write it? If not, I'd really appreciate some input from you: your points in this and the other thread have always matched mine but were much better expressed :)
>>>> 
>>>>> -Chris 
>>>>> 
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution at swift.org
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>> _______________________________________________
>>>> 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/20170214/140507e7/attachment.html>


More information about the swift-evolution mailing list