Swift est une version plus pratique de Rust
(blog.namangoel.com)Rust
- Rust est un langage très apprécié, rapide et doté d’une excellente communauté
- Rust résout les problèmes de gestion mémoire en introduisant le concept de propriété
- Il fournit des utilitaires comme
Rc,ArcetCowpour prendre en charge le comptage de références et le « clone-on-write » - Lorsqu’un travail de plus bas niveau est nécessaire, on peut utiliser le système
unsafepour accéder à des pointeurs C bruts - Rust possède plusieurs caractéristiques des langages fonctionnels, comme les énumérations taguées, les expressions de correspondance, les fonctions de première classe et un système de types puissant
- Grâce à un compilateur basé sur LLVM, il peut être compilé en code natif et en WASM
Swift
- J’utilise aussi Swift depuis plusieurs années, et en apprenant Rust, j’ai découvert des similitudes avec Swift
- Swift possède lui aussi des caractéristiques des langages fonctionnels, comme les énumérations taguées, les expressions de correspondance et les fonctions de première classe
- Swift utilise par défaut des types valeur et une sémantique de « copy-on-write »
- Lorsqu’on a besoin de meilleures performances, on peut choisir le système de propriété pour « déplacer » les valeurs
- Lorsqu’un travail de plus bas niveau est nécessaire, on peut utiliser le système
unsafepour accéder à des pointeurs C bruts - Swift utilise lui aussi un compilateur basé sur LLVM et peut être compilé en code natif et en WASM
Déjà-vu ?
- Swift et Rust disposent d’ensembles de fonctionnalités très similaires
- La grande différence réside dans la perspective
- Cette différence devient claire quand on considère leur modèle mémoire de base
Rust descend du bas vers le haut, Swift du haut vers le bas
- Rust part d’un langage système de bas niveau et fournit des outils pour remonter vers un niveau plus élevé
- Swift part d’un langage de haut niveau et fournit des outils pour descendre vers le bas niveau
- Le modèle de gestion mémoire en est l’exemple le plus évident
- Swift utilise par défaut des types valeur et une sémantique de « copy-on-write »
- Rust facilite l’usage des valeurs « moved » et « borrowed », mais utiliser des valeurs
Cowdemande un travail supplémentaire - Swift facilite l’usage des valeurs en « copy-on-write », mais demande en contrepartie un travail supplémentaire lorsqu’on utilise l’emprunt et le déplacement
- Rust est plus rapide par défaut, tandis que Swift est plus simple et plus facile par défaut
Swift cache les idées de Rust derrière une syntaxe proche du C
- La syntaxe de Swift dissimule des concepts issus des langages fonctionnels derrière une syntaxe proche du C, ce qui les rend plus faciles à adopter pour les développeurs
- Comparaison entre l’instruction
matchde Rust et l’instructionswitchde Swift - L’instruction
switchde Swift est en réalité identique à une expressionmatch, mais avec un autre nom et une autre syntaxe - Swift permet aussi d’ajouter directement des méthodes à un
enum
Types optionnels
- Rust n’a pas de
null, mais il aNone - Swift a
nil, mais en réalité c’est la même chose queNone - Swift utilise
T?à la place deOption, et le compilateur impose de vérifier que la valeur n’est pasnil - En Swift, les types optionnels sont faciles à utiliser
Gestion des erreurs
- Rust n’a pas de
try-catch, mais utilise le typeResult - Swift utilise
do-catchau lieu detry-catch, et il faut placertryavant l’appel de fonction - La gestion des erreurs de Swift ressemble à celle de Rust, mais elle est cachée derrière une syntaxe plus familière
Le compilateur de Rust détecte les problèmes, celui de Swift en résout certains
- Le compilateur de Rust détecte de nombreux problèmes courants à la compilation et propose des solutions
- Exemple d’énumération auto-référentielle
- Swift utilise le mot-clé
indirectpour signaler les types récursifs, et le compilateur se charge du reste
Swift est moins « pur »
- Swift a été conçu pour remplacer Objective-C et devait pouvoir interagir avec le code existant
- Swift a fait de nombreux choix pragmatiques et c’est un langage plus vaste que Rust
- Swift a été conçu avec l’idée de « divulgation progressive », de sorte que plus on apprend le langage, plus de fonctionnalités se révèlent
- Quelques fonctionnalités du langage Swift :
- classes / héritage
- async-await
- async-sequences
- actors
- getter et setter
- propriétés lazy
- property wrappers
- Result Builders (par ex. HTML / SwiftUI)
Le prix de la praticité
- Swift est un langage plus facile pour démarrer et gagner en productivité
- Sa syntaxe est plus familière et de nombreuses tâches sont gérées automatiquement
- Swift est un langage de plus haut niveau, ce qui implique les mêmes compromis
- Par défaut, un programme Rust est bien plus rapide qu’un programme Swift
- Rust est rapide par défaut et permet de devenir lent, tandis que Swift est facile par défaut et permet de devenir rapide
- Les deux langages ont chacun leurs usages
- Rust convient mieux à la programmation système et embarquée
- Swift convient mieux à l’écriture d’interfaces utilisateur et de serveurs
- Avec le temps, on peut s’attendre à ce que la zone de recouvrement entre les deux langages s’élargisse
Résumé GN⁺
- Cet article compare et explique les similitudes et les différences entre Swift et Rust
- Swift reprend de nombreuses idées de Rust et les propose avec une syntaxe plus familière
- Les deux langages ont chacun leurs points forts et leurs usages, et l’on peut s’attendre à davantage de recoupements avec le temps
- Il aide à comprendre les différences entre Swift et Rust sous divers angles, comme le modèle de gestion mémoire, la gestion des erreurs et les types optionnels
- Parmi les langages aux fonctionnalités proches, on peut citer Kotlin et TypeScript
1 commentaires
Avis Hacker News
Les personnes qui découvrent Rust l’aiment souvent parce qu’elles découvrent aussi pour la première fois les langages de la famille ML
Rust est le premier langage à avoir popularisé la gestion automatique de la mémoire sans GC
L’ère de Smalltalk est terminée, c’est désormais l’ère de ML
En travaillant sur l’intégration de Rust dans une app iOS en Swift, j’ai eu envie d’utiliser davantage Swift
Rust a introduit le concept de propriété pour résoudre les problèmes de gestion mémoire, mais ne l’a pas inventé
Rust et Swift ont chacun leurs points forts
Les outils de Swift sont moins pratiques que ceux de Rust
J’ai essayé d’apprendre Rust, mais j’ai eu du mal parce que les exemples sont trop complexes
Swift permet d’ajouter directement des méthodes aux énumérations
Swift utilise par défaut des types valeur, avec une sémantique de copy-on-write
Chaque fois que je lis un article qui fait l’éloge de Swift, je me demande quelle est l’expérience des développeurs qui n’utilisent pas l’écosystème Apple/macOS
Je me demande si je suis le seul à ne pas aimer la syntaxe à point de Zig et Swift
.variantvsType::Variant