Le langage Go se mesure à C++, Java et Scala
Une nouvelle étude comparative des performances, menée par un ingénieur de Google

Le , par Idelways

21PARTAGES

5  0 
L'ingénieur de Google Robert Hundt vient de publier un rapport comparatif entre Java, Scala, C++ et Go, le langage de programmation maison de Google.
Ce rapport se base sur l'analyse de différents facteurs suite à l'implémentation compacte du même algorithme dans les quatre langages.

Sans surprise, le langage C++ est le plus économe en mémoire vive et celui qui offre la Runtime la plus rapide.
Le résultat de ce benchmark dévoile en revanche que c'est le langage qui nécessite le plus « d'effort d'optimisation », des manipulations parmi lesquelles certaines sont « à un niveau de sophistication hors de la portée du développeur moyen », affirme Robert Hundt.

La mise en oeuvre du code de l'implémentation Java de l'algorithme a été la plus facile d'après le rapport. L'analyse des performances du langage est en revanche la plus complexe, notamment autour des effets du ramasse-miette (Garbage Collector), très difficile à optimiser.

Le langage Scala, qui tourne sur la JVM, et compile tout comme Java en byte-code, partage la même complexité d'analyse et d'optimisation des performances, mais sa notation concise et les puissantes fonctionnalités du langage offrent la meilleure optimisation de la complexité du code.

Quant à Go, Robert Hundt estime qu'il offre des fonctionnalités de langage intéressantes qui rendent possible l'écriture d'expressions concises et standardisées.
Le rapport rappelle que les compilateurs pour ce langage « restent immatures, ce qui se traduit à la fois sur les performances et la taille de l'exécutable »

Sur ce dernier point, les résultats de l'implémentation sont à la traine pour Go qui produit un exécutable de 1.2 Mo contre 13 Ko pour Java et 41 Ko pour C++.
C++ et Go compilent en code-machine, contrairement à Java et Scala. À ce propos, Go compile nettement plus vite que ses trois rivaux.

Le langage Go a été conçu depuis sa création il y a un an et demi comme un langage de programmation concurrentielle tout en conservant les performances d'un langage de bas niveau comme C++ et étant proche en apparence des langages dynamiques type Python.

Cette étude comparative de Google s'est déroulée en deux phases afin d'offrir l’équivalence la plus objective qui soit.
La première phase n'a utilisé que les fonctionnalités idiomatiques des langages (classes, boucles, schéma d'allocation de la mémoire...), sans utiliser des outils spécifiques destinés à maximiser les performances.

Après la publication des résultats de cette phase, divers ingénieurs de Google se sont attelés à optimiser par tous les moyens disponibles l'implémentation de chaque langage.

La comparaison des résultats des deux phases est d'après l'étude « révélatrice de la difficulté typique d'optimisation dans les langages respectifs ».

Le rapport est consultable via ce lien (PDF, 330 Ko, 10 pages)

Et vous ?

Que pensez-vous des résultats de cette étude ?
Et du langage Go et ses perspectives d'avenir ?

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

Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 06/06/2011 à 12:51
Intéressant... surtout de la part de Google, d'où émerge Go, donc où on devrait trouver des gens qui ont travaillé dessus, le connaissant bien, y compris les compilateurs.
0  0 
Avatar de kolodz
Modérateur https://www.developpez.com
Le 06/06/2011 à 13:21
Citation Envoyé par Idelways  Voir le message
[B]...
Sur ce dernier point, les résultats de l'implémentation sont à la traine pour Go qui produit un exécutable de 1.2 Mo contre 13 Ko pour Java et 41 Ko pour C++.
C++ et Go compilent en code-machine, contrairement à Java et Scala. À ce propos, Go compile nettement plus vite que ses trois rivaux.

...

Il est probable que les différences diminuent que ce soit au niveau de la taille de l'exécutable (qui va diminuer) qu'au niveau du temps de compilation (qui va augmenter).
L'optimisation a un coût.

Que pensez-vous des résultats de cette étude ?

