Put me firmly in the pro-warning camp. If enforcing manual synthesis of ivars 
(something I never understood the brouhaha about) warranted a warning flag in 
clang, I think requiring self should at least merit consideration. It certainly 
has a much greater potential for bugs than automatic ivar synthesis.

Charles

> On May 18, 2016, at 11:44 PM, Krystof Vasa via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Thanks for the link, I'll definitely keep my eye on it, though since there 
> are two large camps siding with either side, I don't see the harm making this 
> proposal an optional warning of the compiler that would be off by default and 
> those wanting to stay on the safe side would enable this and get a warning.
> 
> BTW another example of what this would prevent:
> 
> On OS X, all views (NSView) have a print(_:) method. So whenever you write 
> within your code print("something"), it actually invokes the printing method 
> (since its argument is AnyObject?) - if you indeed want to print something to 
> the console, you need to use Swift.print("something") which is incredibly 
> annoying mostly when you forget about this and all of sudden you get print 
> dialogs instead of a log in the console.
> 
> Yes, it's shadowing, but with this one, you can't do anything about and there 
> will always be cases of shadowing - the more dangerous when you don't know 
> about them.
> 
> Krystof
> 
>> On May 19, 2016, at 6:32 AM, Félix Cloutier via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> That proposal might be one of the first early proposals to really get a lot 
>> of attention. My take out of the experience is that people (me included in 
>> this case) will yell very loudly if you try to enforce your coding standards 
>> through the compiler.
>> 
>> There is an open bug on SwiftLint 
>> <https://github.com/realm/SwiftLint/issues/321> to add a rule that enforces 
>> using self to access member variables. It might be worth taking a look.
>> 
>> Félix
>> 
>>> Le 17 mai 2016 à 22:09:44, Krystof Vasa via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> a écrit :
>>> 
>>> Hi there,
>>> 
>>> I've been an OS X developer for over a decade now and was a huge fan of 
>>> ObjC, implementing ObjC runtime into FreeBSD kernel as a intern at 
>>> Cambridge University and my Masters thesis was a modular ObjC runtime that 
>>> ran on Win 3.11. With the advance of Swift, it was clear to me, however, 
>>> that this is a point to say goodbye to ObjC and move to Swift.
>>> 
>>> And so, I've migrated all my projects over 5 months into Swift, which is 
>>> over 200 KLOC of code, with one project being 90 KLOC. This has lead 
>>> unfortunately to various hiccups due to bugs in Swift, Xcode, compiler, 
>>> where I was unable to build a project for a month, etc. - I've filed 84 bug 
>>> reports at bugreport.apple.com <http://bugreport.apple.com/> over the past 
>>> few months regarding developer tools (including Swift) and have begun 
>>> closely watching the evolution of Swift.
>>> 
>>> While I strongly disagree with the rejection of SE-0009, I understood the 
>>> reasoning that it's a boilerplate to keep adding self. in front of all 
>>> variables. I personally always refer to self when accessing instance 
>>> variables (and methods), unless they are private variables starting with 
>>> underscore. I know the underscore thing isn't very Swift-y, but on the 
>>> other hand, reading the code you immediately know you are dealing with a 
>>> private instance variable, not something local.
>>> 
>>> This was until I spent 2 hours chasing a bug that was caused by the exact 
>>> issue this proposal was trying to prevent. I was furious. 
>>> 
>>> a) When you read someone elses code and you see myVar.doSomething(), you 
>>> assume it's refering to a local variable. Which is incredibly confusing, if 
>>> this is an instance variable. Swift is all about compile-time checks and 
>>> this is where it fails.
>>> 
>>> b) If you indeed decide not to go with this proposal, please consider 
>>> adding a warning option. When you take a look at LLVM warning options, I 
>>> bet there would be a place for this. Let the user decide. I personally 
>>> would immediately turn it on on all my projects. Don't make it an error, 
>>> make it a warning.
>>> 
>>> I speak to you as someone with quite a huge real-life experience with 
>>> Swift, mainly in the last year - the question whether to force the 
>>> reference to self is something that may be dividing the community, but I 
>>> believe that most people with more developing experience would be all for 
>>> this. At least as an option.
>>> 
>>> Sincerely yours,
>>> 
>>> Krystof Vasa
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

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

Reply via email to