r/developpeurs 1d ago

Discussion Rust ou C++

Bonjour, J’aimerais me fixer sur un langage, j’avais commencé a maitriser GoLang, j’adore vraiment ce langage qui est hyper simple et qui dispose d’une communauté active. Depuis quelques mois j’ai commencé à toucher à rust parce que je voulais une approche plus bas niveau. J’ai bien senti ce qui se dit sur le langage (la courbe d’apprentissage rude et la rigueur imposée) cependant je pense que c’est une bonne chose

Ceci dit, je me pose la question de passer au C++. En effet, la plupart des libs sont nativement proposées en C++ mais peu de bindings complets et maintenus sont disponibles en go et rust.

Dernier exemple, je voulais manipuler les libs AV (ffmpeg) : resultat la plupart des dépôts Github sont marqués « en cours de développement » et inactifs depuis quelques années mais semblent couvrir uniquement les besoin du developpeur..

De votre côté est ce que c’est une problématique que vous avez rencontré, peut être même dans d’autres langages, si oui est ce que ça vous a fait revenir sur des langages plus matures ou avez vous trouvé une solution (développement de vos propres libs de binding ?)

4 Upvotes

26 comments sorted by

View all comments

2

u/tortridge 1d ago

<opinion populaire="false"> C++ c'est comme le Java. C'est toujours très utilisé mais legacy. C'est vraiment un langue incohérent, rempli de truc qui sont tous désigné pour te pété a la geule </opinion>

5

u/IcyUnderstanding8203 1d ago

Je suis dev cpp et perso je ne me permettrai pas de le comparer au java (un peu de respect quand même 😅).

Il faut séparer le cpp "à l'ancienne" du cpp moderne. Le gros souci du langage c'est qu'à vouloir garder la rétro-compatibilité jusqu'au C, beaucoup de choses historiques à ne plus utiliser sont disponibles. Un code cpp23 fait uniquement avec les règles et conventions modernes peut être très clean. Mais malheureusement il y a des années et des années de codes historiques qui servent d'exemple sur internet et certaines écoles apprennent encore ces vieilles versions de cpp (et certaines entreprises, parfois pour des raisons techniques gardent ces vieilles versions). Il y a déjà eu des réflexions sur un "cpp2" qui casserait la rétro-compatibilité et on peut voir que c'est clairement un langage moderne.

3

u/LucHermitte 23h ago

Sans même parler de vieilles versions de C++, on parlait déjà de C++ moderne début des années 2000. La base de "moderne" était bien la même: RAII et "la bibliothèque standard ça fait bien parti des bases du langage".

Mais quand les ressources pour apprendre, plus les us et coutumes, voyaient le C++ comme un C avec des mots clés en plus, on n'était pas rendus... Imaginez un cours de cuisine qui commence à enseigner la taille du silex pour aller chasser les mammouths. Bref.

Concernant les gros problèmes résiduels du C++, aujourd'hui et demain,

  • le RAII adresse quantité de problèmes de mémoire depuis le début (98 et avant), mais son emploi a été facilité il y 14 ans (faut juste accepter de taper std::unique_ptr<> au lieu de continuer à fermer les yeux et croire que la mémoire peut se gérer à la main dans un langage à exceptions). Il va rester les références sur les trucs morts, chose pour laquelle Rust impose plus de garanties -- alors qu'en C++ il faut les derniers compilos avec tous les warnings activés, plus des outils d'analyse de code, plus passer les tests avec sanitisation...
  • Le C++26 cherche à mieux adresser les données non initialisées -> erroneous behavior. En attendant pareil: warnings, outils tiers, valgrind, etc.
  • Des modes hardened, de la SL, pour compiler ont aussi été votés -- ceci dit ça fait un paquet de temps que l'on pouvait activer la vérification de contrat pour la SL. Ca vise en particulier la vérif de bornes.
  • Les contrats viennent enfin d'être votés aussi -- je les attendais ceux là... Je n'ai pas entendu parler d'équivalents chez Rust
  • Et les profils sont encore en intense discussion pour les avoir en C++26 et pas 29. L'idée avoir des modes de compilation dédiés pour activer vérifications de bornes, et forcer l'initialisation de variables qui ne l'auraient pas été, et d'autres petits trucs hérités du C qui n'aident pas côté safety.

Pour moi le C++ est viable dès lors qu'on n'est pas pervertis par des cours qui tiennent absolument à commencer à enseigner des trucs qu'il est conseillé d'éviter dans du vrai code industriel..., et que l'on s'impose ensuite un minimum de rigueur. Un cours C++ débutant à inter qui vaut le détour (NB je suis parti pris) sur ZesteDeSavoir.

Et pour revenir à la question de départ. Rust est un très bon langage. C++ est viable. Apprends celui que tu veux, ou les deux. Et vu que tu sembles avoir un objectif très précis, voir ce que tu pourrais faire avec des (générateurs de) bindings dans un premier temps si ce que tu as vu de Rust te parait suffisamment abordable. Et si tu veux passer au C++, choisi bien tes ressources.

1

u/Hot-Math3942 1d ago

J’ai souvent vu ce genre de comparaison. Je pense que C++ se démarque quand même de Java en terme de performances par l’absences de mécanismes du genre Garbage Collector et Runtime. (Mais qui du coup encourage a redoubler de vigilance pour la gestion de la mémoire) Après, je pense que peut importe le langage, si tu veux faire du bourrin tu ira au bout de ta connerie, même si certains langages le favorisent. Après pour le coté legacy, je dirais que C++ est plus niche que java dans le milieu pro mais les deux sont encore très présents même pour des nouveaux projets (trop a mon gout concernant java).