Apps Android / IPhone Pourquoi Swift et non plus Objective-C ?
Articol Swift poza 2 couverture

Apps Android / IPhone

Pourquoi Swift et non plus Objective-C ?

Dans cet article, je souhaite vous présenter les avantages de l’utilisation du langage de programmation Swift dans le développement des applications mobiles iOS.

POURQUOI SWIFT?

Swift est le nouveau langage de programmation, plus rapide et plus performant que son prédécesseur, Objective-C, auquel il serait judicieux de renoncer.

Il faut sortir de votre zone de confort et adopter Swift dès maintenant !

Chez Beler Soft, j’ai commencé à utiliser Swift dès son lancement. Je me souviens que j’ai mis un peu de temps à m’y accoutumer, car j’avais l’habitude de travailler avec Objective-C, mais les résultats ont été visibles dès les premiers jours.

Le code source est mieux structuré et organisé, on peut ajouter des fonctionnalités plus facilement, et les erreurs sont mieux gérées car on arrive à les corriger lors de la compilation et non plus lorsqu’on exécute le programme.

Des programmeurs s’interrogent :
– Devrais-je apprendre Swift ?
– Est-ce que Swift est stable ?
– Est-ce que Swift est plus rapide qu’Objective-C ?

La réponse est OUI pour tout !

Il faut apprendre Swift, que vous soyez programmeur expérimenté ou débutant dans le développement des applications iOS !

AVANTAGES SWIFT

Qu’est-ce qu’il fait que Swift est si puissant et singulier ?
– Il est sur
– Il est stable
– Il est un langage de programmation multi-paradigme
– Il a une syntaxe propre
– Il est rapide

Swift est un langage de programmation très sûr, comportant plusieurs vérifications de sécurité au moment de la compilation.

L’objectif principal est de traiter un plus grand nombre de problèmes pendant la compilation et non lorsque l’application est en exécution.

Une chose importante à mentionner est l’introduction des variables optionnelles. Avec leur aide nous notons l’absence d’une valeur – nil. La variable peut ou pas avoir de valeur, ceci étant optionnelle.

Par exemple :

var variable: String? // il n’y a pas de valeur
variable = ”Hello” // la variable a maintenant une valeur

Swift a aussi un mécanisme de traitement fort de l’erreur et facile à utiliser. La syntaxe ressemble à celle d’autres langages, mais avec un fonctionnement différent. Elle contient aussi les mots clé : throw, catch et try :

• Un objet de type erreur doit se conformer au protocole ErrorType
enum ServerError : ErrorType {
case BadRequest,
case GeneralError(code: Int)
}

• Les Enum Swift sont les plus utiles pour représenter un groupement d’objets de type erreur
• Pour se débarrasser d’une erreur nous utilisons throw, et pour identifier une erreur, nous utilisons try.

D’autres avantages du point de vue de la sureté sont :

– La sureté de la mémoire, qui assure l’initialisation des variables avant utilisation ;
– Un processus d’initialisation en deux phases, avec vérifications de sécurité ;
– La sur-écriture des méthodes obligatoires, et beaucoup d’autres …

Swift est un langage de programmation multi-paradigme. Il offre un support pour de différents styles de programmations, comme par exemple, la programmation orientée-objet, orientée-protocole, fonctionnelle, générique, structurée par blocs, impérative et déclarative.
Le concept de programmation orientée-protocole n’est pas nouveau, mais les protocoles Swift ont quelques caractéristiques spécifiques. L’idée générale de la programmation orientée-protocole est d’utiliser des protocoles à la place des temps. Ainsi, nous pouvons créer un système flexible, avec des relations facile à modifier.

Swift a été conçu comme un langage de programmation de haute performance, d’une excellente rapidité, grâce aux techniques suivantes:
– Optimisation de la disposition de la mémoire
– Création des liens concernant les méthodes pendant la compilation
– Optimisations de la compilation des programmes

PERFORMANCE

Nous avons deux caractéristiques clé du code source :

– La qualité du code – elle doit être flexible, solide et avoir une bonne architecture;
– La performance du code – l’application doit être rapide.

La tâche la plus importante est de rendre fonctionnel le code source sur une architecture stable. L’obtention de la haute performance peut être compliquée et dangereuse. Il ne faut pas chercher à optimiser dès le commencement mais mesurer la performance du code source. Ainsi, il est possible d’optimiser que les parties lentes de l’application.

Une haute performance est impérative car elle est en liée directement à l’expérience de l’utilisateur. On souhaite que les résultats soient affichés immédiatement, éviter l’attente due au chargement de la page, regarder un gif de chargement pour faire patienter ou une animation qui se déroule lentement.