c'est une analyse utile qui apporte des chiffres. Mais les résultats étaient prévisibles ou connus avant.

Et du langage Go et ses perspectives d'avenir ?

J'avoue ne pas connaître la syntaxe, ni les libraires disponibles dans ce langage. Il est peut-être trop tôt pour savoir si ce langage a un avenir.

K
0  0 
Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 06/06/2011 à 13:38
Citation Envoyé par kolodz
Il est probable que les différences diminuent que ce soit au niveau de la taille de l'exécutable (qui va diminuer) qu'au niveau du temps de compilation (qui va augmenter).
L'optimisation a un coût.
Oui et non, la taille des binaires de base de Go est lié au fait que c'est un langage hautement réflectif et à garbage collector sans VM contrairement à C++ ou à Java. Ces fonctionnalités doivent donc être directement ajoutées au binaire, et ça gonfle la taille de "base" de l'executable.

Ceci dit, pour des programmes de grosse taille, il y a fort à parier que l'écart se réduise fortement.
0  0 
Avatar de Ryu2000
Membre extrêmement actif https://www.developpez.com
Le 06/06/2011 à 13:44
Que pensez-vous des résultats de cette étude ?
Que pour l'instant ce langage ne présente que peu d’intérêt.

Et du langage Go et ses perspectives d'avenir ?
Je me demande quel-est l'objectif à long terme.
Ce ne serait jamais aussi performant que le C++.
Ni aussi facile à programmer que du JAVA.
Ils veulent juste rendre possible l'écriture d'expressions concises et standardisées et accélérer le temps de compilation ?
0  0 
Avatar de gorgonite
Rédacteur/Modérateur https://www.developpez.com
Le 06/06/2011 à 13:49
Citation Envoyé par Idelways Voir le message
Quant à Go, Robert Hundt estime qu'il offre des fonctionnalités de langage intéressantes qui rendent possible l'écriture d'expressions concises et standardisées.
Le rapport rappel que les compilateurs pour ce langage « restent immatures, ce qui se traduit à la fois sur les performances et la taille de l'exécutable »

Sur ce dernier point, les résultats de l'implémentation sont à la traine pour Go qui produit un exécutable de 1.2 Mo contre 13 Ko pour Java et 41 Ko pour C++.
C++ et Go compilent en code-machine, contrairement à Java et Scala. À ce propos, Go compile nettement plus vite que ses trois rivaux.

Le langage Go a été conçu depuis sa création il y a un an et demi comme un langage de programmation concurrentielle tout en conservant les performances d'un langage de bas niveau comme C++ et étant proche en apparence des langages dynamiques type Python.

A la vue de tels résultats, on ne peut que se demander ce qui a réellement poussé Google à sortir son langage Go... il compile vite, mais mal aussi bien en pour optimiser la taille que la vitesse. Il n'est pas si innovant : la plupart de ces concepts sont déjà présents dans d'autres langages de programmation, et il existe pas mal d'études sur leurs optimisations.

Il est probable que tous ces défauts seront vite corrigés, d'autant plus que le fait que Go ne soit pas si innovant implique que de nombreux back-ends de compilation existants et performants pourront être adaptés... la seule question étant : pourquoi ne pas l'avoir déjà fait ? la version actuelle de Go ne serait-elle qu'un PoC ?
0  1 
Avatar de kimelto
Futur Membre du Club https://www.developpez.com
Le 06/06/2011 à 14:04
Citation Envoyé par gorgonite Voir le message
A la vue de tels résultats, on ne peut que se demander ce qui a réellement poussé Google à sortir son langage Go... il compile vite, mais mal aussi bien en pour optimiser la taille que la vitesse. Il n'est pas si innovant : la plupart de ces concepts sont déjà présents dans d'autres langages de programmation, et il existe pas mal d'études sur leurs optimisations.
Pour la qualite du code genere, l'implementation officielle produit du code simple sans optimisations avancees. L'idee est d'avoir quelquechose qui marche d'abord. Pour la taille des binaires c'est tout simplement lie au fait que les createurs du language sont contre les "shared object" et que donc chaque binaire inclu la runtime et bibliotheque standard.
Ces deux problemes sont regles par le second compilateur Go: gccgo, qui est plus lent pour compiler, mais qui produit du code plus optimise et gere les .so

