> On 12 Feb 2017, at 18:24, Chris Lattner <clatt...@nondot.org> wrote:
> 
> On Feb 12, 2017, at 8:19 AM, David Hart via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> Final
>> Can someone tell me what is the use of 'final' now that we have 'public' 
>> default to disallowing subclassing in importing modules? I know that 'final' 
>> has the added constraint of disallowing subclassing in the same module, but 
>> how useful is that? Does it hold its weight? Would we add it now if it did 
>> not exist?
> 
> As Matthew says, this is still important.
> 
>> Lazy
>> This one is clearer: if Joe Groff's property behaviors proposal from last 
>> year is brought forward again, lazy can be demoted from a language keyword 
>> to a Standard Library property behavior. If Joe or anybody from the core 
>> team sees this: do we have any luck of having this awesome feature we 
>> discussed/designed/implemented in the Swift 4 timeframe?
> 
> Sadly, there is no chance to get property behaviors into Swift 4.  Hopefully 
> Swift 5, but it’s impossible to say right now.
> 
>> Fileprivate 
>> 
>> I started the discussion early during the Swift 4 timeframe that I regret 
>> the change in Swift 3 which introduced a scoped private keyword. For me, 
>> it's not worth the increase in complexity in access modifiers. I was very 
>> happy with the file-scope of Swift pre-3. When discussing that, Chris Latner 
>> mentioned we'd have to wait for Phase 2 to re-discuss it and also show proof 
>> that people mostly used 'fileprivate' and not the new 'private' modifier as 
>> proof if we want the proposal to have any weight. Does anybody have a good 
>> idea for compiling stats from GitHub on this subject? First of all, I've 
>> always found the GitHub Search quite bad and don't know how much it can be 
>> trusted. Secondly, because 'private' in Swift 2 and 3 have different 
>> meanings, a simple textual search might get us wrong results if we don't 
>> find a way to filter on Swift 3 code.
> 
> I would still like to re-evaluate fileprivate based on information in the 
> field.  The theory of the SE-0025 
> (https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md
>  
> <https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md>)
>  was that the fileprivate keyword would be used infrequently: this means that 
> it would uglify very little code and when it occurred, it would carry meaning 
> and significance.
> 
> We have a problem with evaluating that theory though: the Swift 2->3 migrator 
> mechanically changed all instances of private into fileprivate.  This 
> uglified a ton of code unnecessarily and (even worse) lead programmers to 
> think they should use fileprivate everywhere.  Because of this, it is hard to 
> look at a random Swift 3 codebase and determine whether SE-0025 is working 
> out as intended.
> 
> The best way out of this that I can think of is to add a *warning* to the 
> Swift 3.1 or 4 compiler which detects uses of fileprivate that can be 
> tightened to “private” and provide a fixit to do the change.  This would be 
> similar to how we suggest changing ‘var’ into ‘let’ where possible.  Over 
> time, this would have the effect of getting us back to the world we intended 
> in SE-0025.

I’m 50/50 on this idea. If SE-0025 was the right decision, then this is a good 
suggestion. It will push people towards using fileprivate only when necessary. 
But it also has the consequence of biasing future stats towards the fact that 
SE-0025 was a good idea. For example, imagine we had introduced a folderprivate 
access modifier, and added a warning that pushed towards using folderprivate 
when internal was not necessary, it would give credit to folderprivate because 
we would see it in much more code: people just applying the fix-it. But it 
doesn’t mean anything about folderprivate being a good idea in the first place. 
Does that make sense?

> -Chris
> 

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

Reply via email to