Vrai, mais C++ permets aussi de faire à la main.
C'est parfois utile, quand par exemple on veut éviter les réallocations et garder la mémoire "en bloc" (fragmentation mémoire). La STL ne fournit par exemple pas de ring buffer.
On pourrait aussi parler, niveau utilité, de la programmation bare metal (pas d'OS pour gérer la ram).
Certains programmes vont aussi implémenter plusieurs "tas", en fonction de la taille des allocations nécessaires ou de l'espérance de vie, pour des raisons de performances.
On est bien d'accord: ce sont des cas exceptionnels. Mais ils existent, sont pour moi uniquement possibles dans des langages bas-niveau, et le sont en C++. Malgré qu'il fournisse aussi des fonctionnalités de haut niveau (RAII, héritage, exceptions, RTTI. La programmation générique me paraît ni haut, ni bas niveau par contre?).
La STL fournit nombre d'abstractions qu'il est désormais recommandé d'utiliser, sauf si tu as un besoin spécifique bien sûr.
Typiquement, la STL est incapable de gérer le besoin spécifique qui est de gérer des handles, tant que c'est pas des pointeurs.
Descripteurs de fichiers UNIX, ID mémoire opengl, ID de fenêtres WIN32... je pense que certaines API que BDD utilisent aussi des IDs.
Elle est pourtant à mon avis un bon example de fonctionnalités génériques, de haut niveau, puisque le contrôle sur la mémoire est au final assez faible quand on l'utilise, au moindre problème ça balance une exception, et il n'existe à ma connaissance aucun outil capable de vérifier que toutes les exceptions ont été traitées, en C++.
Par contre, le langage lui-même est capable de mieux, notamment pour le debug (non, debug la STL c'est pas génial) ou les systèmes ou les exceptions ne sont pas les bienvenues (pour diverses raisons). Cf eastl.
[^] # Re: C++, haut niveau ?
Posté par freem . En réponse au journal Écrire un jeu en Rust presque de zéro. Évalué à 4.
Vrai, mais C++ permets aussi de faire à la main.
C'est parfois utile, quand par exemple on veut éviter les réallocations et garder la mémoire "en bloc" (fragmentation mémoire). La STL ne fournit par exemple pas de ring buffer.
On pourrait aussi parler, niveau utilité, de la programmation bare metal (pas d'OS pour gérer la ram).
Certains programmes vont aussi implémenter plusieurs "tas", en fonction de la taille des allocations nécessaires ou de l'espérance de vie, pour des raisons de performances.
On est bien d'accord: ce sont des cas exceptionnels. Mais ils existent, sont pour moi uniquement possibles dans des langages bas-niveau, et le sont en C++. Malgré qu'il fournisse aussi des fonctionnalités de haut niveau (RAII, héritage, exceptions, RTTI. La programmation générique me paraît ni haut, ni bas niveau par contre?).
Typiquement, la STL est incapable de gérer le besoin spécifique qui est de gérer des handles, tant que c'est pas des pointeurs.
Descripteurs de fichiers UNIX, ID mémoire opengl, ID de fenêtres WIN32... je pense que certaines API que BDD utilisent aussi des IDs.
Elle est pourtant à mon avis un bon example de fonctionnalités génériques, de haut niveau, puisque le contrôle sur la mémoire est au final assez faible quand on l'utilise, au moindre problème ça balance une exception, et il n'existe à ma connaissance aucun outil capable de vérifier que toutes les exceptions ont été traitées, en C++.
Par contre, le langage lui-même est capable de mieux, notamment pour le debug (non, debug la STL c'est pas génial) ou les systèmes ou les exceptions ne sont pas les bienvenues (pour diverses raisons). Cf eastl.