Citation Envoyé par gorgonite Voir le message
la version actuelle de Go ne serait-elle qu'un PoC ?
Oui et non La version actuelle de Go est plus qu'un PoC mais il a ete decide d'implementer certaines fonctionalite rapidement pour avoir un language fonctionnel et developper l'ecosysteme. On pensera plus particulierement au garbage collector qui est tres simple (et il marche!) mais peut etre reimplemente pour diminuer les pauses liee a un cycle de collection.
1  0 
Avatar de elmcherqui
Membre averti https://www.developpez.com
Le 06/06/2011 à 14:14
a mon avis Go sera un flop , si les developpeurs veulent un control totale sur la machine et de la puissance il 'y a C/ASM ou C++/ASM si il veulent de la portabilite il y'a JAVA (Mono ayant des problemes ces temps si je me tairais a propos de C# ) , si il veulent une productivite enorme il y'a JAVA ou C# . car énormément de bibliothèques sont mature pour tous ces language et ont fait leur preuves le plus jeune language etant C# et a 13ans ( le developpement de .NET a ete annonce en 1998 ) contre 39 pour le C qui est sorti en 1972 . donc Go aussi rapide soit t'il il faut les outils qui vont avec en plus de sa ce n'est pas du jour au lendemain qu'on va laisser tomber C++ / JAVA qui ont des racines bien enraciné et tous une histoire et des habitudes .
1  2 
Avatar de Ryu2000
Membre extrêmement actif https://www.developpez.com
Le 06/06/2011 à 14:36
Effectivement je vois mal le C ou le C++ disparaître un jour.
Mais bon ça finira probablement par arriver, même avec les mises à jour de ces langages.

Par contre il ne faut pas ne pas essayer de créer de nouveaux langages.
Si l'équipe qui à créer le Java s'était dit "il y a déjà le C un nouveau langage n'a pas sa place" on aurait loupé quelque chose.

Peut être que dans 37 ans Go ce sera la langage le plus performant, léger, optimiser, portable.
4  0 
Avatar de gblll
Nouveau Candidat au Club https://www.developpez.com
Le 06/06/2011 à 16:41
Techniquement je ne voit pas l’intérêt de ce langage, Go (home)...
0  2 
Avatar de TropMDR
Membre éprouvé https://www.developpez.com
Le 06/06/2011 à 17:14
Citation Envoyé par gorgonite Voir le message
Il est probable que tous ces défauts seront vite corrigés, d'autant plus que le fait que Go ne soit pas si innovant implique que de nombreux back-ends de compilation existants et performants pourront être adaptés... la seule question étant : pourquoi ne pas l'avoir déjà fait ? la version actuelle de Go ne serait-elle qu'un PoC ?
J'avoue m'être posé la même question il y a quelques mois quand je m'étais penché sur ce langage. Le but est donc théoriquement d'écrire facilement du code parallèle (multi-coeur ou réparti). Et dans le domaine, comparé à du Scala ou du JoCaml, c'est le niveau zéro de l'idée qu'aurait eu un stagiaire à la pose déjeuner qu'il aurait griffoné sur une serviette en papier.

Ensuite c'est un compilo théoriquement "from scratch", et ils ont écrit ça... en C. Dans la catégorie "j'aime me faire mal, parce que c'est ça qui est bon", ça se pose là quand même. J'ai d'ailleurs tenté de lire le code de l'allocateur de registre, c'est bourré de goto. Un vrai !@# de bonheur.

Bref, c'est un langage sans intéret, qui "compile vite" mais produit un code merdique, et qui en plus semble avoir fait tous les choix possible et imaginable pour avoir le processus de développement le plus lent possible. Ca n'ira nul part.
4  0 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web