> On Apr 18, 2017, at 12:00 AM, David Hart via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> 
> Here's my rough idea:
> The Swift compiler gains a new off-by-default `next` version triggerable with 
> the `-swift-version next` flag.
> All controversial proposals start their implementation in that version.
> Once one of the poposals feels stable enough, it is brought into an official 
> version.
> Developers would be encouraged to try the `next` features while being warned 
> that source compatibility on that version will *not* be garanteed.
> As the vast majority of the Swift user base are still Apple platform 
> developers, I think it would be important for the success of that strategy 
> that the applications compiled with the `next` flag be accepted on the Apple 
> stores or it will reduce the group of developers ready to play in this 
> "breeding-group".

Hi David,

I think this is a well-intentioned suggestion, but I see several problems with 
this approach.

The first problem is one of expectations.  Developers invest in using features 
because they want to write code to get their work done.  Once someone starts 
shipping something that depends on a feature they get very grumpy when it gets 
taken away.  It doesn’t really matter if the feature is “official” or not.  
Once enough people invest in using a feature it becomes “unofficially” part of 
the language.  IMO, that doesn’t promote a model where changes to the language 
are well-considered.

The second problem is that within the compiler there is still vestigial 
remnants of earlier days in Swift when we were doing a lot of experimentation.  
Before Swift 1 was released we toyed around quite a bit with the syntax, the 
type checker, pretty much everything.  We’d have a design meeting and then 
immediately someone would go implement something in the compiler.  During those 
days such rapid experimentation was helpful to see how ideas would work out and 
to get a feel for the language we were crafting.  But as time has gone by we’ve 
repeatedly found ourselves removing cruft from the compiler’s implementation 
and fixing bugs from technical debt of incompletely implemented features or 
features that didn’t work well together.  Features added for the purpose of 
experimentation are almost always incomplete — it’s the very nature of 
experimentation.  It is also very easy to convince yourself that a new language 
feature “works” when you try it out on a few examples.

No design process is going to be perfect.  We made a lot design decisions 
before Swift was publicly announced that were made based on our intuition and 
experiences, but really those decisions weren’t evaluated until people started 
writing a lot of Swift code.  We then have gone back — several times — and have 
revised core design decisions in the language based on learning from real-world 
usage of Swift.  With the access control saga I think we saw another instance 
of that story: a lot of discussion happened in the Swift 3 timeframe, but some 
important factors/implications of the design being discussed that are now 
obvious in hindsight just weren’t apparent when the discussions were happening. 
 I believe some number of these sagas are inevitable, and hopefully we learn 
from them to better inform our design decisions in the future.

I know the idea behind having a “-swift-version next” is to allow people to 
invest in experimental ideas to provide real feedback, but I don’t think this 
encourages good language design and many developers would be fearful of using 
such experimental features.  Those that fall in love with an experimental 
feature would likely fervently defend their existence, even if they end up 
being a bad idea.  It’s also not clear by what criteria we would take 
experimental features into the compiler in the first place, and adding more 
cruft into the compiler could be very detrimental to its implementation quality.

As Chris said, Xcode betas really are a good time for people to provide 
feedback about features.  With Swift 3 some of that feedback was delayed 
because of the upheaval caused by the Grand API Renaming and the migration work 
projects needed to do to go from Swift 2 to Swift 3.  Going forward the intent 
is that the evolution of Swift provides a much smoother, continuous experience 
for users, and allows them to try out new features of the language more easily 
and thus possible provide feedback sooner.

Ted
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to