Swift : les boucles for de style C seront supprimées dans le langage de programmation
à partir de la version 3.0
Le 2015-12-17 14:56:39, par Michael Guilloux, Chroniqueur Actualités
Swift, le langage de programmation multiparadigme d’Apple, et depuis peu open source, a été dévoilé il y a moins de deux ans, mais il a su gagner en popularité auprès des développeurs. Il lui est en effet reconnu de faciliter la construction de logiciels qui sont rapides et sûrs par conception. En plus de cet avantage, la croissance de Swift peut être en partie imputée à sa courbe d’apprentissage courte grâce à une certaine familiarité pour les développeurs issus de certains langages populaires. À titre d’exemple, rappelons que le langage d’Apple utilise de nombreuses déclarations familières pour les développeurs C. C’est le cas notamment des boucles for et while qui permettent d’exécuter une tâche plusieurs fois.
En plus de la boucle for traditionnelle héritée du langage C, Swift ajoute une boucle for-in qui facilite les itérations sur des tableaux, des dictionnaires, des plages, des chaînes et bien d’autres séquences. La boucle for-in exécute un ensemble d’actions pour chaque élément dans une séquence. En ce qui concerne la boucle for, elle exécute un ensemble d’actions jusqu’à ce qu’une condition spécifique soit remplie, typiquement par incrémentation d’un compteur à chaque fois que la boucle se termine.
Exemples d’utilisations de for et for-in pour afficher les cinq premières entrées d’une table de multiplication par 5 :
Avec la boucle for-in
Avec la boucle for
Si la boucle for-in est beaucoup plus utilisée que la boucle for dans Swift, la dernière présente par contre certains avantages que n’offre pas la boucle for-in. Toutefois, ces avantages semblent ne pas être aussi incontournables pour justifier l’implémentation de la boucle for de style C dans le langage Swift, d’après un utilisateur. Ce dernier a alors fait une proposition sur GitHub dans laquelle il demande de « supprimer les boucles for de style C avec des conditions et incrémenteurs ».
Après avoir examiné la requête du 7 au 10 décembre, l’équipe d’examinateurs a accepté la requête et décidé de supprimer les boucles for dans la version 3.0 de Swift. En ce qui concerne la version 2.2 en cours de développement, il y sera introduit un avertissement pour indiquer aux utilisateurs que les boucles de style C seront supprimées, avant que la mesure soit effectivement appliquée dans Swift 3.0.
Le comité d’analyse s’accorde sur le fait que les boucles for de style C sont assez rares dans le code Swift et qu’en plus, la plupart des utilisations existantes pourraient être mieux écrites en boucles for-in. Toutefois, il reconnaît qu’il y a des domaines en particulier où le retrait des boucles for de style C pourrait causer des problèmes.
D’abord, il existe des situations où les boucles sont difficiles à exprimer clairement avec for-in. C’est le cas notamment des décomptes. Pour corriger ce problème, la solution envisagée consiste à apporter des améliorations dans la bibliothèque Standard.
Un autre problème que pourrait causer la suppression des boucles for est qu’il existe encore des utilisations avancées de ces boucles qui sont difficiles à exprimer autrement. Le comité d’examen estime ici que ces utilisations plus avancées ne sont pas assez fréquentes pour justifier le maintien des boucles for de style C dans le langage.
Le dernier problème est que la performance de la boucle for-in est à la traîne par rapport à celle des boucles for de style C dans certains cas. L’amélioration de l’optimiseur a été trouvée comme une solution pour combler cet écart de performance. Le comité d’examen estime par ailleurs que les boucles while sont aussi une solution acceptable pour les codes à performance critique où l’optimiseur ne parvient pas à éliminer les abstractions utilisées dans la boucle for-in.
Sources : Swift-evolution-announce mailing list, GitHub
Et vous ?
Que pensez-vous de la suppression des boucles for de style C dans Swift ?
Les solutions proposées peuvent-elles combler la suppression de ces boucles ?
Voir aussi
Swift est maintenant open source, le code source du langage de programmation d’Apple est disponible sur GitHub
En plus de la boucle for traditionnelle héritée du langage C, Swift ajoute une boucle for-in qui facilite les itérations sur des tableaux, des dictionnaires, des plages, des chaînes et bien d’autres séquences. La boucle for-in exécute un ensemble d’actions pour chaque élément dans une séquence. En ce qui concerne la boucle for, elle exécute un ensemble d’actions jusqu’à ce qu’une condition spécifique soit remplie, typiquement par incrémentation d’un compteur à chaque fois que la boucle se termine.
Exemples d’utilisations de for et for-in pour afficher les cinq premières entrées d’une table de multiplication par 5 :
Avec la boucle for-in
Code : |
1 2 3 4 5 6 7 8 | for index in 1...5 { print("\(index) times 5 is \(index * 5)") } // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25 |
Code : |
1 2 3 4 5 6 7 8 | for var index = 1; index < 6; ++index { print("\(index) times 5 is \(index * 5)") } // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25 |
Après avoir examiné la requête du 7 au 10 décembre, l’équipe d’examinateurs a accepté la requête et décidé de supprimer les boucles for dans la version 3.0 de Swift. En ce qui concerne la version 2.2 en cours de développement, il y sera introduit un avertissement pour indiquer aux utilisateurs que les boucles de style C seront supprimées, avant que la mesure soit effectivement appliquée dans Swift 3.0.
Le comité d’analyse s’accorde sur le fait que les boucles for de style C sont assez rares dans le code Swift et qu’en plus, la plupart des utilisations existantes pourraient être mieux écrites en boucles for-in. Toutefois, il reconnaît qu’il y a des domaines en particulier où le retrait des boucles for de style C pourrait causer des problèmes.
D’abord, il existe des situations où les boucles sont difficiles à exprimer clairement avec for-in. C’est le cas notamment des décomptes. Pour corriger ce problème, la solution envisagée consiste à apporter des améliorations dans la bibliothèque Standard.
Un autre problème que pourrait causer la suppression des boucles for est qu’il existe encore des utilisations avancées de ces boucles qui sont difficiles à exprimer autrement. Le comité d’examen estime ici que ces utilisations plus avancées ne sont pas assez fréquentes pour justifier le maintien des boucles for de style C dans le langage.
Le dernier problème est que la performance de la boucle for-in est à la traîne par rapport à celle des boucles for de style C dans certains cas. L’amélioration de l’optimiseur a été trouvée comme une solution pour combler cet écart de performance. Le comité d’examen estime par ailleurs que les boucles while sont aussi une solution acceptable pour les codes à performance critique où l’optimiseur ne parvient pas à éliminer les abstractions utilisées dans la boucle for-in.
Sources : Swift-evolution-announce mailing list, GitHub
Et vous ?
Voir aussi
-
SofEvansMembre émériteIl n'y a que moi à n'avoir jamais vraiment compris ce que MikeRowSoft écrit ?
Sinon, je trouve dommage que la boucle for disparaisse complètement.
D'un certain point de vue, la boucle for en langage C est tout aussi "supprimable" car la boucle while fait très bien le job, mais bon ...
pour ceux qui connaisse swift mieux que moi, est-ce que for-in peut complément remplacer for ?le 17/12/2015 à 16:23 -
UtherExpert éminent séniorCherche pas a comprendre, tu perd ton temps, c'est un vieux troll qui s'amuse a écrire un peu partout des truc qui ont l'air techniques mais qui ne veulent rien dire.
D'habitude quand on ignore les trolls ils finissent par ce lasser, mais celui là est coriace.le 17/12/2015 à 17:01 -
gstrategeMembre actifC'est quoi les avantages de ce langage ??le 17/12/2015 à 15:51
-
melka oneMembre expérimentécertains se sent plus a l'aise avec while qu'avec for et vice versa c'est vraiment dommage de supprimer forle 17/12/2015 à 17:05
-
NSKisEn attente de confirmation mailIl est parfois nécessaire d'admirer dans toute son ampleur "l'intelligence" humaine...
On résume:
1° Les gars ont l'idée de supprimer le "For" (Pourquoi? Bof! On savait pas quoi proposer!!!)
2° Les gars listent tous les problèmes que cela va poser à plein de monde
3° Les gars proposent de supprimer le "For" malgré tout (ben oui quoi, après une idée à la c..., une logique de c...!!!)
Un conseil pour tout ceux qui doivent maintenir un logiciel plusieurs années (parce que oui messieurs de Swift, dans le monde réel, on ne redéveloppe pas une application à chaque poussée de chaleur des concepteurs du langage utilisé): Fuyez!!! Lorsque l'évolution d'un langage n'est pas capable d'assurer la perennité de sa propre syntaxe, il ne s'agit pas d'un langage "professionnel"le 18/12/2015 à 9:32 -
UkualaiNouveau membre du ClubFranchement, c'est le genre de chose à ne absolument pas faire et ne présage rien de bon pour la maintenabilité des applications qui seront codé en swift.
Encore une fois Apple montre bien que rien ne perdure même en open source...le 18/12/2015 à 10:05 -
UtherExpert éminent séniorLe switch en Swift fait du pattern matching ce qui permet de faire des chose bien plus évoluées qu'une simple suite de if.
Non. A moins que l'optimisateur soit mauvais, les for each sont normalement aussi rapides de les for classique, voire plus quand il permettent d'économiser un contrôle de dépassement.le 18/12/2015 à 9:23 -
JhulkMembre du ClubJe trouve d'une stupidité applesque !
Non seulement pour les cas simples on nous dit que c'est moins performant, mais en plus les raisons évoquées ne justifient vraiment pas une telle régression, les mecs bossent quand même à enlever des possiblités de développement.
Les devs feront quand même des for avec des while dont la condition de sortie sera testée dans la boucle.
J'espère sincèrement que ce mouvement ne sera pas suivi par les autres langages ...le 18/12/2015 à 9:45 -
KiloasteinMembre du ClubJe trouve pas important de faire disparaitre une boucle juste parce qu'il ya une "meilleure". Je fais partie de ceux qui sont á l'aise avec la boucle for ... ce serait vraiment domage de nous en priver.le 18/12/2015 à 11:46
-
CodeurPlusPlusEn attente de confirmation mail
Tout à fait. Il va falloir qu'on m'explique un jour d'où vient cette maladie des langages dits "modernes" qui consiste à ne pas assurer une rétro-compatibilité avec eux-mêmes. On avait un "for" jusque-là, mais on va le virer, préparez-vous à réécrire votre code pour vous adapter à nos changements d'humeur !
Le "for-each" (où je ne sais quel autre néologisme) est mieux ? Très bien, utilitons-en ! Mais gardons le "for" classique au moins pour la compatibilité ascendante.
Personnellement je boycotte les logiciels qui ne sont pas rétro-compatibles avec eux-mêmes, donc je suppose que je ne programmerai jamais en Swift.le 18/12/2015 à 21:38