Swift : faut-il adopter immédiatement le nouveau langage d'iOS ?

Swift : faut-il adopter immédiatement le nouveau langage d'iOS ? Apports de Swift comparé à Objective-C, interopérabilité entre les deux, migration... Le point complet avec l'avis de deux experts ayant testé le nouvel environnement.

Lors de son dernier événement mondial à destination des développeurs (la WWDC) en juin dernier, Apple avait dévoilé le successeur d'Objective-C : Swift. Jusqu'ici en beta, il arrive en version finale à l'occasion du lancement grand public d'iOS 8, et de son SDK (comptant 4000 nouvelles API). En ligne de mire : proposer un environnement applicatif et de développement (via l'infrastructure Xcode, désormais en version 6) plus performant et plus facile à prendre en main qu'avec Objective-C. Apple continuera cependant à prendre en charge ce dernier, mais on ne sait pas pendant combien de temps. L'éditeur précise aussi que les applications iOS pourront pour l'heure reposer sur l'un ou l'autre des deux langages, et même combiner les deux. Nous allons voir comment.

Un langage qui se veut à l'état de l'art

Il était temps. Objective-C est en effet un langage âgé d'une vingtaine d'années... Apple se devait donc d'évoluer vers un nouvel environnement, plus moderne. Sur la question des performances, Apple affirme que Swift est jusqu'à 220 fois plus rapide que Python sur un chiffrement RC4. Dans les faits, il ne serait pour autant pas forcément beaucoup plus performant que les apps écrites en Objective-C. Swift utilise en effet le même compilateur que ce dernier (LLVM), il tape dans les mêmes API Cocoa et Cocoa Touch (ciblant respectivement OS X et iOS), tout en étant aussi statiquement typé.

Il n'en demeure pas moins d'importantes différences avec Objective-C. D'abord, Swift est un langage multi-paradigme. Il donne le choix entre l'orientée objets, la programmation structurée, le développement fonctionnel ou la programmation impérative. Objective-C se réduit, lui, à l'orienté objets réflexif. Langage compilé comme Objective-C, Swift introduit aussi nombre de concepts utiles pour une programmation à l'état de l'art : classes génériques, closures, namespaces, inférence de type, une manipulation beaucoup plus simple des chaines qu'en Objective-C, des valeurs de tuples de tout type...

 

"Un langage beaucoup plus 'user friendly' qu'Objective-C" (Philippe Charrière, SQLI)

Globalement, Swift est plus épuré qu'Objective-C, moins verbeux, même si ce point-là est encore loin d'être parfait. Il se veut aussi plus robuste en termes de sécurité. Aux côtés de l'inférence de type, il introduit pour ce faire notamment un accès limité aux pointeurs mémoires et une initialisation obligatoire des variables. "Plus proche du système, Objective-C pouvait engendrer des erreurs de compilation. Swift est moins permissif, le codage étant vérifié au moment de la compilation", analyse Vincent Saluzzo, développeur chez Itelios.

iphone6
Swift sort en version finale à l'occasion de la sortie d'iOS 8 (et son SDK), et des iPhone 6 et iPhone 6+. © Capture JDN / Apple

D'après Apple, se familiariser avec Swift est assez simple. Naturellement inspiré d'Objectif-C, il l'est également de Ruby, C#, mais aussi Python. L'objectif étant pour Apple d'offrir un langage relativement facile d'accès à la fois pour les développeurs expérimentés comme les jeunes diplômés. "Un langage productif", aisé à appréhender pour les habitués des langages orientés objets comme C# ou même Java. "Avec Objective-C, il fallait être un spécialiste, se plonger dans les notions de pointeurs et la gestion de mémoire... Swift est beaucoup plus 'user friendly'", reconnait Philippe Charrière, directeur technique de SQLI Lyon - qui a déjà eu l'occasion de mettre les mains dans le nouveau langage d'Apple (comme le prouve l'un de ses posts).

"Swift est très proche de Groovy. C'est un langage à la fois orienté objet, et fonctionnel, tout en étant typé. Ce n'est pas un langage dynamique. Il n'en reste pas moins élégant, et très facile d'apprentissage. Je pense qu'il est à la portée de presque tous les développeurs", ajoute Philippe Charrière. Et Vincent Saluzzo, développeur chez Itelios d'insister : "C'est effectivement plus simple pour les programmeurs C#, Ruby ou JavaScript, mais il faudra néanmoins maitriser les concepts d'un langage moderne, qui n'existent pas en Objective-C."

En vue de rapprocher Swift d'un langage dynamique, ou en tous cas lui en donner l'apparence, Apple donne la possibilité (via une fenêtre baptisée Playgrounds) d'exécuter à la volée le code que vous êtes en train de programmer pour en fournir immédiatement le résultat. "Cela m'a permis de comprendre plus facilement mes erreurs de codage", note Philippe Charrière qui ajoute : "Le Playgrounds me parait intéressant pour la conception, les Pooc ou la revue de code." De son côté, Vincent Saluzzo pondère : "Cette possibilité est néanmoins limitée sur le plan des interactions graphiques iOS, ce qui la rend plutôt adaptée pour tester des algorithmes, des librairies ou des Web Services par exemple."

La délicate question de la migration

Sur la question de la cohabitation des apps iOS existantes avec les développements Swift, Apple affirme avoir peaufiné les passerelles entre les deux mondes. L'éditeur précise qu'il est même possible de créer une app s'adossant à des fichiers écrits dans l'un ou l'autre des deux langages. Ainsi, un développement Objective-C existant pourrait évoluer en douceur, en intégrant petit à petit de nouveaux codes, écrits eux en Swift. Apple a prévu une procédure (détaillée ici) pour importer du code écrit dans le premier dans le second, et réciproquement.

Dès l'annonce de l'arrivée de Swift, la communauté des développeurs iOS a pointé du doigt le risque des conflits possibles, notamment en termes d'API. Sur ce point, Apple se veut rassurant. Les deux langages interopèrent. Il est par exemple possible de "sous-classer" une classe Objective-C, utiliser les protocoles du langage, et tirer parti de toute autre de ses fonctionnalités via une classe Swift. De même sur le plan des API. "Les premiers tests que nous avons réalisés confirment ces capacités d'interopérabilité. Les liens entre les deux types de code sont réalisés à la compilation. C'est totalement transparent pour le développeur", indique Vincent Saluzzo, chez Itelios.

"Objective-C devrait perdurer dans iOS et Mac OS X pendant plusieurs années" (Vincent Saluzzo - Itelios)

Cela veut dire concrètement que vous pouvez créer une classe basée sur un comportement établi en Objective-C et l'améliorer en faisant appel à Swift. Dans la même logique, il est possible de réutiliser des design patterns Cocoa (basés sur des classes Objective-C), et de les étendre avec Swift. "Il existe aussi des types communs permettant de faciliter encore les échanges", commente Philippe Charrière, avant de confirmer : "Vous pouvez tout à fait recourir à des librairies Objective-C à partir d'un code Swift." Et le directeur technique de SQLI Lyon enfonce le clou : "je pense que la principale difficulté pour les développeurs Swift sera de comprendre Objective-C..."

Objective-C aurait encore de belles années devant lui, mais attention...

Quant à la migration d'un code Swift vers Objective-C, elle pourra être réalisée sans encombre, pour peu d'avoir écrit son application en utilisant Objective-C dans sa version la plus moderne. Sur ce point, Apple fournit une procédure assez claire. Mettre en place cette procédure est-elle urgente pour les anciennes applications ? Pour Vincent Saluzzo, Objective-C ne devrait pas être abandonné par Apple avant sans doute plusieurs années. "Objective-C reste une surcouche à C dont on ne peut se passer pour les développements de bas niveau sur iOS ou Mac OS X", souligne-t-il. "Objective-C devrait, il est vrai, être mis en retrait par Apple au profit de Swift, mais il faudra d'abord attendre quelque temps. De nombreuses librairies Objective-C doivent être réécrites. Je pense que la maitrise d'Objective-C va rester nécessaire pour une durée de trois ans au moins." Mais Philippe Charrière chez SQLI rappelle aussi que le support d'Objective-C coûte de l'argent à Apple. "Son support ne sera donc pas éternel", prévient-il.

Avec Swift, Apple tente donc de reprendre l'avantage face à Android vers lequel les éditeurs mobiles se tournent en masse. Mais cette initiative suffira-t-elle à séduire les développeurs ? "N'oublions pas qu'il est désormais possible de développer des apps Android, plus seulement en Java, mais aussi en Groovy qui est un langage très proche de Swift", rappelle en conclusion Philippe Charrière. 

  Le SDK de iOS 8 est téléchargeable sur le site d'Apple

A lire aussi