Le groupe de travail sur le langage Swift a détaillé les principaux objectifs liés au développement Swift prévu en 2023, il intègre notamment la définition d'un modèle de propriété pour la gestion de la mémoire, les types non copiables, un système de macros et l'interopérabilité C++
La propriété est une approche de la gestion de la mémoire qui est devenue, depuis peu, populaire grâce à Rust, car elle constitue l'une des fonctionnalités les plus déterminantes du langage et la base de sa capacité à garantir la sécurité de la mémoire.
Rust utilise une troisième approche : la mémoire est gérée via un système de propriété avec un ensemble de règles que le compilateur vérifie. Si l'une des règles est violée, le programme ne compilera pas. Aucune des caractéristiques de propriété ne ralentira votre programme pendant son exécution.
Les discussions sur l'introduction de la propriété dans Swift ont commencé en 2017 et ont abouti aux définitions rédigées dans un Manifeste de la propriété.
Alors que les travaux sur la propriété n'ont mené à rien, le groupe de travail sur le langage Swift les ont repris pour fournir aux programmeurs plus de contrôle sur les valeurs en mémoire. Cela pourrait inclure l'interdiction des copies implicites, l'autorisation des transferts de propriété et l'emprunt de valeurs sans les copier. De plus, Swift pourrait obtenir une prise en charge pour les types non copiables afin de restreindre le cycle de vie des valeurs critiques.
Ces contrôles rendront possibles de nouvelles façons de travailler avec les données en mémoire, combinant les performances des constructions "non sécurisées" actuelles avec la sécurité des fonctionnalités de la bibliothèque standard de Swift.
Un autre domaine prometteur pour Swift est la création d'un système de macros procédurales pour permettre la création de bibliothèques avancées et de DSL. Les macros sont un mécanisme de génération de code qui applique une transformation au code source au niveau lexical, syntaxique ou sémantique. Un certain nombre de fonctionnalités existantes dans Swift qui pourraient être implémentées sous forme de macros sont le Codable
protocol, l'interpolation de chaînes, les wrappers de propriétés et les générateurs de résultats. Selon le groupe de travail Swift, l'utilisation de macros pour créer de nouvelles fonctionnalités telles que celles répertoriées ci-dessus débloquerait plus de ressources pour un travail alternatif sur le langage et ses outils.
Bien que le travail sur les macros Swift en soit encore à ses débuts, on sait déjà à quoi elles pourraient ressembler dans Swift. Voici un exemple de macro stringify
possible :
macro(contexts: [.expression, .parameter], external: "MyMacros.Stringify")
func stringify<T>(_ value: T) -> (T, String)
L'interopérabilité C++ vise à activer l'appel de code C++ à partir de Swift ainsi que l'appel Swift à partir de code C++. Cette fonctionnalité sera problablement la première à être intégrée dans une version officielle de Swift étant donné son statut plus avancé. Aujourd'hui, l'implémentation de l'interop C++ prend déjà en charge les types de valeur possédés, les types de valeur triviaux, les types de référence étrangères et les itérateurs, et fournit une réponse aux questions fondamentales sur les méthodes, les pointeurs et les références I-valeur et r-valeur, selon l'équipe de programmation.
Bien que les trois domaines décrits ci-dessus soient les plus innovants, l'évolution de Swift se concentrera également sur la valorisation des fonctionnalités déjà existantes, telles que la concurrence et les génériques.
Concernant la concurrence en particulier, l'objectif sera d'améliorer l'isolation des données fournies par Sendable et les acteurs, tandis que les travaux sur les génériques apporteront un support pour les génériques variadiques, c'est-à-dire les génériques qui ont un nombre variadique de types d'espace réservé.
Aucun calendrier n'a été fourni pour les nouvelles fonctionnalités décrites ici et on ne sait pas si elles seront disponibles dans Swift 6 ou plus tard. InfoQ continuera à vous informer sur le développement de Swift au fur et à mesure que de nouveaux éléments seront disponibles.