<div dir="ltr">FWIW the Python 3 migration found removal of old syntax and introduction of new syntax in the same release to be hugely problematic, and ended up back-porting a lot of Python 2 syntax features into 3.1 &amp; 3.2 to ease the transition.  The problem is that large codebases are very rarely controlled by a single team, and each sub-library usually has their own schedule for update, such that cutting over all at once is not possible.  The approach usually needs to be<div><br></div><div>1. Introduce the new syntax</div><div>2. Deprecate the old syntax, with fixits and strong warnings about when it&#39;ll be removed.</div><div>3. Allow at least one version (and usually a couple) to pass as a transition.</div><div>4. Remove the old syntax.</div><div><br></div><div>Not sure how much of a problem this&#39;ll be for Swift, which has had some pretty clear &quot;things may break with Swift 3&quot; warnings on it.  My own organization is small, and can probably cut over all at once as long as there&#39;s a migration tool.  But I&#39;ve worked in big organizations where upgrading would be a complete non-starter if there&#39;s no transitional syntax that&#39;s compatible with both old and new compilers, and once Swift gets a decent third-party library ecosystem it&#39;d be impractical to ever upgrade until library dependencies were upgraded, and it&#39;d be impractical to upgrade the libraries until all their clients had switched.  Deadlock. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Apr 16, 2016 at 3:55 AM, Drew Crawford via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hello,<div><br></div><div>I&#39;m writing to complain about SE-0031 and Swift 2 compatibility.  I understand (and agree with!) the change, but the migration between now and 2017 is annoying, hence my complaint.</div><div><br></div><div>In snapshot swift-DEVELOPMENT-SNAPSHOT-2016-04-12-a, we started erroring on the old syntax.  That means that this:</div><div><br></div><div>    func foo(inout bar: Int) { }</div><div><br></div><div>is not legal Swift 3.</div><div><br></div><div>...however, the new syntax:</div><div><br></div><div>    func foo(bar: inout Int) { }</div><div><br></div><div>is not legal Swift 2.  This complicates compiling for both, which several of my projects currently do.</div><div><br></div><div>/<i>Further complicating matters</i>/, Swift does not understand line-scoped ifdefs.  So this:</div><div><br></div><div><div>    #if swift(&gt;=3.0)</div><div>        func foo(bar: inout Int) {</div><div>    #else</div><div>        func foo(inout bar: Int) {</div><div>    #endif</div><div>        //my</div><div>            //long</div><div>            //functon</div><div>            //definition</div><div>    }</div></div><div><br></div><div>Is not legal Swift.  The only way I know of is to say:</div><div><br></div><div>    #if swift(&gt;=3.0)<br>        func foo(bar: inout Int) {<br>                //my<br>                //long<br>                //functon<br>                //definition<br>        }<br>    #else<br>        func foo(inout bar: Int) {<br>                //my<br>                //long<br>                //functon<br>                //definition<br>        }<br>    #endif</div><div><br></div><div>which forces duplication of the entire function definition.</div><div><br></div><div>My suggestion would be one or more of the following:</div><div><br></div><div>1.  Support both syntaxes in Swift 3 &quot;trunk&quot; (e.g. until Swift 3 is released).</div><div>2.  Backport the new syntax to Swift 2.2</div><div>3.  Consider allowing line-scoped ifdefs</div><div><br></div><div>Thanks for reading, and sorry to rain on a parade I largely think is Good For Swift ™</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Drew</div></font></span></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>