IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

C++ sous stéroïdes : Bjarne Stroustrup présente des « profils » renforcés par des lignes directrices pour la sécurité des ressources et des types
Afin de garantir que le code est contemporain et sûr

Le , par Jade Emy

30PARTAGES

11  0 
C++ sous stéroïdes : Bjarne Stroustrup présente des « profils » renforcés par des lignes directrices pour la sécurité des ressources et des types, afin de garantir que le code est contemporain et sûr.

Bjarne Stroustrup a présenté des « profils » renforçant les lignes directrices pour la sécurité des ressources et des types de C++. Ces profils sont un moyens de s'assurer que le code soit contemporain, plutôt que de s'appuyer sur des techniques dépassées, peu sûres et difficiles à maintenir.

Le C++ est un langage de programmation général de haut niveau. Publié pour la première fois en 1985 en tant qu'extension du langage de programmation C, il s'est considérablement développé au fil du temps. Depuis 1997, le C++ possède des caractéristiques orientées objet, génériques et fonctionnelles, ainsi que des fonctions de manipulation de la mémoire de bas niveau pour des systèmes tels que les micro-ordinateurs ou pour créer des systèmes d'exploitation tels que Linux ou Windows. Il est généralement implémenté en tant que langage compilé, et de nombreux fournisseurs proposent des compilateurs C++.

Le C++ a été créé par l'informaticien danois Bjarne Stroustrup. Il a notamment dirigé le département de recherche sur la programmation à grande échelle aux Bell Labs, a été professeur d'informatique à l'université Texas A&M et a passé plus d'une décennie chez Morgan Stanley tout en étant professeur invité à l'université Columbia. Depuis 2022, il est professeur titulaire à Columbia.

Récemment, Bjarne Stroustrup a présenté des « profils » renforçant les lignes directrices pour la sécurité des ressources et des types de C++. "Cela fait maintenant plus de 45 ans que le C++ a été conçu", écrit Bjarne Stroustrup dans un article publié cette semaine dans Communications of the ACM. Il se plaint que de nombreux développeurs "utilisent le C++ comme s'il s'agissait encore du millénaire précédent", dans un article intitulé 21st Century C++ qui promet "les concepts clés sur lesquels des logiciels C++ performants, sûrs et flexibles peuvent être construits : la gestion des ressources, la gestion de la durée de vie, la gestion des erreurs, la modularité et la programmation générique...".


Bjarne Stoustrup présente des moyens de s'assurer que le code soit contemporain, plutôt que de s'appuyer sur des techniques dépassées, peu sûres et difficiles à maintenir : les lignes directrices et les profils.

Pour aider les développeurs à se concentrer sur l'utilisation efficace du C++ contemporain et à éviter les « coins sombres » obsolètes du langage, des ensembles de lignes directrices ont été élaborés. Je me concentre ici sur les lignes directrices du C++ Core que je considère comme les plus ambitieuses... Mon objectif principal est une utilisation de la norme ISO C++ sans danger pour les types et les ressources. En d'autres termes :

- Chaque objet est exclusivement utilisé conformément à sa définition
- Aucune ressource n'est perdue.

