L'histoire brillante de Swift racontée par son créateur

Nicolas Furno |

Un nouveau podcast, nommé The Swift Community Podcast, a diffusé son premier épisode le mois dernier. Pendant une heure, Chris Lattner a raconté les débuts de Swift, le nouveau langage de programmation d’Apple qu’il a créé à partir de 2010. L’interview a été partiellement retranscrite par le développeur Ole Begemann pour se concentrer sur cette histoire.

Chris Lattner, pendant la conférence d’ouverture de la WWDC 2014 où Swift a été présenté pour la première fois.

Un projet parallèle pour le plaisir

Avant de trouver son nom officiel, Swift se nommait Shiny. Pourquoi ce nom ? Chris Lattner explique qu’il construisait une « nouvelle chose brillante » (en version originale, « a new shiny thing »). On était encore bien loin d’un langage complet capable de concurrencer Objective-C et bien plus dans le projet personnel, créé pour le plaisir.

Chris Lattner a commencé à travailler sur Swift juste après la WWDC de 2010 où Apple a proposé aux développeurs une nouvelle version de Clang, le compilateur maison qui était capable de compiler le C++. D’après le développeur, cette mise à jour était un projet très ambitieux, complexe et assez pénible à mener à bien. Il avait besoin d’une pause après cela, quelque chose de plus simple et aussi de nouveau, plus stimulant sur le plan intellectuel.

Il a alors entamé un projet sur son temps libre et commencé à échanger avec Bertrand Serlet, qui était à l’époque en charge du logiciel chez Apple, autour de l’idée d’un nouveau langage, plus moderne et débarrassé des défauts des langages de l’époque. Pendant ces premières discussions qui établissaient le profil d’un meilleur langage, la question de la gestion de la mémoire est apparue très vite.

L’un des objectifs était d’automatiser cette gestion pour sécuriser l’accès à la mémoire (memory safety). Pour faire très simple, certains langages comme C ou C++ n’ont aucune protection de la mémoire. C’est alors au développeur de gérer cet aspect, à la fois pour écrire une information en mémoire et pour la lire. Une erreur dans le code peut provoquer des fuites de mémoire, voire une instabilité du programme en cas de mauvaise utilisation de la mémoire.

À cette époque, Objective-C ne disposait d’aucun mécanisme de protection pour la mémoire par défaut. Les échanges entre Chris Lattner et Bertrand Serlet sur cet aspect et les premiers pas du futur Swift ont entraîné la création d’ARC, une nouvelle fonction du compilateur qui se charge de valider le code pour vérifier qu’il fait un bon usage de la mémoire. Ainsi, avant même que Swift soit officiellement lancé au sein d’Apple, il a servi à améliorer les outils de développement qui existaient.

Cela dit, il n’était pas possible de faire évoluer Objective-C progressivement pour le transformer en Swift. Chris Lattner reprend l’exemple de la gestion de la mémoire : ARC est un outil bien utile, mais le langage reste fondamentalement basé sur C, et donc sur une gestion de la mémoire sans protection. Pour faire mieux, il fallait repartir d’une page blanche…

Une équipe élargie pour créer le successeur d’Objective-C

Même si Objective-C reste le principal langage au sein d’Apple, le développement de Swift devient officiel quand une équipe se forme autour de Chris Lattner. C’est en avril 2011 que l’entreprise décide de donner une vraie chance au nouveau langage et qu’une poignée de développeurs commence à travailler à plein temps sur le sujet. Parmi eux, Ted Kremenek a pris la relève de Chris Lattner pour superviser le développement de Swift quand ce dernier a quitté Cupertino.

Cette petite équipe a posé les bases de Swift, sachant qu’il fallait tout créer. Chris Lattner avait imaginé les principes généraux et commencé à créer les rudiments du langage, mais le travail a surtout été réalisé dans les années qui ont suivi. Quelques principes datent de cette époque, comme la syntaxe pour définir une variable et une fonction qui n’ont jamais changé, mais l’essentiel a été imaginé dans les années qui ont suivi.