D’année en année, les dispositifs mobiles deviennent de plus en plus puissants, avec une vitesse de plus en plus élevée des processeurs, plus de mémoire, plus d’espace de stockage et plus de vitesse de stockage. Les soucis de performance paraissent sans importance grâce aux composants de hardware, la complexité du software étant aussi en hausse. Nous avons des données plus complexes à stocker et à traiter. Il faut afficher des animations plus complexes et davantage d’opérations…

Pour augmenter la performance, une première méthode est d’augmenter le pouvoir des dispositifs. Car nous pouvons étendre le nombre de serveurs pour mieux gérer les données, mais nous ne pouvons pas demander aux clients de faire des mises à jour sur leurs téléphones portables ou d’en acheter des neufs plus performants. Pareil, la compétence du code ne sera pas plus importante en ajoutant des composants hardware.
La deuxième méthode, mais aussi la plus juste, est de traiter le souci qui cause la baisse de la performance de l’application. Pour ceci, il faut identifier l’origine du désagrément, par exemple un code source lent, et ensuite l’enrichir ou le remplacer.

QUI EST PLUS RAPIDE : OBJECTIVE-C, SWIFT OU C ?

Beaucoup d’entre nous s’interroge sur la rapidité du Swift.
Allons voir ensemble !

Nous allons faire un premier test. Nous allons trier un vecteur avec 100 000 nombre générés d’une manière aléatoire. Nous utilisons la fonction sort de la bibliothèque sdtlib et l’on mesure le temps avec ces trois langages de programmation.

Grafic 1
Conformément Swift High Performance, Xcode 7.0, Swift 2

Temps de tri

Nous observons que Swift est 14.5 fois plus rapide qu’Objective-C et 2.3 fois plus rapide que C.
Dans d’autres exemples ou expériences, généralement C est plus rapide que Swift mais Swift est beaucoup plus rapide qu’Objective-C.

Maintenant, nous allons comparer la vitesse de tri entre Swift arrays et unsafe C arrays (UnsafeMutablePointer).

Unsafe C arrays
var cArray = UnsafeMutablePointer.alloc(count) // 30.000 de nombres entiers
Swift
var sArray:[Int] = []

Voici les résultats :

Methode de tri 1
Conformément Swift High Performance, Xcode 7.0, Swift 2

Temps d execution

Nous observons que la vitesse est relativement similaire dans les deux cas.
Un désavantage du travail avec UnsafeMutablePointer est qu’il n’y a pas de fonctions d’aide prédéfinies, nous devrons les écrire, tandis que Swift inclut des fonctions de tri ou de filtres. Un autre désavantage est qu’il faut allouer et libérer manuellement la mémoire, avec le risque d’accéder à des zones de mémoire qui n’appartiennent pas au programme.

Pour conclure sur la performance de Swift, au final, voici un comparatif de différentes méthodes et types de collections, packs, tableaux ou dictionnaires :

Entite 1
Conformément Swift High Performance, Xcode 7.0, Swift 2

Les idées à retenir de ce comparatif :
– L’insertion et la suppression des objets des tableaux se font en vitesse, mais avec une complexité O(n) qui augmente avec le nombre d’éléments du vecteur ;
– dans le cas d’une recherche importante d’éléments, nous avons une meilleure performance si on utilise des packs.

PROCESSUS DE COMPILATION

Le processus de compilation du code source qui est écrit dans Swift est un processus bien intéressant, comme vous allez le découvrir ci-après :

Compilation

Au début, le code source est transformé en AST (Abstract Syntax Tree). Ensuite, il est transformé en SIL (Swift Intermediate Language), d’abord dans un langage SIL brut, en ensuite dans un état canonique. Après, le code source est transformé en LLVM IR (Intermediate Representation). Au final, après optimisations, le code source s’assemble et devient exécutable pour les architectures spécifiées.

CONCLUSIONS

Nous avons parcouru ensemble quelques tests de performance entre Swift et d’autres langages de programmation, nous avons remarqué la rapidité et les avantages de celui-ci.

Il est important d’optimiser le code source seulement en cas de besoin et non pas dès le commencement.

Une architecture solide et un code source propre sont deux caractéristiques essentielles dans le développement d’une bonne application.

Une optimisation performante ne signifie pas obligatoirement une grande complexité du code source. Le choix des structures de données appropriées enrichissent la performance de l’application.

Swift est le langage de programmation recommandé par Apple dans le développement des applications natives iOS, il remplacera graduellement Objective-C.

La syntaxe du code source est plus agréable et plus facile d’accès dans Swift.

Comme Apple le dit, Swift est « de l’Objective-C mais sans le C ».
___________
Bibliographie :
https://www.raywenderlich.com/123100/collection-data-structures-swift-2
https://yalantis.com/blog/is-swift-faster-than-objective-c/
Swift High Performance, Konstiantyn Koval, 2015, Packt Publishing

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Facebook
Google+
http://blog.beleringenierie.com/2016/07/30/pourquoi-swift-et-non-plus-objective-c/">
Twitter