Le langage est à la mode mais il est encore très jeune et a déjà subi plusieurs mises à jour nécessitant des migrations de code pour les développeurs qui l'avaient adopté au départ.

En cette fin d'année 2016, faisons le point ensembles sur son évolution et ses perspectives d'avenir ; pour vérifier si il est déjà adapté à la réalisation de projets conséquents.

Les trois objectifs

Sécurité

Un des objectifs essentiels des concepteurs était d'en faire un langage sûr et on peut dire que c'est plutôt réussi en ce sens. Le langage a été conçu en tenant compte des erreurs courantes des développeurs dans les autres langages, notamment l'Objective C auquel il vise à succéder, et incite le développeur à adopter des bonnes pratiques.

Une des sources de problèmes les plus courantes en programmation est une variable vide alors que le développeur ne s'y attendait pas. Dans la plupart des langage, cela mène à une exception/crash et en Objective-C le plus souvent l'instruction était ignorée (ce qui souvent reportait le problème à plus tard, en plus grave). Ici la logique du langage est la suivante : une variable doit toujours avoir une valeur ou être marquée optionnelle. Tous les mécanismes autour de cette gestion des variables sont souvent contraignants pour ceux qui apprennent le langage, mais se transforment en bénédiction dès qu'on prend l'habitude de travailler avec. La tranquillité d'esprit de toujours savoir si une variable doit être testée ou non n'a pas de prix quand on programme :)

Il y a d'autres points liés à la sécurité mais la gestion des variables est celui que j'aime le plus <3

Simplicité

Si vous venez du monde de l'Objective C, alors il n'y a pas photo, votre code va diminuer drastiquement. Vous n'aurez plus qu'un seul fichier de sources par classe (hors extensions si vous les utilisez), plus besoin d'importer les entêtes des autres classes, les appels de fonctions n'utilisent plus les crochets, etc. Bref, vous allez adorer.

Si par contre vous choisissez le Swift pour votre serveur et que venez d'un langage moins strict comme le PHP ou le JS vous serez probablement un peu frustré au départ, car le compilateur va essayer de vous "cadrer". Rappelez-vous, c'est un langage qui cherche à sécuriser votre code : vos variables devront être typées, vous verrez des énumérations de partout à la place des constantes, et tout un tas de choses qui sont recommandées dans tous les langages deviennent obligatoires en Swift. Accrochez-vous c'est pour la bonne cause et vous ne le regretterez pas :)

Rapidité

Le troisième objectif principal annoncé était la rapidité d'exécution, et les résultats diffèrent pas mal en fonction des protocoles de tests et de langages.

Pour l'Objective-C c'est généralement le Swift qui l'emporte en termes de performances (https://yalantis.com/blog/is-swift-faster-than-objective-c/) et il semble que pour un serveur web ce soit aussi le cas avec Node.js (http://www.macg.co/logiciels/2016/10/sur-le-serveur-swift-est-nettement-plus-rapide-que-nodejs-95921).

Par contre tout le monde ne semble pas d'accord lorsque l'on compare les performances avec le Java ou les irréductibles C et C++.

Adoption et évolutions depuis 2 ans

Le langage a rapidement été adopté, et si, au départ, le nombre de ressources disponibles pour l'apprendre était réduit, ce n'est aujourd'hui plus le cas. En regardant l'index TIOBE on peut voir qu'il est passé de la 27e place en Février 2015 à la 12e place des langages les plus utilisés ce mois-ci :

[caption id="" align="aligncenter" width="1900"]Index TIOBE : Swift Octobre 2016 Index TIOBE : Swift Octobre 2016[/caption]

Par contre les évolutions systématiques du langage depuis 2 ans représentent un véritable problème pour son adoption plus massive, notamment dans des projets visant à être maintenus à long terme. J'ai personnellement pas mal de code à migrer vers Swift 3 dans les sources de DEV2A et ça ne m'enchante guère... En plus, je ne peux pas encore m'y atteler, car j'utilise des dépendances qui n'ont pas encore fait eux-même la migration. Heureusement, ces migrations devraient se faire de plus en plus rares selon l'équipe en charge du projet.

Son avenir

On sait déjà que le projet est passé Open Source l'année dernière et permet maintenant d'avoir une visibilité sur les évolutions en cours et à venir. Il y a même une communication officielle des porteurs du projets qui annonce les directions prises pour la future version du Swift, numérotée 4.

La garantie est la suivante : les évolutions seront rétro-compatibles avec la version 3 du Swift. Il y a 2 types d'évolutions : le langages et la communication avec la librairie standard (qu'on utilise pour toutes sortes de tâches). Ces deux types d'évolutions seront transparentes pour les développeurs finaux qui auront accès à de nouvelles fonctions, sans pour autant perdre celles qu'ils utilisent à l'heure actuelle.

Il y aura aussi plusieurs changements et améliorations internes à la bibliothèque standard, encore une fois transparents pour ceux qui l'utilisent. Les performances de compilation et du code optimisé devraient aussi être meilleures avec cette version 4 selon le plan annoncé.

Les changements concrets pour les développeurs se situent à 2 niveaux :

  • La manipulation des chaînes de caractères (String) devrait être plus puissante et plus simple tout en conservant la compatibilité avec le code existant et la gestion de l'Unicode
  • Un deuxième mécanisme de gestion mémoire pour les développeurs nécessitant des performances plus hautes, sera ajouté en complément du mécanisme actuel (à activer par le développeur)

Conclusion

J'ai personnellement fait l'aventurier et franchit le cap dès le départ sur le code de DEV2A : depuis 2 ans, tous les ajouts de code de la partie iOS ont été fait en Swift (1, puis 2 et bientôt 3). Et à ce jour, je ne regrette absolument pas mon choix. Les migrations ont été un peu contraignantes mais rien d'insurmontable.

Quand je retombe sur du code en Objective C à maintenir, je suis systématiquement déprimé.

Quand je dois bosser sur du Java pour le code Android, ce sont les optionnels qui me manquent et la tranquillité d'esprit qu'ils m'apportent.

Quand je dois faire du PHP... disons que je ne préfère pas vraiment en parler :) Pour le JS, heureusement que Ember.js m'a permis de faire du code structuré et m'a donné un peu d'amour pour le dev web.

Bref, vous l'avez compris si je devais faire une recommandation personnelle, ce serait de réaliser toutes vos apps iOS en Swift et de laisser l'Objective C derrière. Pour iOS je pense que le Swift est prêt pour du code en production.

Pour les technos serveur, je n'irais pas jusqu'à recoder entièrement mes webservices existants, et je n'ai pas encore testé les différentes solutions en Swift ; mais j'y réfléchis de plus en plus pour mes futurs projets.

Happy coding :)

Maxime