Pour créer Swift, Apple a eu la bonne idée de ne pas faire appel qu’à des développeurs spécialistes des langages ou de la compilation. Très vite, des membres de l’équipe en charge de la documentation au sein de l’entreprise ont été intégrés pour participer au développement. Ils n’étaient pas là seulement pour documenter le langage, ils donnaient aussi leurs avis sur les multiples décisions à prendre quand on se lance dans un tel projet. Chris Lattner donne plusieurs exemples, qui peuvent être aussi simples que le choix d’un point ou d’une virgule dans la syntaxe ou aussi compliqués que la manière d’enregistrer une chaîne de texte.

Comme l’explique le développeur, intégrer la documentation au projet dès le départ était une excellente manière d’améliorer le langage. Au lieu de créer quelque chose et de tenter de l’expliquer après, Swift a été conçu en même temps qu’il a été documenté et expliqué, pour que chaque décision soit logique et cohérente.

La communauté et Swift au-delà d’Apple

Apple présente Swift au public à l’occasion de la WWDC 2014, il y a près de cinq ans de cela. C’est Craig Federighi, qui a remplacé Bertrand Serlet en 2011, qui évoque la nouveauté pendant la conférence en décrivant le nouveau langage comme « Objective-C, sans le C ». Un slogan accrocheur, reconnaît Chris Lattner, mais qu’il regrette, puisque ce n’était pas l’objectif.

Craig Federighi, pendant le keynote de la WWDC 2014, introduisant Swift.

Dès le départ, Chris Lattner conçoit Swift comme un langage capable de tout faire, du noyau d’un système d’exploitation aux scripts écrits par l’utilisateur, en passant par les apps ou le firmware d’un matériel. Une ambition folle, qui va bien au-delà des besoins d’Apple et qui explique le choix d’en faire un langage open source. Dans l’interview, il est évident que le créateur du langage est le responsable de cette décision, c’est un point fondamental à ses yeux : « un de mes principes, c’est que l’ouverture est meilleure que la fermeture. Si vous pouvez avoir plus de personnes impliquées, vous aurez quelque chose de meilleur. » Fin 2015, Craig Federighi avait indiqué dans une interview que le choix de rendre Swift open source était là dès le départ, même s’il y avait eu des débats en interne.

La première version était limitée sur certains points fondamentaux. Apple a choisi de sortir Swift 1 en 2014 sachant que tout n’était pas au point, et de compter sur les retours des développeurs qui allaient utiliser le langage pour combler les vides. Dans le cadre d’un développement ouvert, Swift Evolution définit les étapes suivantes et permet à tout un chacun de suggérer des nouveautés et changements. Le processus de décision est plus lent et moins prévisible que si tout était fait en interne, certes, mais le résultat est meilleur, maintient le développeur.

D’ailleurs, certaines fonctions inutiles chez Apple se retrouvent quand même dans Swift parce qu’elles sont très populaires dans la communauté. C’est le cas de Result, un outil qui permet simplement de représenter un succès ou un échec de manière très simple. C’est l’une des nouveautés de Swift 5 et c’est une contribution des utilisateurs de Swift qui l’ont réclamée régulièrement au fil des années.

Capture d’écran du projet Swift Evolution avec la proposition d’ajouter « Result » au langage.

Swift a été créé au sein d’Apple, mais le langage est censé être ouvert à toutes les plateformes. Le constructeur a même fait un effort en ce sens, en créant un groupe de travail dédié à Swift sur les serveurs. Malgré tout, il reste encore beaucoup de progrès à faire dans ce domaine, et plus encore pour apporter Swift à Windows, souligne Chris Lattner. C’est logique après tout, la majorité des utilisateurs sont dans l’écosystème Apple et la documentation est quasiment exclusivement consacrée aux frameworks et API développés à Cupertino.

