I&#x27;d say most of your criticisms are unimportant nitpicks from a pragmatic perspective (i.e. from the perspective of: I work on iOS apps and I want to get. things. done.).<p><i>&gt; 1) No backwards compatibility: developers must keep rewriting their Swift code with each new Swift release, since syntax and features often change.</i><p>Nobody cares. We are very used to this. If you program iOS apps for a living, you know this has always been the case. Every new version of Xcode and iOS breaks code. With Cocoa and CocoaTouch, the language can at times feel like nothing more than a way to call the ever-changing SDK APIs.<p>It doesn&#x27;t matter if your app is written Objective-C (a language that also continues to change every year), Swift, Ruby-motion, whatever... it&#x27;ll break on the new Xcode. If not, you think something is wrong and pray the issue does not arise later.<p>Anyways the syntactic and semantic updates to Swift are automated fairly well, anyways, so this not really a major pain point IMO.<p><i>&gt; 2) Swift&#x27;s interaction with C++ is a non-starter, and many, many apps use C++.</i><p>True, many apps use C++. While, I, personally, would <i>love</i> to see C++ intro arrive before Swift 4.0 or 5.0, it&#x27;s a feature that for all practical purposes is a luxury that we can live with out.<p>Use an Objective-C wrapper, then call it from Swift. All C++ that is called in the UIKit layer should be wrapped in an Objective-C API&#x27;s anyways (UIViewController.mm is harmful!), so no big deal. The exception to this is, if you were trying to write an app in pure Swift. In that case, using C++ breaks the purity anyways, so you might as well use Objective-C wrappers.<p><i>&gt; 3) Some C APIs are still quite difficult to use from Swift. Objective-C, being a strict superset of C, makes it very easy to use Core Audio, for instance. OpenGL interop can also be a bit frustrating.</i><p>Support is definitely good enough. Again, if you need more you can (and should) use both languages. Swift was designed to be used in an Objective-C codebase.<p><i>&gt; 4) Swift&#x27;s &quot;functional&quot; idioms are weak and poorly implemented. If you can&#x27;t provide a true functional backdrop to these features, they probably shouldn&#x27;t even be in there. Coming from a real functional language, you&#x27;re in for nasty surprises in Swift if you casually use higher-order functions all over the place, because there is a lot of copying going on.</i><p>I disagree. I believe the functional constructs add a ton of utility to the language. The key is to understand how they were designed to fit into the langauge. It helps to be a bit of a language lawyer, but the compiler can optimize away copied value types in a way that references cannot be optimized.
WWDC spoke a lot on value types, functional programming, and their possible design implications in Swift 2.0<p>see: <a href="https:&#x2F;&#x2F;developer.apple.com&#x2F;videos&#x2F;play&#x2F;wwdc2015-408&#x2F;" rel="nofollow">https:&#x2F;&#x2F;developer.apple.com&#x2F;videos&#x2F;play&#x2F;wwdc2015-408&#x2F;</a><p>and: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=av4i3x-aZbM" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=av4i3x-aZbM</a><p>and: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=vgK8jaf8nlk" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=vgK8jaf8nlk</a><p><i>&gt; 5) Swift&#x27;s performance is definitely not, shall I say, &quot;swift,&quot; though hopefully that will eventually improve.</i><p>Swift is more than fast enough for applications development. Once an alternative to ARC rises (see comments bellow), it will be a competitor for real time systems.<p>ARC guarantees that there will be no pauses. With a language like go, you are blazing fast until the GC pauses everything. With ARC trade raw execution speed for a consistent and stable speed with no pauses or fluctuations in performance. This is because ARC is static. The retain&#x2F;release code is injected at compile time. So while there is a performance overhead for allocating and deleting on the heap, there is no pause. To avoid the overhead, you can use structs instead of classes and protocol extensions for polymorphism.<p><i>6) Poor and confusing compiler errors.</i><p>The language was released in 2014. The error messages are being actively worked on. They were vastly improved with 2.0.<p>EDIT: to be fair, you did say &quot;I&#x27;m sure it will improve&quot;.