Apple a annoncé à l'occasion du WWDC 2014, la disponibilité en beta d'un nouveau langage, Swift, qui sera disponible officiellement avec le lancement d'iOS8 et d'OSX Yosemite plus tard dans l'année. Swift est un langage de programmation haut-niveau, familier aux développeurs JavaScript, mais compilé avec LLVM pour produire du code exécutable à hautes performances pour les plateformes OSX et iOS.
Apple a beaucoup étudié les possibilités de LLVM, qui fournit un set d'instructions qui peut être traduit pour des architectures spécifiques. Clang remplace GCC dans sa place de compileur de choix pour les programmes en C et en Objective-C, qui sont traduits avec Clang en instructions LLVM, puis optimisés pour s'exécuter sur les plateformes d'Apple. Le nouveau langage, Swift, produit de la même manière du bytecode LLVM et peut coexister avec les applications et les librairies Objective-C déjà existantes.
Swift fournit un environnement REPL pour tester du code. Souvent utilisé par les langages interprétés comme JavaScript ou Python, cet environnement fournit une boucle lecture-évaluation-écriture qui peut être utilisée pour évaluer des instructions individuelles avec une ligne de commande pour debugger ou tester facilement le code. Combiné avec l'interpolation de Strings et des options d'affichage ou de debug, cela permet d'avoir un style interactif de programmation et de test manquant pour les langages compilés comme C ou Java.
Ce nouveau langage est fortement typé, bien qu'il utilise de l'inférence de types pour réduire la quantité de code à produire pour le développeur. Les types peuvent être déclarés explicitement, et pour les types numériques, des tailles spécifiques peuvent être précisées comme UInt8 ou Int32. Le système de type propose également des valeurs optionnelles, que l'on peut déréférencer avec ? ou ! selon que la valeur attendue existe ou non. Les collections supportent l'utilisation de tableaux (avec []), de dictionnaires/maps (avec [:]), ainsi que l'utilisation de types génériques.
Les fonctions sont des éléments de première classe, signifiant qu'elles peuvent être passées comme variables à d'autres éléments. Il est possible de nommer les arguments d'une fonction à son appel (offrant une compatibilité avec Objective-C) ou de les placer dans l'ordre attendu à défaut de nommage. Les paramètres peuvent avoir des valeurs par défaut, et peuvent donc être fournis optionnellement à l'appel de la fonction.
L'intégration de Swift permet d'utiliser des objets Objective-C, qu'ils viennent de librairies standard (comme UIKit ou Cocoa) ou qu'ils soient définis par le développeur. Les classes peuvent bien entendu être créées nativement en Swift (et utilisables en Objective-C), et sont alors prises en compte par l'Automatic Reference Counting. Les références sont gérées automatiquement par le runtime, le développeur n'a donc pas à se soucier d'une gestion de la mémoire. De même que pour les classes, qui sont des types référencés, il est possible de créer des structures (avec struct) qui peuvent être passées par copie de valeurs aux fonctions.
Enfin, Swift autorise la définition de plusieurs types de retour, via l'utilisation de tuples. Ces tuples sont utlisables dans la sémantique de matching (avec case), ou dans une assignation de variable.
Swift est disponible avec la developer preview de XCode 6, et sera déployé en production dans les mois à venir. Pour l'instant, il n'y a aucune confirmation que le langage sera mergé à LLVM, mais puisque cela a été le cas récemment pour le support ARM 64-bit et le compilateur JIT de Safari pour JavaScript, on peut penser qu'une partie du projet arrivera sur le dépôt du runtime clang hébergé par LLVM. Cela pourrait laisser la possibilité d'écrire des programmes en Swift pour d'autres architectures supportées par clang.