Chris Lattner espère que Swift s’ouvrira davantage aux autres plateformes. Rien ne l’empêche, si ce n’est qu’Apple reste à la barre pour le développement du langage. Et cela reste obligatoire, comme il l’explique dans l’interview : s’il n’y avait que la communauté, les évolutions resteraient minimes, sur des petits points du langage. Pour engager de gros travaux, comme la stabilisation ABI au programme de Swift 5, il faut des moyens techniques et humains tels qu’un acteur de l’importance d’Apple doit s’y atteler.

L’objectif reste de pouvoir répondre à tous les besoins et Chris Lattner évoque notamment l’apprentissage automatisé (machine learning) comme domaine qui pourrait bénéficier de Swift. Étant donné l’intérêt d’Apple pour ce domaine, on peut se dire que cela arrivera sûrement tôt ou tard… En attendant, l’ancien employé d’Apple qui travaille chez Google depuis l’été 2017 a adapté Swift pour TensorFlow, technologie d’apprentissage automatique du géant de la recherche.

avatar RedMak | 

Je l’ai écouté, c’était génial surtout le fait que ARC était une idée pour swift mais qui a trouvé sa place dans objC

avatar garba50 | 

Ressemble bcp trop à python

avatar Pierre Thibault | 

Pourquoi tu dis ça? Je suis un développeur Python et je suis heureux de voir que Swift reprend certaines bonnes idées de ce langage comme les fonctions qui retournent des tuples ou encore pouvoir échanger les valeurs de deux variables sans intermédiaire: (a, b) = (b, a). Mais ça demeure un langage de programmation très différent quand même.

C'est un langage qui permet à la fois de faire de la programmation système que de créer de petits scripts sous forme de fichiers textes exécutables.

Je suis en train d'apprendre Swift et je trouve cela très excitant. J'aimerais m'en servir comme langage de programmation back-end pour le web. Je trouve qu'il y a trop de code à taper en Java pour arriver au but. Swift me semble plus pragmatique.

avatar garba50 | 

@Pierre Thibault

Je dis juste qu’ils s’en sont fortement inspiré.
Ils en ont même améliorer la syntaxe.
Par exemple en python le code appartenant a une boucle ou une fonction se reconnaît par son indentation, ce qui est troublant et porte à confusion si jamais on supprime une fabulation!

avatar koko256 | 

Pour moi, tant que la crypto ne fait pas partie de l'api officielle, c'est niet. Si l'on ne veut pas dépendre d'une usine à trous, il faut qu'Apple mette des cryprologues sur swift.

avatar 6ix | 

@koko256

Crypto dans la librairie standard...?

Qu’Apple améliore le Security Framework en le rendant plus « swifty » ou que d’autres librairies multi-plateformes voient le jour, ce serait un plus en effet, mais je ne vois pas vraiment ce que cela viendrait faire directement dans le langage.

Qu’est-ce que tu attends en particulier ou te bloques en ce moment?

avatar koko256 | 

@6ix

Une API de crypto dans la lib standard de swift. Pas un package étranger (comme cryptoswift) qu'il faut importer et que Apple ne check pas en direct. En C et consorts, on a OpenSSL qui est scruté par tout le monde.

avatar Crunch Crunch | 

Sauf que maintenant, le bonhomme travaille pour Google !!!
Zut alors. Vendu !

avatar fredsoo | 

Ce qui est génial quand ça discute code, si on est pas dev, on comprend rien a ce que vous dites...??

avatar IceWizard | 

@fredsoo
"Ce qui est génial quand ça discute code, si on est pas dev, on comprend rien a ce que vous dites...??"

L'autre jour, dans le métro du coté de l'université de Jussieu (Paris 75005), j'ai entendu deux chimistes parler boutique. Je n'ai rien compris, à part qu'il s'agissait de chimie. Toutes les disciplines techniques ont leurs jargons spécialisés.

avatar tbr | 

Ce qui est génial, c’est de savoir qu’on a (souvent) affaire à des brasseurs de vent, des baratineurs, une fois que l’on a déchiffré leur dialecte.
Je ne cible pas une discipline particulière, mais toutes.

CONNEXION UTILISATEUR