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.
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.
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.
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.