AccueilActualités informatiqueLe langage de programmation Swift 5.6 étend les pointeurs pour l'interaction avec...

Le langage de programmation Swift 5.6 étend les pointeurs pour l’interaction avec C

Swift, le langage de programmation open source d’Apple, est sorti dans sa version 5.6. Les nouveautés concernent surtout l’utilisation de pointeurs marqués comme non sécurisés pour l’accès direct à la mémoire et le système de types. En outre, le processus de construction a été amélioré afin de permettre la mise en œuvre d’actions individuelles via des plug-ins.

Sommaire

Dans Swift, les instances de UnsafePointer permettent d’accéder directement à la mémoire. Comme les développeurs sont eux-mêmes responsables de la gestion de la mémoire, les pointeurs non sécurisés sont par nature associés à un risque d’erreur d’accès à la mémoire et de comportement indéfini. Un UnsafePointer peut, au choix, être associé à un certain type ou ne pas être typé (untyped).

Les pointeurs non sécurisés servent avant tout à l’interaction avec les API C. Swift 5.6 introduit sous la proposition SE-0322 « Temproray Uninitialized Buffers » une fonction dans la bibliothèque standard qui initialise une zone de mémoire temporaire qui doit se trouver si possible sur la pile. Ce tampon peut être transmis par un programme Swift à une fonction C qui a besoin d’une zone mémoire pour stocker ses résultats en vue d’un retour.

En outre, SE-0324 « Relax Diagnostics for Pointer Arguments to C Functions » permet une utilisation plus libre de la conversion de type des pointeurs lors du transfert vers des fonctions C. Ainsi, il est désormais possible d’utiliser des variantes mutables de pointeurs incertains tels que UnsafeMutablePointer à des API qui utilisent en fait une variante immuable telle que UnsafePointer s’attend à ce qu’elle soit utilisée.

À un autre endroit, Swift fait un pas en arrière. La proposition d’implémentation du Sendable-SE 0302 stipulait à l’origine que les types de pointeurs non sécurisés étaient inconditionnellement conformes à l’utilisation dans le code exécutable en parallèle avec le protocole. SE-0331 « Remove Sendable Conformance from Unsafe Pointer Types » (Supprimer la conformité envoyable des types de pointeurs non sécurisés) retire UnsafePointer et les autres variantes cette conformité, car la responsabilité de la gestion de la mémoire est du côté du développeur, ce qui sape la sécurité mémoire dans Swift.

Deux nouveautés de Swift 5.6 complètent le système de types du langage de programmation. SE-0315 « Type Placeholders » fonctionnait à l’origine sous le Swift Evolution Proposal « Placeholder Types », mais en s’inspirant d’autres langages comme Rust, l’équipe a adapté le nom. Swift utilise l’inférence de type pour accéder aux types non déclarés. Pour les expressions dans lesquelles le compilateur ne peut pas reconnaître lui-même le type, le type concret peut être déterminé entre autres par des annotations de type ou le mot-clé as pour définir le type.

Le Placeholder Type qui vient d’être inséré est écrit en souligné, et _ précise que le type concret peut être déterminé ultérieurement à l’aide d’autres paramètres ou valeurs de retour. Le type placeholder peut être utilisé entre autres dans les tableaux, les dictionnaires, les tuples ou les types de fonctions, comme le montre la proposition :

Array<_>    // array with placeholder element type
[Int: _]    // dictionary with placeholder value type
(_) -> Int  // function type accepting a single type 
            // placeholder argument and returning 'Int'
(_, Double) // tuple type of placeholder and 'Double'
_?          // optional wrapping a type placeholder

Un petit complément doit rendre l’utilisation des types existentiels plus claire. Les existentiels ne définissent pas un type concret, mais un protocole avec une valeur et des opérations associées. Le type sous-jacent est dynamique. SE-0335 « Introduce existential any » introduit tout d’abord de manière facultative l’annotation avec le mot-clé any pour désigner les types existentiels. Pour la prochaine version principale du langage, ce mot-clé devrait être obligatoire.

Parmi les nouveautés linguistiques, il y a aussi de petits ajouts pour la programmation parallèle, qui a subi des modifications importantes dans la version précédente. En outre, Swift 5.6 apporte des compléments d’outils : SE-0303 « Package Manager Extensible Build Tools » permet d’intégrer des actions spécifiques dans le processus de construction via des plug-ins, et SE-0332 « Package Manager Command Plugins » complète le Proposal avec des plug-ins qui peuvent être utilisés directement à partir de la ligne de commande.

D’autres nouveautés de Swift 5.6 peuvent être consultées sur le blog Swift. Les binaires du langage de programmation open source sont disponibles sur la page de téléchargement. Une autre page renvoie aux différents dépôts GitHub avec le code source.

Fin février, Chris Lattner a fait ses adieux à l’équipe Swift, et l’équipe centrale de Swift s’est réorganisée.

Plus d'articles