A propos de Swift
Alors qu'approchait la fin de la keynote de la WWDC 2014, déjà particulièrement remplie en nouveautés très appréciées par les développeurs, Craig Federighi évoque Objective C lui-même, le principal langage de développement des apps sous OS X et iOS. Originellement dérivé de C, conçu il y a plus de 20 ans, Objective C a été amené chez Apple par Steve Jobs dans les cartons de NeXT lors de son retour en 1997. Federighi continue : "Nous nous sommes demandés si nous pourrions avoir un langage objet sans le bagage de C...". Et voici donc Swift, la plus grande surprise de la keynote. Ce nouveau langage, conçu en interne par Apple dans le plus grand secret depuis 4 ans, a immédiatement été le principal centre d'intérêt de tous les développeurs suivant l'événement. En voici une présentation succincte.
Comme tous les langages récemment apparus (Go, Rust, Groovy, Scala, etc.), Swift bénéficie largement de l'expérience et de la recherche en la matière. Apple aurait pu réutiliser un de ceux-ci, mais il aurait été étonnant qu'ils ne gardent pas le contrôle d'une pièce aussi fondamentale de l'outillage des développeurs (et du leur, puisqu'il est certain qu'Apple l'utilise et va l'utiliser pour ses propres applis - celle de la WWDC est un premier exemple).
En premier lieu, Swift permet d'écrire un code plus rapide qu'Objective C, en reprenant entre autres la dualité class/struct que C# avait popularisé : class pour les objets lourds et complexes (une fenêtre, un bouton, ...), et struct pour les agrégations de types scalaires simples (un vecteur de nombres flottants). Certes les structs existent aussi en Objective C, mais ce sont celles de C et il est impossible d'y attacher des méthodes. En Swift elles sont beaucoup plus évoluées. On retrouve donc ainsi la possibilité de manipuler de grandes quantités de données avec la même puissance qu'en C++ sans avoir à sacrifier la facilité d'utilisation.
Ensuite, Swift s'attache à être très sécurisé, pour éviter les erreurs de programmation les plus courantes. Pour cela, il est plus fortement typé qu'Objective C (le compilateur sait plus précisément ce qu'est supposé contenir une variable), mais sait faire de l'inférence de type, ce qui permet des déclarations plus lisibles et moins redondantes. Il gère la mémoire tout seul aussi bien qu'Objective C avec ARC, mais en utilisant des directives plus simples. Il oblige à initialiser toute variable avant son utilisation.
Bien que d'une syntaxe plus simple que celle d'ObjC, Swift intègre des concepts tels que la surcharge de méthodes, la surcharge d'opérateur, et les types génériques. Ces outils sont potentiellement très puissants, mais ouvrent aussi la porte a du code particulièrement complexe. Les vieux routiers de C++ comprendront à quel point, même si Swift reste très loin d'égaler C++ quant à la capacité à faire des sacs de noeuds.
Autre caractéristique très intéressante, Swift intègre certains des idiomes les plus courants de Cocoa, tel que vérifier si une variable contient bien un objet avant d'appeler une méthode dessus, ou exécuter automatiquement du code avant ou après le changement de valeur d'une propriété d'une classe. Ce qui nécessitait plusieurs lignes de code en Objective C s'écrit beaucoup plus simplement en Swift.
Il est également intéressant de noter que si Swift affiche des performances dignes d'un langage bas niveau tel que C ou C++, il a pourtant un niveau d'abstraction plus proche d'un langage de script tel que Python ou Ruby... et il est aussi possible d'écrire des scripts en Swift. Il sera très intéressant de voir ce que cette possibilité va permettre en terme de développement sous OS X (l'utilité sur iOS est moins évidente).
Enfin, il faut mentionner les "playgrounds" (aires de jeu) en annexe à Swift. Très fortement inspiré du document sur le Learnable Programming de Bret Victor, cette extension à Xcode permet de tester très facilement des fragments de code Swift et de visualiser immédiatement le résultat de ce qu'on tape, voir ICI.
Pour conclure, notons que Swift n'est pas un caprice soudain d'Apple mais s'inscrit clairement dans une stratégie à long terme. Il vient de llvm, le projet de compilateur extensible Open Source qu'Apple supporte depuis sa création en 2003, et sur lequel Apple mise pour la pérennité de ses outils de développement. Le langage a actuellement encore quelques bugs : dans son implémentation bien sûr (nous n'en sommes qu'à la première beta de Xcode 6), mais le langage lui-même est susceptible d'évoluer encore, selon les retours des premières utilisations. Ceci dit, il est tout à fait possible de commencer à travailler avec, et vivement recommandé d'au moins y jeter un œil si vous êtes développeur.
Pour en savoir plus :
- Un tour d'horizon sur apple.com
- The Swift Programming Language (e-book)
- Using Swift with Cocoa and Objective-C (e-book)
Proposé par Guillaume Laurent, intellicore.net