C++ vs Rust : une comparaison pratique de la vitesse de compilation et de test des deux langages de programmation
Par Matthew Glazar, ingénieur en génie logiciel
Le 2023-01-10 08:17:15, par Bruno, Chroniqueur Actualités
L’ingénieur en génie logiciel, Matthew Glazar, pour qui coder en C++ serait « un cauchemar » reproche entre autre au langage de programmation C++ sa lenteur. Ce dernier n’est pas le seul à haïr le langage de programmation qui, de par son histoire, ou encore son intérêt pour des projets importants, mériterait mieux en termes de respect. On se souvient que Linus Torvalds avait déjà qualifié le C++ « de langage horrible » en 2011, pour ensuite indiquer en 2021 qu’il s’agit « d’un langage de m... » Le codage en Rust est-il aussi mauvais qu'en C++ ? S'interroge Matthew Glazar
Nous avons vu de nombreux langages de programmation se développer en fonction de leur fonctionnalité et de leur popularité, mais les langages ne sont pas destinés à être utilisés en fonction de leur popularité. Nous devrions considérer l'efficacité et la productivité globales lorsqu'il s'agit d'utiliser un langage de programmation. En parlant d'efficacité et de popularité, l'un des langages de programmation les plus utilisés à l'heure actuelle est le C++. Il est connu pour sa contribution aux systèmes d'exploitation et à l'industrie du jeu, et c'est le langage le plus utilisé en termes de programmation compétitive en raison de sa bibliothèque prédéfinie de modèles standard (STL). D'autre part, Rust semble être un sujet brûlant ces temps-ci en référence au C++ en raison de « sa syntaxe similaire ». En-dehors de la syntaxe, il existe d'autres facteurs comme le temps de compilation qui explique pourquoi Rust se fait de la place face au C++.
C++
Hello, world!
Rust
Hello, world!
Rust est un langage de niveau système plus innovant en termes de gestion plus sûre de la mémoire. Il est créé pour être sûr et sécurisé sans affecter les performances et la vitesse. Rust est principalement utilisé pour développer des pilotes de périphériques, des systèmes d'exploitation tels que BlogOS, intermezzOS, QuiltOS, Redox, RustOS, Rux, Tefflin et Tock. Il est également utilisé dans les navigateurs comme Mozilla firefox, les jeux.
En Avril 2021, Microsoft a annoncé Rust preview pour Windows, elle permet la création d'applications Rust pour le célèbre système d’exploitation de Microsoft en utilisant n'importe quelle API Windows. Avec Rust pour Windows, les développeurs peuvent non seulement utiliser Rust sur Windows, mais aussi développer des applications pour Windows en utilisant Rust.
Faisant référence à un cours publié par Microsoft sur les premiers pas avec Rust, Miguel de Icaza, ingénieur distingué de Microsoft a tweeté : « le "Rustening" a commencé chez Microsoft ». Ce que la plupart des adeptes de Rust sur Twitter voient comme un signe que l'entreprise augmente encore ses faveurs pour son langage de prédilection. Bien sûr, ce n'est pas la première fois que Microsoft se tourne vers Rust pour gérer les 70 % de vulnérabilités de Microsoft qui, selon l'entreprise, proviennent de l'utilisation du langage de programmation C++, peu sûr pour la mémoire, dans ses logiciels.
Pour certains analystes, le C++ possède des bases plus solides en ce qui concerne la communauté et les informations générales sur ses principes. En outre, par rapport au C++, Rust est un nouveau venu dans le monde de la programmation, et de nombreux développeurs hésitent à s'y intéresser.
Ce développement ne semble pas être du goût de Linus Torvalds, ingénieur logiciel, créateur principal et développeur du noyau Linux, pour lui, le C++ est un langage horrible, le créateur du noyau Linux n’a d’ailleurs pas hésité à traiter également le C++ de langage de merde. Dans un post publié sur son blog le 14 avril, l’équipe de développement de Google a annoncé qu’elle participe à l'évaluation du langage Rust pour le développement du noyau Linux. Suite à cette déclaration, Linus Torvalds a déclaré lors d’une interview que des discussions sur le sujet seraient beaucoup plus importantes qu'un long post de Google sur le langage. Interrogé sur la suggestion d'un internaute qui a indiqué que, « la solution ici est simple : il suffit d'utiliser C++ au lieu de Rust », Linus Torvalds n'a pas pu se retenir et aurait traité le C++ de « langage de merde ».
Rappelons pour les détracteurs du C++ que, le langage de programmation compilé permettant la programmation sous de multiples paradigmes (le C++), a dépassé Java le mois dernier dans l'indice mensuel TIOBE de popularité du langage, C++a été déclaré langage de l'année 2022 sur l'indice. Non seulement c’est la première fois dans l'histoire de l'indice TIOBE que le C++ dépasse Java, mais il est intéressant de noter au passage que des langages très souvent soutenus dans des forums comme Java ne figure pas dans le top 3 de l'indice mensuel TIOBE.
Si le trio de tête n'a pas changé depuis décembre, C++ a revêtu le maillot jaune en termes de popularité sur l'année écoulée : la popularité de C++ a augmenté de 4,62 points de pourcentage d'une année sur l'autre, suffisamment pour remporter le prix du langage de programmation TIOBE de l'année 2022. L'index TIOBE mesure la popularité des langages de programmation en se basant sur le nombre de pages web retournées par les principaux moteurs de recherche lorsqu'on leur soumet le nom du langage de programmation. Il est mis à jour une fois par mois et donne l'historique depuis 2002.
Le C++ est le langage de programmation de TIOBE de l'année 2022. Il a remporté ce titre parce que le C++ a gagné le plus de popularité (+4,62 %) en 2022. Les seconds sont C (+3,82 %) et Python (+2,78 %). « La raison de la popularité du C++ est son excellente performance tout en étant un langage orienté objet de haut niveau. De ce fait, il est possible de développer des systèmes logiciels rapides et vastes (plus de millions de lignes de code) en C++ sans nécessairement se retrouver dans un cauchemar de maintenance », l'organisation TIOBE.
La décaration de l'organisation TIOBE au sujet du C++ contraste avec ce que disent les détracteurs du C++.
Envoyé par Matthew Glazar
»
Pour en avoir le cœur net, Matthew Glazar va :
Voici, ci-dessous, ses hypothèses qui sont selon lui des suppositions éclairées, pas des conclusions :
Optimiser la compilation de Rust
Dans le passé, Matthew Glazar aurait réussi à améliorer les temps de construction du C++ en passant au linker Mold. Voyons cela avec son projet Rust :
Linux : les performances des éditeurs de liens sont à peu près les mêmes, c'est mieux plus bas
« Dommage ; l'amélioration, si elle existe, est à peine perceptible », conclu Matthew Glazar. C'était Linux. macOS a aussi des alternatives à l'éditeur de liens par défaut : lld et zld.
Sur macOS, Matthew Glazar ne voit également que peu ou pas d'amélioration en changeant l'éditeur de liens par défaut. « Je pense que les éditeurs de liens par défaut sur Linux et macOS font un travail suffisant pour mon petit projet. Les linkers optimisés (Mold, lld, zld) brillent pour les gros projets », dit-il.
Agencement des espaces de travail et des tests
Rust et Cargo ont une certaine flexibilité dans la façon de placer les fichiers sur le disque. Pour ce projet, il y a trois dispositions raisonnables :
Disposant d'un processeur à 32 threads sur sa machine Linux, et d'un processeur à 10 threads sur sa machine macOS, Matthew Glazar s'attend à ce que le déblocage de la parallélisation réduise les temps de construction. Pour un module donné, il y a aussi plusieurs endroits pour vos tests dans un projet Rust :
Optimisation de la compilation C++
Comme dans le cas de Rust, Matthew Glazar fait savoir qu’il a de l’expérience sur la compilation de C++. « Lorsque j'ai travaillé sur le projet C++ original, quick-lint-js, j'ai déjà optimisé les temps de compilation en utilisant des techniques courantes, comme l'utilisation de PCH, la désactivation des exceptions et de RTTI, la modification des tags de compilation, la suppression des #includeS inutiles, le transfert du code hors des en-têtes et l'externalisation des instanciations de template. »
Selon Glazar, GCC est clairement hors norme sur Linux. Clang s'en sort beaucoup mieux. « Mon Clang personnalisé (qui est construit avec PGO et BOLT, comme ma chaîne d'outils Rust personnalisée) améliore vraiment les temps de construction par rapport au Clang d'Ubuntu. libstdc++ se construit légèrement plus vite en moyenne que libc++ », écrit-il.
Utilisation de Clang personnalisée avec libstdc++ dans la comparaison C++ vs Rust.
C++
C++ est un langage de programmation compilé permettant la programmation sous de multiples paradigmes, dont la programmation procédurale, la programmation orientée objet et la programmation générique. Ses bonnes performances, et sa compatibilité avec le C en font un des langages de programmation les plus utilisés dans les applications où la performance est critique.
C'est un langage polyvalent, ce qui signifie qu'il peut être utilisé dans presque tous les cas. Cependant, en raison de ses règles syntaxiques complexes et de son utilisation globalement difficile, il est principalement dominant dans les applications qui nécessitent une grande vitesse, la simultanéité et un examen plus approfondi du fonctionnement du matériel.
C++ est le langage de programmation qui a permis de créer des systèmes d'exploitation comme Microsoft Windows. En outre, le C++ est utilisé pour produire la majorité des jeux vidéo sur le marché.
Rust
Avec Rust, il est possible de développer des pilotes de périphériques, des systèmes embarqués, des systèmes d'exploitation, des jeux, des applications web, et bien d'autres choses encore. Des centaines d'entreprises dans le monde entier utilisent Rust en production pour des solutions multiplateformes et économes en ressources. Des logiciels connus et appréciés, comme Firefox, Dropbox, et Cloudflare, utilisent ce langage. De la startup à la multinationale, du système embarqué au service web à haute disponibilité, Rust est une excellente solution.
« Mon meilleur compliment envers Rust est qu'il est ennuyeux, et c'est un fantastique compliment », déclare Chris Dickinson, Ingénieur chez npm Inc. Pour Antonio Verardi, Ingénieur infrastructure chez Yelp, les développeurs disposent de tous les outils pour réussir à écrire du code en Rust. La documentation, l’outillage et la communauté sont tous simplement fantastiques.
Temps de construction C++ vs Rust
C++ ou Rust ? Lequel des deux compile le plus rapidement ?
« J'ai porté le projet C++ vers Rust et optimisé les temps de compilation Rust autant que possible », indique Matthew Glazar.
A l’issue de son expérience, Matthew Glazar constate :
Le SLOC (Source lines of code), également connu sous le nom de lignes de code (LOC), est une métrique logicielle utilisée pour mesurer la taille d'un programme informatique en comptant le nombre de lignes dans le texte du code source du programme. Le SLOC est généralement utilisé pour prévoir l'effort nécessaire au développement d'un programme, ainsi que pour estimer la productivité ou la maintenabilité du programme une fois le logiciel produit.
« Au cours du processus de portage, j'ai appris à aimer certains aspects de Rust. Par exemple, les proc macros me permettent de remplacer trois générateurs de code différents, ce qui simplifie le pipeline de compilation et facilite la vie des nouveaux contributeurs. Les fichiers d'en-tête ne me manquent pas du tout. Et j'apprécie les outils de Rust (en particulier Cargo, rustup et miri). »
Les temps de compilation sont-ils un problème avec Rust ? Oui selon Matthew Glazar. « Il existe quelques trucs et astuces pour accélérer les compilations, mais je n'ai pas trouvé les améliorations magiques de l'ordre de grandeur qui me rendraient heureux de développer en Rust », dit-il. Les temps de compilation sont-ils aussi mauvais avec Rust qu'avec C++ ? Oui selon Matthew Glazar. « Pour les projets plus importants, les temps de compilation du développement sont pires avec Rust qu'avec C++, du moins avec mon style de code », précise-t-il.
Au-delà de l’analyse de Matthew Glazar, beaucoup s’accordent à reconnaître que les deux langages de programmation ont leurs propres avantages et inconvénients. Par exemple, comme dit précédemment, le C++ bénéficie d'un énorme soutien de la part de la communauté et de nombreux cadres de travail pour le développement de logiciels, alors que Rust ne bénéficie pas d'un tel soutien par rapport au C++. D'un autre côté, il se dit que Rust est bien meilleur dans plusieurs aspects, comme la sécurité de la mémoire, la concurrence et il permet de réfléchir plus attentivement à l'utilisation de la mémoire et des pointeurs.
De nombreux utilisateurs Rust affirment que la programmation dans ce langage est plus facile grâce à une sémantique bien définie et à la prévention des comportements indésirables. En C++, les développeurs auraient plus de problèmes lorsqu'ils essaient d'éviter les comportements non définis. En outre, le C++ est un océan profond comparé à Rust, car le C++ possède tellement de fonctionnalités et de possibilités d'implémentation qu'il peut devenir difficile d'en garder la trace.
Au final, tout dépend si vous êtes à l'aise avec C++ ou Rust.
Source : A practical comparison of build by Matthew Glazar
Et vous ?
Les conclusions de Matthew Glazar sont-elles pertinentes ?
Selon vous, quel langage compile le plus rapidement ? C++ ou Rust ?
Rust remplacera-t-il C++ à l'avenir ?
Voir aussi :
Linus Torvalds souligne une bonne avancée du langage Rust dans le développement du noyau Linux, et aurait qualifié le C++ de « langage de m... », après le message de Google
Microsoft, Google, AWS, Huawei et Mozilla s'associent pour créer la Fondation Rust, une organisation à but non lucratif chargée de gérer le langage de programmation
C++ est sacré langage de programmation de 2022 sur l'indice TIOBE. En termes de popularité, sur l'année écoulée, il est suivi respectivement par C et Python
Nous avons vu de nombreux langages de programmation se développer en fonction de leur fonctionnalité et de leur popularité, mais les langages ne sont pas destinés à être utilisés en fonction de leur popularité. Nous devrions considérer l'efficacité et la productivité globales lorsqu'il s'agit d'utiliser un langage de programmation. En parlant d'efficacité et de popularité, l'un des langages de programmation les plus utilisés à l'heure actuelle est le C++. Il est connu pour sa contribution aux systèmes d'exploitation et à l'industrie du jeu, et c'est le langage le plus utilisé en termes de programmation compétitive en raison de sa bibliothèque prédéfinie de modèles standard (STL). D'autre part, Rust semble être un sujet brûlant ces temps-ci en référence au C++ en raison de « sa syntaxe similaire ». En-dehors de la syntaxe, il existe d'autres facteurs comme le temps de compilation qui explique pourquoi Rust se fait de la place face au C++.
C++
Code : |
1 2 3 4 5 | #include <iostream> int main() { std::cout << "Hello, world!"; return 0; } |
Rust
Code : |
1 2 3 | fn main() { println!("Hello World!"); } |
Rust est un langage de niveau système plus innovant en termes de gestion plus sûre de la mémoire. Il est créé pour être sûr et sécurisé sans affecter les performances et la vitesse. Rust est principalement utilisé pour développer des pilotes de périphériques, des systèmes d'exploitation tels que BlogOS, intermezzOS, QuiltOS, Redox, RustOS, Rux, Tefflin et Tock. Il est également utilisé dans les navigateurs comme Mozilla firefox, les jeux.
En Avril 2021, Microsoft a annoncé Rust preview pour Windows, elle permet la création d'applications Rust pour le célèbre système d’exploitation de Microsoft en utilisant n'importe quelle API Windows. Avec Rust pour Windows, les développeurs peuvent non seulement utiliser Rust sur Windows, mais aussi développer des applications pour Windows en utilisant Rust.
Faisant référence à un cours publié par Microsoft sur les premiers pas avec Rust, Miguel de Icaza, ingénieur distingué de Microsoft a tweeté : « le "Rustening" a commencé chez Microsoft ». Ce que la plupart des adeptes de Rust sur Twitter voient comme un signe que l'entreprise augmente encore ses faveurs pour son langage de prédilection. Bien sûr, ce n'est pas la première fois que Microsoft se tourne vers Rust pour gérer les 70 % de vulnérabilités de Microsoft qui, selon l'entreprise, proviennent de l'utilisation du langage de programmation C++, peu sûr pour la mémoire, dans ses logiciels.
Pour certains analystes, le C++ possède des bases plus solides en ce qui concerne la communauté et les informations générales sur ses principes. En outre, par rapport au C++, Rust est un nouveau venu dans le monde de la programmation, et de nombreux développeurs hésitent à s'y intéresser.
Ce développement ne semble pas être du goût de Linus Torvalds, ingénieur logiciel, créateur principal et développeur du noyau Linux, pour lui, le C++ est un langage horrible, le créateur du noyau Linux n’a d’ailleurs pas hésité à traiter également le C++ de langage de merde. Dans un post publié sur son blog le 14 avril, l’équipe de développement de Google a annoncé qu’elle participe à l'évaluation du langage Rust pour le développement du noyau Linux. Suite à cette déclaration, Linus Torvalds a déclaré lors d’une interview que des discussions sur le sujet seraient beaucoup plus importantes qu'un long post de Google sur le langage. Interrogé sur la suggestion d'un internaute qui a indiqué que, « la solution ici est simple : il suffit d'utiliser C++ au lieu de Rust », Linus Torvalds n'a pas pu se retenir et aurait traité le C++ de « langage de merde ».
Rappelons pour les détracteurs du C++ que, le langage de programmation compilé permettant la programmation sous de multiples paradigmes (le C++), a dépassé Java le mois dernier dans l'indice mensuel TIOBE de popularité du langage, C++a été déclaré langage de l'année 2022 sur l'indice. Non seulement c’est la première fois dans l'histoire de l'indice TIOBE que le C++ dépasse Java, mais il est intéressant de noter au passage que des langages très souvent soutenus dans des forums comme Java ne figure pas dans le top 3 de l'indice mensuel TIOBE.
Si le trio de tête n'a pas changé depuis décembre, C++ a revêtu le maillot jaune en termes de popularité sur l'année écoulée : la popularité de C++ a augmenté de 4,62 points de pourcentage d'une année sur l'autre, suffisamment pour remporter le prix du langage de programmation TIOBE de l'année 2022. L'index TIOBE mesure la popularité des langages de programmation en se basant sur le nombre de pages web retournées par les principaux moteurs de recherche lorsqu'on leur soumet le nom du langage de programmation. Il est mis à jour une fois par mois et donne l'historique depuis 2002.
Le C++ est le langage de programmation de TIOBE de l'année 2022. Il a remporté ce titre parce que le C++ a gagné le plus de popularité (+4,62 %) en 2022. Les seconds sont C (+3,82 %) et Python (+2,78 %). « La raison de la popularité du C++ est son excellente performance tout en étant un langage orienté objet de haut niveau. De ce fait, il est possible de développer des systèmes logiciels rapides et vastes (plus de millions de lignes de code) en C++ sans nécessairement se retrouver dans un cauchemar de maintenance », l'organisation TIOBE.
La décaration de l'organisation TIOBE au sujet du C++ contraste avec ce que disent les détracteurs du C++.
Pour en avoir le cœur net, Matthew Glazar va :
- trouver un projet C++ open source ;
- isoler une partie du projet dans son propre mini-projet ;
- réécrire le code C++ ligne par ligne en Rust ;
- optimiser la compilation pour le projet C++ et le projet Rust ;
- comparer les temps de compilation+test entre les deux projets.
Voici, ci-dessous, ses hypothèses qui sont selon lui des suppositions éclairées, pas des conclusions :
- le portage Rust aura légèrement moins de lignes de code que la version C++ : la plupart des fonctions et méthodes doivent être déclarées deux fois en C++ (une dans l'en-tête et une dans le fichier d'implémentation). Ce n'est pas nécessaire dans Rust, ce qui réduit le nombre de lignes ;
- pour les constructions complètes, C++ prendra plus de temps à compiler que Rust : ceci est dû à la fonction #include de C++ et aux templates C++, qui doivent être compilés une fois par fichier .cpp. Cette compilation est effectuée en parallèle, mais le parallélisme est imparfait ;
- pour les constructions incrémentales, Rust prendra plus de temps à compiler que C++ : ceci est dû au fait que Rust compile un module à la fois, plutôt qu'un fichier à la fois comme en C++, donc Rust doit regarder plus de code après chaque petit changement.
Optimiser la compilation de Rust
Dans le passé, Matthew Glazar aurait réussi à améliorer les temps de construction du C++ en passant au linker Mold. Voyons cela avec son projet Rust :
Linux : les performances des éditeurs de liens sont à peu près les mêmes, c'est mieux plus bas
« Dommage ; l'amélioration, si elle existe, est à peine perceptible », conclu Matthew Glazar. C'était Linux. macOS a aussi des alternatives à l'éditeur de liens par défaut : lld et zld.
macOS : les performances des éditeurs de liens sont à peu près les mêmes
Sur macOS, Matthew Glazar ne voit également que peu ou pas d'amélioration en changeant l'éditeur de liens par défaut. « Je pense que les éditeurs de liens par défaut sur Linux et macOS font un travail suffisant pour mon petit projet. Les linkers optimisés (Mold, lld, zld) brillent pour les gros projets », dit-il.
Agencement des espaces de travail et des tests
Rust et Cargo ont une certaine flexibilité dans la façon de placer les fichiers sur le disque. Pour ce projet, il y a trois dispositions raisonnables :
Disposant d'un processeur à 32 threads sur sa machine Linux, et d'un processeur à 10 threads sur sa machine macOS, Matthew Glazar s'attend à ce que le déblocage de la parallélisation réduise les temps de construction. Pour un module donné, il y a aussi plusieurs endroits pour vos tests dans un projet Rust :
Optimisation de la compilation C++
Comme dans le cas de Rust, Matthew Glazar fait savoir qu’il a de l’expérience sur la compilation de C++. « Lorsque j'ai travaillé sur le projet C++ original, quick-lint-js, j'ai déjà optimisé les temps de compilation en utilisant des techniques courantes, comme l'utilisation de PCH, la désactivation des exceptions et de RTTI, la modification des tags de compilation, la suppression des #includeS inutiles, le transfert du code hors des en-têtes et l'externalisation des instanciations de template. »
Selon Glazar, GCC est clairement hors norme sur Linux. Clang s'en sort beaucoup mieux. « Mon Clang personnalisé (qui est construit avec PGO et BOLT, comme ma chaîne d'outils Rust personnalisée) améliore vraiment les temps de construction par rapport au Clang d'Ubuntu. libstdc++ se construit légèrement plus vite en moyenne que libc++ », écrit-il.
Utilisation de Clang personnalisée avec libstdc++ dans la comparaison C++ vs Rust.
C++
C++ est un langage de programmation compilé permettant la programmation sous de multiples paradigmes, dont la programmation procédurale, la programmation orientée objet et la programmation générique. Ses bonnes performances, et sa compatibilité avec le C en font un des langages de programmation les plus utilisés dans les applications où la performance est critique.
C'est un langage polyvalent, ce qui signifie qu'il peut être utilisé dans presque tous les cas. Cependant, en raison de ses règles syntaxiques complexes et de son utilisation globalement difficile, il est principalement dominant dans les applications qui nécessitent une grande vitesse, la simultanéité et un examen plus approfondi du fonctionnement du matériel.
C++ est le langage de programmation qui a permis de créer des systèmes d'exploitation comme Microsoft Windows. En outre, le C++ est utilisé pour produire la majorité des jeux vidéo sur le marché.
Rust
Avec Rust, il est possible de développer des pilotes de périphériques, des systèmes embarqués, des systèmes d'exploitation, des jeux, des applications web, et bien d'autres choses encore. Des centaines d'entreprises dans le monde entier utilisent Rust en production pour des solutions multiplateformes et économes en ressources. Des logiciels connus et appréciés, comme Firefox, Dropbox, et Cloudflare, utilisent ce langage. De la startup à la multinationale, du système embarqué au service web à haute disponibilité, Rust est une excellente solution.
« Mon meilleur compliment envers Rust est qu'il est ennuyeux, et c'est un fantastique compliment », déclare Chris Dickinson, Ingénieur chez npm Inc. Pour Antonio Verardi, Ingénieur infrastructure chez Yelp, les développeurs disposent de tous les outils pour réussir à écrire du code en Rust. La documentation, l’outillage et la communauté sont tous simplement fantastiques.
Temps de construction C++ vs Rust
C++ ou Rust ? Lequel des deux compile le plus rapidement ?
« J'ai porté le projet C++ vers Rust et optimisé les temps de compilation Rust autant que possible », indique Matthew Glazar.
A l’issue de son expérience, Matthew Glazar constate :
- Le portage Rust avait plus de lignes que la version C++, pas moins ;
- Pour les builds complets, comparés à Rust, les builds C++ ont pris à peu près le même temps (17k SLOC) ou ont pris moins de temps (100k+ SLOC), pas plus ;
- Pour les constructions incrémentales, par rapport à C++, les constructions Rust étaient parfois plus courtes et parfois plus longues (17k SLOC) ou beaucoup plus longues (100k+ SLOC), mais pas toujours plus longues.
Le SLOC (Source lines of code), également connu sous le nom de lignes de code (LOC), est une métrique logicielle utilisée pour mesurer la taille d'un programme informatique en comptant le nombre de lignes dans le texte du code source du programme. Le SLOC est généralement utilisé pour prévoir l'effort nécessaire au développement d'un programme, ainsi que pour estimer la productivité ou la maintenabilité du programme une fois le logiciel produit.
« Au cours du processus de portage, j'ai appris à aimer certains aspects de Rust. Par exemple, les proc macros me permettent de remplacer trois générateurs de code différents, ce qui simplifie le pipeline de compilation et facilite la vie des nouveaux contributeurs. Les fichiers d'en-tête ne me manquent pas du tout. Et j'apprécie les outils de Rust (en particulier Cargo, rustup et miri). »
Les temps de compilation sont-ils un problème avec Rust ? Oui selon Matthew Glazar. « Il existe quelques trucs et astuces pour accélérer les compilations, mais je n'ai pas trouvé les améliorations magiques de l'ordre de grandeur qui me rendraient heureux de développer en Rust », dit-il. Les temps de compilation sont-ils aussi mauvais avec Rust qu'avec C++ ? Oui selon Matthew Glazar. « Pour les projets plus importants, les temps de compilation du développement sont pires avec Rust qu'avec C++, du moins avec mon style de code », précise-t-il.
Au-delà de l’analyse de Matthew Glazar, beaucoup s’accordent à reconnaître que les deux langages de programmation ont leurs propres avantages et inconvénients. Par exemple, comme dit précédemment, le C++ bénéficie d'un énorme soutien de la part de la communauté et de nombreux cadres de travail pour le développement de logiciels, alors que Rust ne bénéficie pas d'un tel soutien par rapport au C++. D'un autre côté, il se dit que Rust est bien meilleur dans plusieurs aspects, comme la sécurité de la mémoire, la concurrence et il permet de réfléchir plus attentivement à l'utilisation de la mémoire et des pointeurs.
De nombreux utilisateurs Rust affirment que la programmation dans ce langage est plus facile grâce à une sémantique bien définie et à la prévention des comportements indésirables. En C++, les développeurs auraient plus de problèmes lorsqu'ils essaient d'éviter les comportements non définis. En outre, le C++ est un océan profond comparé à Rust, car le C++ possède tellement de fonctionnalités et de possibilités d'implémentation qu'il peut devenir difficile d'en garder la trace.
Au final, tout dépend si vous êtes à l'aise avec C++ ou Rust.
Source : A practical comparison of build by Matthew Glazar
Et vous ?
Voir aussi :
-
UtherExpert éminent séniorTout dépends tes critères. En ce qui concerne la sécurité, il est clairement derrière Rust, bien qu'il le supplante sur d'autres points.
Certes, à partir du moment où on utilise du unsafe on est plus 100% à l’abri des problèmes de sécurité mémoire, mais le principe du code unsafe et qu'il doit encapsuler les fonctionnalités potentiellement dangereuse dans un bloc qui doit avoir une interface sure.
La surface de code qui peut introduire des comportements indéterminés se retrouve considérablement réduite et donc bien plus facile à contrôler.
Il va falloir préciser de quoi tu parles en tant que API. Les bibliothèques externes sont une forme d'API.
Tous les langages contraignent plus ou moins le programmeur, ça n'en fait pas des DSL.
Un DSL est un langage dont le domaine d’application est limité comme la description de documents(HTML, LaTeX, ...) ou les requêtes de BDD (SQL, ...) ce qui n'est pas le cas de Rust qui peut produire des applications de n'importe quel type.le 11/01/2023 à 20:30 -
smartiesExpert confirméArticle intéressant mais je pense que RUST est un meilleur choix d'avenir :
- même si le temps de compilation est différent entre C++ et RUST, ça vaut le coût de produire du code sécurisé au détriment de la durée de compilation
- il manque encore de nombreuses bibliothèques en RUST mais on peut sans problème faire du web, du CLI, de la programmation système, ...
- la gestion des bibliothèques est plus simple en RUST, j'ai des mauvais souvenir de C++ ou j'avais des erreur pendant la compilation car le fichier xxxxx.h n'était pas trouvé et donc je devais aussi chercher le nom de la bibliothèque manquante en C++, j'ai aussi des mauvais souvenirs avec les versions de bibliothèque à résoudre.le 10/01/2023 à 10:04 -
fdecodeMembre habitué" 2°) Je trouve RUST super, mais il n'est pas comparable à C++, RUST c'est plus un DSL qu'un langage
" RUST se limite à certains nombres de designs pour des raisons de sécurité et de simplicité.
Je ne vois pas en quoi RUST est un DSL...
Avec, je fais de l'objet, je fais du fonctionnel, j'implémente en multithread, mais aussi en asynchrone (en utilisant tokio). C'est déjà très riche pour un langage "DSL"...
Mais le mécanisme des variables de type génériques, qui permet d'automatiser des implémentations conditionnelles, et le système de macro procédural sont aussi d'incroyables outils pour construire des librairies.
Enfin, les contraintes de la programmation safe peuvent se lever sans problème, si on choisit de travailler en mode unsafe. Il faut savoir ce qu'on fait, mais cela ne pose aucun problème.
En résumé, votre post est incompréhensible. J'ai l'impression que vous n'avez jamais fait de rust...le 10/01/2023 à 16:42 -
smartiesExpert confirméLe binding de bibliothèque est ce qui va être utilisé pendant un temps selon moi jusqu'à une implémentation RUST de celle-ci.le 10/01/2023 à 20:37
-
Anselme45Membre extrêmement actifMouais l'éternelle guerre de religion entre le pro et les contre de tel ou tel langage, de telle ou telle technologie...
De toute manière quel que soit l'avis de l'expert Duchmol, les avantages véritables de l'un ou l'autre langage, au final c'est le marché qui fait l'arbitre!
Si tu as besoin d'une équipe importante pour un projet, le choix du langage de programmation dépendra de la disponibilité des ressources sur le marché de l'emploi et pas des qualités propres d'un langage considéré comme supérieur à un autre...le 13/01/2023 à 10:58 -
destroyedloloMembre actifEssais de compiler de grosses applies comme Firefox et tu verras ta douleur. Évidemment, il est énorme, beaucoup de fichiers, mais quand certains fichiers compilent en plusieurs dizaines de secondes, multiplié par le nombre de fichiers, ça devient rédhibitoire.
Mais mon gros problème reste l'utilisation mémoire lors de la compile. Ceci dit, j'ai le meme problème avec des librairies C++ genre boost mais dans ce cas précis, c'est surtout que les dev ont de grosses bécanes et ne pensent plus aux configs plus restreintes ... comme les SBC.le 25/01/2023 à 9:54 -
boumchaletNouveau membre du Club1°) les modules C++ permettent des gains de x10 pour les compilations
=> mes tests/essaie ont confirmé ces gains, les temps de compilation ne sont plus un problème avec c++ 20
2°) Je trouve RUST super, mais il n'est pas comparable à C++, RUST c'est plus un DSL qu'un langage
RUST se limite à certains nombres de designs pour des raisons de sécurité et de simplicité.
mais ceci, provoquera un jour une impasse évolutive du langage comme pour java qui est actuellement dans l'impasse (cf nullpointer).
Le C++ n'a pas ce problème mais cela demande plus de compétencele 10/01/2023 à 10:36 -
boumchaletNouveau membre du ClubJe n ai pas dit que rust n est pas un langage complet, en plus j adore l utiliser.
Mais son mode de gestion du cycle de vie des objets est bien un dsl dans le sens il contraint le programmeur, il est à l opposé du modèle java qui aujourd’hui se révèle être une impasse évolutionelle
L avenir nous le dira pour rust. Dans tous cas , il répond très bien au besoin du momentle 10/01/2023 à 20:02 -
C++ est devenu tout à fait acceptable dans sa version 11 et a fortiori 17.
Et Rust n'est sécurisé que si tout le code est écrit dans ce langage. Dès lors qu'on utilise les types C et des bibliothèques écrites dans d'autres langages, il faut rajouter des clauses unsafe.
L'autre fois sur ce site, quelque'un me suggérait le plus sérieusement du monde de développer des API afin d'utiliser des bibliothèques externes tout en gardant le code Rust sécurisé. On va éviter ça je crois. Niveau sécurité, mieux vaut encore vivre avec des clauses unsafe quitte à réécrire une partie du code une fois qu'il existera une alternative Rust de la bibliothèque externe.le 10/01/2023 à 20:22 -
smartiesExpert confirméQuand on se pose les questions suivantes :
- combien de bug a eu le programme ?
- combien de temps passe-t-on a corriger un bug ?
- quelle est la gravité du bug ?
Quand j'avais travaillé chez un éditeur de gestion d'entrepôt, il y avait 3 personnes à la maintenance... combien ça coûte pour une entreprise à l'année (salaires, locaux, ...) ?
Sur ça, RUST permet de s'affranchir de beaucoup de maintenance (même s'il faut assurer un service minimum). Donc, le choix de RUST sur de nouveaux projets est très pertinent. On peut même être moins exigent sur la couverture du code par les TU avec ce langage.
En tant que développeur, faire de la maintenance n'est pas ce qui me passionne le plus (et je ne pense pas être le seul), je préfère largement réaliser de nouvelles fonctionnalités.le 13/01/2023 à 14:16