Au passage, la GLib propose GArray, qui est un tableau extensible, et pourrait certainement remplacer les G(S)List dans de nombreux cas.
je m'attend a avoir un objet de type Liste qui offre une interface simple et clair.
Ensuite il peut y avoir autant de specialisation possible que l'on veut
Le problème si on a une seule interface commune aux différents types de données, c'est qu'on va être obligé de définir toutes les opérations pour tous les types, même quand une opération est très coûteuse.
Par exemple on va avoir une opération "obtenir l'objet précédent" qui sera disponible aussi dans les GSList, malgré le fait que ce soit une opération très coûteuse dans une GSList (on doit parcourir la liste), et très peu coûteuse dans une GList ou GArray (accès en temps constant).
Actuellement, GSList ne propose pas cette opération. Donc si j'ai besoin d'obtenir l'objet précédent, plusieurs cas se présentent:
- j'adapte mon algo pour avoir toujours un pointeur sur l'objet précédent, et donc c'est bien mieux qu'avoir utilisé une fonction générique
- je code une fonction générique, et j'ai une bonne chance de me rendre compte que c'est mauvais
- j'utilise un type de données plus adapté, comme une GList.
Au final, même si l'on masque les spécificités des types de données dans une interface commune, on a quand même besoin de savoir ce qui est utilisé derrière si on veut être efficace.
[^] # Re: autre optimisation
Posté par Yusei (Mastodon) . En réponse au journal Vous trouvez GNOME lent ?. Évalué à 4.
Le problème si on a une seule interface commune aux différents types de données, c'est qu'on va être obligé de définir toutes les opérations pour tous les types, même quand une opération est très coûteuse.
Par exemple on va avoir une opération "obtenir l'objet précédent" qui sera disponible aussi dans les GSList, malgré le fait que ce soit une opération très coûteuse dans une GSList (on doit parcourir la liste), et très peu coûteuse dans une GList ou GArray (accès en temps constant).
Actuellement, GSList ne propose pas cette opération. Donc si j'ai besoin d'obtenir l'objet précédent, plusieurs cas se présentent:
- j'adapte mon algo pour avoir toujours un pointeur sur l'objet précédent, et donc c'est bien mieux qu'avoir utilisé une fonction générique
- je code une fonction générique, et j'ai une bonne chance de me rendre compte que c'est mauvais
- j'utilise un type de données plus adapté, comme une GList.
Au final, même si l'on masque les spécificités des types de données dans une interface commune, on a quand même besoin de savoir ce qui est utilisé derrière si on veut être efficace.