Bonjour,
Merci pour ce lien qui confirme la lenteur de Swift quelles qu'en soient les explications.
Ce qui m'a intrigué était que Swift reprenait en partie le modèle de Objective C pour assurer la compatibilité. Or Objective C ne donne pas de performances probantes sur des taches de bas niveau ( manipulation de chaines, d'octets, de dates ...). Objective C connaît le C et ces taches peuvent sans doute être reléguées au C.
Donc si Objective C est peu performant mais repris par Swift il faut s'attendre que sur certaines taches les performances se dégradent comme si Swift devait téléphoner à Objective C pour avoir la réponse.
Mais bon sur d'autres aspects de Swift ce serait intéressant de voir la performance des arrays et des dictionaries. C'est sur des taches basiques qu'il faut d'abord se faire une idée.
Cordialement.
les langages orientés objets, java, objective-c, utilisent des objets dynamiques, qu'il faut créer, qui sont supprimés automatiquement quand ils n'ont plus de référence, d'où la délicate gestion du garbadge collector.
c++ laisse le choix entre des objets dynamiques ou des objets statiques. Mais même dans le cas des objects dynamique, c'est le programmeur qui fait le choix de les libérer et pas le système. Pour objective C, j'ai un doute sur le fait que la libération soit faite par le système ou par le programmeur, mais les objets dynamiques sont un peu moins efficaces, mais pas à ce point
le problème de java dans les premiers temps, c'est que quand il n'y avait plus de mémoire, tout s'arrêtait pour libérer tous les objets plus référencés.
Ils répartissent à présent ou le font en tâche de fond, je ne sais pas
les problèmes de performance de swift sont peut-être un problème de réglage des paramètres systèmes, ça devrait s'améliorer
Bonjour,
Pour Objective C on peut choisir entre gestion automatique de la mémoire ou pas. Mais depuis que l'option automatique existe les développeurs abandonnent la gestion volontaire de la mémoire.
Ensuite pour Objective C comme tout est dérivé de NSObject, à l'exécution il vérifie le typage. En C++ le typage est définit à la compilation et génère des RTTI ( run time type information ).
Par exemple dans un NSMutableArray qui peut contenir tout ce qui est dérivé de NSObject, on insère un NSInteger , puis un NSDate , puis un NSString .
Au moment de sortir ces objets du NSMutableArray il faut impérativement définir le type voulu. Ce qui implique au moins une opération supplémentaire alors que l'extraction en C++ se fait directement. Par contre on ne peut pas mettre des types différents dans le même conteneur en C++. En fait on peut le faire mais cela implique une dérivation par rapport à un ancêtre.
Cordialement.