Cela englobe ce que les gens appellent la sécurité de la mémoire et bien plus encore. Il ne s'agit pas d'un nouvel objectif pour le C++. Il est évident qu'il ne peut pas être atteint pour chaque utilisation du C++, mais nous avons maintenant des années d'expérience montrant que c'est possible pour le code moderne, bien que jusqu'à présent l'application ait été incomplète... Lorsque l'on pense au C++, il est important de se rappeler que le C++ n'est pas seulement un langage, mais qu'il fait partie d'un écosystème composé d'implémentations, de bibliothèques, d'outils, d'enseignement, et plus encore.
Le WG21 (et d'autres) travaille sur des « profils » pour mettre en œuvre des lignes directrices (bien qu'ils ne soient "pas encore disponibles, à l'exception de versions expérimentales et partielles". Mais Stroustrup annonce que les directives de base du C++ "utilisent une stratégie connue sous le nom de sous-ensemble de sous-ensemble".

Premièrement : étendre le langage avec quelques abstractions de bibliothèque : utiliser des parties de la bibliothèque standard et ajouter une minuscule bibliothèque pour rendre l'utilisation des directives pratique et efficace (la bibliothèque de soutien des directives, GSL).
Ensuite : sous-ensemble : interdire l'utilisation de fonctionnalités de bas niveau, inefficaces et sujettes aux erreurs.

Ce que nous obtenons, c'est du "C++ sous stéroïdes" : Quelque chose de simple, sûr, flexible et rapide, plutôt qu'un sous-ensemble appauvri ou quelque chose qui repose sur une vérification massive au moment de l'exécution. Nous ne créons pas non plus un langage avec des caractéristiques nouvelles et/ou incompatibles. Le résultat est 100% ISO standard C++. Les fonctionnalités de bas niveau, désordonnées et dangereuses, peuvent toujours être activées et utilisées en cas de besoin.
Stroustrup écrit que les directives de base du C++ se concentrent sur des règles "dont nous espérons que tout le monde pourra éventuellement bénéficier".

  • Pas de variables non initialisées
  • Pas de violation de plage ou de nullptr
  • Pas de fuites de ressources
  • Pas de pointeurs pendants
  • Pas de violation de type
  • Pas d'invalidation


Pour rappel, Bjarne Stroustrup, créateur du langage C++, a 74 ans. Il avait raconté qu'il est devenu programmeur par erreur, en se trompant de mot au moment de choisir ce qu'il allait étudier après ses examens de fin d'études secondaires. Stroustrup pensait s'inscrire à un cours de mathématiques appliquées, qui s'est avéré être un cours d'informatique. Maintenant, il est l'un des piliers du langage C++.

Source : Article 21st Century C++

Et vous ?

Pensez-vous que ses conseils sont crédibles ou pertinents ?
Quel est votre avis sur le sujet ?

Voir aussi :

Bjarne Stroustrup publie un article dans lequel il explique comment C++ a réussi à s'épanouir, dans un monde surpeuplé de langages et changeant de 2006 à 2020

Vers un C++ plus sûr ? Avec les extensions Safe C++, la communauté veut répondre aux défis modernes de la sécurité des logiciels, dans un contexte où plusieurs recommandent de le remplacer par des alternatives

Les deux factions du C++ : la communauté est divisée entre ceux qui souhaitent un C++ moderne avec un meilleur outillage intégré et ceux qui veulent conserver le langage hérité
Vous avez lu gratuitement 2 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de kmedghaith
Membre confirmé https://www.developpez.com
Le 03/03/2025 à 14:37
A mon humble avis, et en tant qu'utilisateur de C++ depuis presque 20 ans, la meilleure façon de défendre le langage est de le faire évoluer en arrêtant de faire la sourde oreille à certaines demandes très raisonnables:
* Une nouvelle librairie standard, memory safe par défaut. De préférence commune à touts les compilateurs autant que possible, opensource et régulièrement mise à jour.
* Une syntaxe "C++2", sous ensemble du langage safe par défaut plus quelques additions pour le comfort. Pourquoi pas empreinter le borrow checker et les lifetimes (c'est fait dans circle)
* Un système de build et de dépendances standard et moderne

J'utilise pas mal Rust. Je comprends les gens qui veulent y passer: c'est moderne, simple et efficace. Ce n'est pas encore à parité avec le C++ concernant la programmation générique mais ça suffit pour 99% des développeurs.
Il est temps que le C++ apprenne de ses concurrents, juste comme ses concurrents ont appris du C++.
17  0 
Avatar de freesket
Membre du Club https://www.developpez.com
Le 04/03/2025 à 9:58
Note this good summary by David Chisnall (ancien de chez Microsoft Research, chercheur à l'University de Cambridge et architecte système chez SCI Semiconductor) in a January 2024 FreeBSD mailing list post:
"Between modern C++ with static analysers and Rust, there was a small safety delta. The recommendation [to prefer Rust for new projects] was primarily based on a human- factors decision: it’s far easier to prevent people from committing code that doesn’t compile than it is to prevent them from committing code that raises static analysis warnings. If a project isn’t doing pre-merge static analysis, it’s basically impossible."

C++26 répondra à un certain nombre de points:
* La STL "hardened" par défaut (proposition rapidement adoptée car presque tous les fournisseurs de STL ont cette "option") => suppression des violations de type "bound safety".
* Le "initialisation safety"
* Les contrats (possibilité de vérifier les pré-requis et post-requis)
* Probablement la réflection statique
* Devrait apporter des profils (possiblement incomplets) pour vérifier les "type, bound, lifetime safety", inspirés de ce qu'il se fait avec les outils fournis avec clang ou cl. L'avantage c'est que ce sera directement à la compilation et non pas dans un outil séparé.
=> Conséquence, C++26 va rendre les méthodes "unsafe" (venant souvent du C) visibles (naked union, variant, enum C, NULL, pointeur de type array, for à l'ancienne, naked new/delete, malloc/free, cast douteux, les fonctions C unsafe...) et donc rendre le language plus propre et épuré pour ceux qui ne désactiverons pas la vérification à la compilation.
* Pour le petit plus (exemple not_null<T>, narrow_cast...) il faut voir du côté de la GSL (Guideline Support Library).
4  0 
Avatar de Jacti
Membre habitué https://www.developpez.com
Le 10/03/2025 à 12:26
Il fut un temps où, en plus de mon métier de concepteur/consultant, j'enseignais le C++ en entreprise à des développeurs qui connaissaient déjà d'autres langages (environ 1 cours de 5 jours/mois). Il s'agissait à l'époque de C++11. J'ai aussi audité, à l'aide de Logiscope des millions de lignes de C++ pour des applications militaires principalement (les fameux SIC et SIR). On pouvait déjà écrire du code très propre en C++ à condition d'être très discipliné et d'avoir fait une conception objet impeccable. Hélas, je me suis rendu compte que peu de développeurs comprenaient réellement et maîtrisaient la conception objet et la programmation en C++ "safe". Il me semble que les ajouts sont fait pour aider les développeurs et les guider dans des concepts qu'ils ne comprennent pas toujours jusqu'au fond des choses.
Peut-être que mon post est un peu provocateur mais c'est vraiment ce que je pense ayant pratiqué la conception objet dès le début en 1983 avec les articles de Grady Booch et le C++ dès 1993.
PS : j'ai pratiqué intensivement la métaprogrammation en C++ avec la généricité et il me semble que ce n'est qu'avec C++ qu'on arrive à faire des choses vraiment sophistiquées dans ce domaine. Rust ne lui arrive pas à la cheville.
4  0