Hello,

I'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.

In snapshot swift-DEVELOPMENT-SNAPSHOT-2016-04-12-a, we started erroring on the 
old syntax.  That means that this:

    func foo(inout bar: Int) { }

is not legal Swift 3.

...however, the new syntax:

    func foo(bar: inout Int) { }

is not legal Swift 2.  This complicates compiling for both, which several of my 
projects currently do.

/Further complicating matters/, Swift does not understand line-scoped ifdefs.  
So this:

    #if swift(>=3.0)
        func foo(bar: inout Int) {
    #else
        func foo(inout bar: Int) {
    #endif
        //my
            //long
            //functon
            //definition
    }

Is not legal Swift.  The only way I know of is to say:

    #if swift(>=3.0)
        func foo(bar: inout Int) {
                //my
                //long
                //functon
                //definition
        }
    #else
        func foo(inout bar: Int) {
                //my
                //long
                //functon
                //definition
        }
    #endif

which forces duplication of the entire function definition.

My suggestion would be one or more of the following:

1.  Support both syntaxes in Swift 3 "trunk" (e.g. until Swift 3 is released).
2.  Backport the new syntax to Swift 2.2
3.  Consider allowing line-scoped ifdefs

Thanks for reading, and sorry to rain on a parade I largely think is Good For 
Swift ™

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

Reply via email to