Apple has announced a new programming language, called Swift. (There was already a language called Swift, used for parallel scripting, but Apple links to the other Swift in case you land on the wrong page. So far it looks like the other Swift has not returned the favour).
For as long as I can remember, serious Apple developers have had to use Objective-C, an object-oriented C that is not like C++. I have only dabbled in Objective-C but when I last tried it I was pleasantly surprised: memory management was no hassle and I found it productive. Nevertheless it is an intimidating language if you come from a background of, say, JavaScript or Microsoft .NET. Apple’s focus on Objective-C has left a gap for easier to use alternatives, though the main reason developers use something other than Objective-C, as far as I am aware, is for cross-platform projects. Companies such as Xamarin and Embarcadero (with Delphi) have had some success, and of course Adobe PhoneGap (or the open source Cordova) has had significant take-up for cross-platform code based on HTML and JavaScript.
I should mention that RAD (Rapid Application Development) on OS X has long been possible using the wholly-owned Filemaker, a database manager with a powerful scripting language, but this is not suitable for general-purpose apps.
Overall, it is fair to say that coding for OS X and iOS has a higher bar than for Windows because Apple has not provided anything like Microsoft’s C# or Visual Basic, type-safe languages with easy form builders that let you snap together an application in a short time, while still being powerful enough for almost any purpose. This has been a differentiator for Windows. Visual Basic is almost as old as Windows itself, and C# was introduced in 2000.
Now Apple has come up with its own equivalent. I am new to Swift as are most people outside Apple, but took a quick look at the book, The Swift Programming Language, along with the announcement details. A few highlights:
- Swift is a type-safe language that compiles to native code using LLVM.
- The IDE for Swift is Xcode. It supports Cocoa development (Apple’s user interface framework) via import of the existing Objective-C frameworks, which become Swift APIs via the import keyword:
import UIKit
- You can mix Swift and Objective-C in a single project. In Objective C you can use #import to make Swift code visible and usable.
- Swift is a C-family language and you will find familiar features like curly braces and semi-colons to terminate lines (though semi-colons are optional).
- Swift uses reference counting for automatic memory management. There is rather complex section in the book about weak references and unowned references, to solve some of the problems inherent in reference counting.
- Type inference is the preferred approach to declaring the type of a variable, but you can state the type if required. You can also declare constants.
- Swift supports single inheritance for classes and multiple inheritance for protocols (protocols are more or less equivalent to interfaces in other languages).
- There are advanced features including closures, generics, tuples, and variadic parameters. (I am not sure if “advanced” is the right word, but other languages such as C# and Java took a while to get these).
- Swift has something like destructors which it calls deinitializers.
- There is an interesting feature called Extensions which lets you add methods to any existing type. For example, you could extend Int with a prettyprint method and then call 3.prettyprint.
- Swift variables are not normally nullable; they must have a value. However you can declare optional types (add a ?, such as Int?) that can be set to nil. You can also declare implicitly unwrapped optionals which can be nil, but once assigned a value cannot be nil thereafter.
- Swift includes the AnyObject type which can represent anything.
Swift seems to me to have similar goals to Microsoft’s C#: easier and safer than C or C++, but intended for any use right up to large and complex applications. One of the best things about it is the smooth interoperability with Objective-C; this also saves Apple from having to write native Swift frameworks for its entire stack.
A smart move? I think so, though Swift is different enough from any other language that developers have some learning to do.
What difference will Swift make? Initially, not that much. Objective-C developers now have a choice and some will move over or start mixing and matching, but Swift is still single-platform and will not change the developer landscape. That said, Swift may make Apple’s platform more attractive to business developers, for whom C# or Java is currently more productive; and perhaps Apple could find ways of using Swift in places where previously you would have to use AppleScript, extending its usefulness.
If Apple developers were tempted towards Xamarin or Delphi for productivity, as opposed to cross-platform, they will probably now use Swift; but I doubt there were all that many in that particular group.
I would be interested to hear from developers though: what do you think of Swift?
Well, at first look it seems to me like an ActionScript3 folk, PHP folk, and BASIC (yes BASIC from the 80’s) folk with that “let” keyword, did seat together and made that thing.
Going purely from what you’ve described, it sounds like C#, even down to extension methods and nullable types (int?). This is no bad thing; C# is very capable and it sounds like this could be a big win for iOS developers. I looks like they’ve struck an interesting balance of C# features with an Objective-C-esque syntax.
Just makes me wonder about learning another platform specific language or just makes the jump now to a cross-platform language with xarmarin. Cant see any advantages with Swift, personally I liked Objective-C
I think its a great move, ObjC has always been unintuitive (well for me anyway) even with 20+ years development experience and using it on and off for four years.
I like the fact its very concise and much more readable than ObjC. I’d agree with bibibo though regarding declaring constants, using let reminds of my days using BASIC, surely using ‘const’ would be more consistent with using ‘var’ for variable declarations.
Step in the right direction but I am happy using C# to develop Apple applications. I see no reason to switch to Swift because it still lacks behind C# and only gives me Apple’s platforms to target vs all the platforms with C#. If you are a developer targeting ONLY Apple’s products then this is welcomed news but for us cross-platform developers the only benefit will be having documentation and samples available in Swift which should be easier to refactor to C# than ObjC.