Aller au menu - Aller au contenu

Google présente Go

Revenir à la liste des news
Participer à la discussion

Image

Informations

Contributeur(s) : Tchouk!
Publié : le 15/11/2009 à 09:00:00
Catégorie : Programmation
Visualisations : 55 737

Licence : Creative Commons BY SA

Google présente Go

Si la puissance de calcul des ordinateurs a été constamment améliorée ces dernières années, les logiciels et les architectures se sont également complexifiés : les premiers interagissent souvent entre eux (parfois via un réseau), et requièrent de plus en plus d'autres logiciels pour fonctionner ; les secondes proposent désormais plusieurs unités traitantes, comme par exemple plusieurs processeurs, qui permettent théoriquement une augmentation des performances, mais se révèlent en pratique être un cauchemar pour le programmeur.

Certains ingénieurs de la société Google ont ainsi constaté que le développement logiciel est de plus en plus complexe à organiser, et qu'il prend de plus en plus de temps, tout en étant de moins en moins sûr. Ces ingénieurs ont alors émis l'idée que les outils utilisés jusqu'à présent n'étaient plus adaptés aux défis actuels. Go, le nouveau langage qu'ils ont conçu pour répondre aux défis récents, se veut simple, efficace tout en restant adapté au traitement de problèmes complexes. Ce projet de recherche, qui date de 2007, vient d'être révélé au grand jour mardi 10 novembre dernier.

Une perspective nouvelle


Un pari audacieux


Image utilisateur
Le but de Go est de mieux tirer parti des processeurs multi-cœurs, d'être plus fiable que ses prédécesseurs, et, surtout, d'être moins complexe, tant pour le programmeur que pour le compilateur. Tels sont les paris pris par Rob Pike, Robert Griesemer et Ken Thompson lorsqu'ils commencent à travailler en 2007 sur un nouveau langage, héritier du C, mais modernisé et adapté aux nouveaux enjeux du développement logiciel. Selon eux, un certain nombre de mauvaises habitudes ont été prises par les programmeurs, et les langages les plus utilisés (C, puis C++, Java ou C#) y sont pour quelque chose. Pire, les personnes qui cherchent à échapper à ces langages se mettent à utiliser des langages dynamiques comme PHP, JavaScript, Perl ou Python, qui, s'ils présentent de bonnes idées, sont en revanche conçus et implémentés de façon désastreuse.

Les trois ingénieurs décident alors de se pencher sur la création d'un langage aussi efficace que les langages compilés habituels, mais aussi agréable à utiliser qu'un langage dynamique comme Python. Ce nouveau langage doit être
  • aussi fiable que possible : à la compilation, le programme doit être garanti sans bugs liés aux types ou à une mauvaise gestion de la mémoire. C'est à dire que le programme compilé ne doit pas risquer de planter parce que le programmeur a accidentellement écrit une opération dénuée de sens, comme additionner un entier et une chaîne de caractères, ou tenter d'accéder à une position en mémoire qui n'existe pas. Ces bugs sont parmi les plus répandus, et doivent être découverts par le compilateur si le programmeur ne les aperçoit pas tout seul.
  • équipé d'un ramasse-miettes : en C, une mauvaise gestion de la mémoire peut provoquer des plantages ou une consommation inutile. Pour éviter ceci, elle devra donc être confiée à un ramasse-miettes, c'est à dire à un programme qui s'occupe des allocations à la place du programmeur (de façon transparente).
  • adapté à la gestion du parallélisme : on veut pouvoir écrire des programmes qui fonctionnent de façon efficace par dessus le réseau, ou en tirant parti de plusieurs processeurs en même temps. Cependant, cela requiert un certain nombre de précautions : que se passe-t-il si plusieurs sous-programmes tentent de modifier en même temps une même donnée ? Ce problème, très actuel, a entraîné la création de nouvelles technologies au cours des dernières années, sous forme de bibliothèques (par exemple Grand Central Dispatch) ou de langages spécialisés (Erlang).
  • performant : la rapidité d'exécution des programmes écrits avec ce langage doit être comparable à celle du C. Bien que cet objectif dépende davantage moins du langage lui-même que de son implémentation (c'est à dire son compilateur, etc.), certains choix doivent être faits pour l'atteindre. Notamment, le langage doit être statique, c'est à dire que les types des données manipulées doivent être connus à la compilation, et pas à l'exécution comme dans le cas de langages dynamiques.
  • simple, tant dans sa conception qu'à l'utilisation : les langages modernes sont de plus en plus complexes (car ils possèdent de plus en plus de caractéristiques), et manquent toutefois de fonctionnalités parfois jugées essentielles. Ils disposent alors de bibliothèques pour pallier ces manques, et ces dernières complexifient encore le rôle du développeur. Un langage moderne doit donc se débarasser de cette fâcheuse habitude. De plus, la syntaxe devra être simple, concise, mais lisible et régulière.
  • capable de compiler le plus rapidement possible.

Une équipe de choc


Image utilisateur
Glenda, la mascotte de Plan 9,
dessinée par la femme de Rob Pike.
Bien que de petite taille, l'équipe chargée de concevoir ce nouveau langage promet d'être efficace. Elle se compose en effet de gens ayant joué des rôles importants dans le développement de l'informatique. Thompson, tout d'abord, est l'un des créateurs du système Unix, ainsi que du langage B (ancêtre du C). Pike est également l'un des ingénieurs ayant conçu Unix au sein des laboratoires Bell, et a de plus travaillé sur Plan 9, un successeur expérimental d'Unix visant à corriger certains défauts du système. Avec Thompson, il a également conçu le système d'encodage UTF-8. Robert Griesemer, enfin, a travaillé pour Sun Microsystems sur Java HotSpot, un moyen d'optimiser efficacement le langage Java, ainsi que sur V8, le moteur JavaScript du navigateur Google Chrome (connu pour ses performances).

Durant l'année 2008, le langage Go est pratiquement conçu, et une première implémentation est mise en oeuvre. D'autres ingénieurs rejoignent le projet, et l'équipe se concentre alors sur l'optimisation du langage et de sa compilation. Deux compilateurs sont développés : 6g, nommé ainsi d'après la tradition des compilateurs du système Plan 9, ainsi que gccgo, basé sur le compilateur GCC. Les deux implémentations sont pour l'instant maintenues, la première en raison d'une plus grande rapidité, la seconde pour son efficacité accrue. Pour l'heure, il n'existe pas de compilateur tournant sous Windows : l'équipe déplore une trop faible quantité de programmeurs, mais espère que l'ouverture totale du langage et de ses implémentations (qui sont libres) attirera des contributeurs.

Le langage Go


Un descendant du C revu et amélioré.


À l'instar du C, Go est un langage impératif : un programme se compose comme une suite d'instructions qui ont un ordre. Go est clairement un héritier du C, dont il reprend une partie de la syntaxe. Cependant, celle-ci a été revue afin d'être à la fois plus claire et plus concise (moins de choses à écrire). Voici le code d'un programme helloworld.go retournant "Hello, world ; salut les Zéros" comme résultat :

Code : Python
1
2
3
4
5
6
7
package main 

import fmt "fmt"  // Contient des fonctions de formatage

func main() {
	fmt.Printf("Hello, world ; salut les Zéros\n");
}

Un certain nombre de différences sautent immédiatement aux yeux. Vous pouvez immédiatement voir que ce programme fait partie du paquet nommé "main", qu'il utilise le paquet "fmt" pour le formatage. Au sein de la fonction main (qui sera appelée au lancement du programme), vous retrouvez le printf du C, mais actualisé, puisqu'il fait partie du paquet "fmt". Les paquets servent à organiser les dépendances, en les rendant moins chaotiques qu'en C. Notez que les chaînes de caractères de Go sont prévues pour gérer l'encodage UTF-8.

Image utilisateur
Gordon, la mascotte de Go (même auteur)
Naturellement, il y a bien plus à dire sur la parenté entre Go et C. Parmi les points qui ont été revus au sein de Go, Rob Pike présente notamment dans sa conférence la déclaration de variables. En Go, on écrit par exemple var a, b *int plutôt que int *a,*b; pour déclarer des pointeurs vers des entiers. Cette nouvelle syntaxe est jugée plus intuitive. D'ailleurs, lors de l'utilisation de pointeurs, la mémoire sera allouée automatiquement par le ramasse-miettes - le programmeur n'a plus à s'en soucier.

D'autres ambiguités ont été levées : le piège des opérateurs ++ et -- a été levé, puisqu'ils sont désormais considérés comme des instructions et plus comme faisant partie d'une expression. Le but est d'enlever les erreurs et indéterminations en empêchant d'écrire des choses comme p[i] = q[++i]. Les pointeurs du C sont également présents, mais leur utilisation a été restreinte, puisque notamment l'arithmétique de pointeurs n'est plus possible : les créateurs du langage soutiennent que ce type d'opérations n'est plus nécessaire aujourd'hui, et qu'il complique l'utilisation du ramasse-miettes.

Le site du langage présente notamment une page dédiée aux différences avec le langage C++, dont certains points valent aussi pour le C.

Un système de types simple mais moderne.


Go veut privilégier la concision, en permettant au programmeur de ne rien écrire d'inutile. Dans la conférence de présentation du langage, Rob Pike donne notamment l'exemple suivant foo.Foo *myFoo = new foo.Foo(foo.FOO_INIT) de code que Go veut éviter. Ainsi, si un programmeur Go doit écrire var t0 *T = new(T); , ce qui est parfaitement valide mais inutilement redondant, il peut l'abréger en t1 := new(T); . L'opérateur := dénote une affectation initiale, comme on le ferait dans le langage Io. Cependant, ça n'est pas parce que le type de t1 n'est pas donné explicitement qu'il est inconnu à la compilation : le compilateur déduit automatiquement ce type via un mécanisme que l'on appelle "inférence de types", comme dans les langages Haskell ou OCaml.

Pour atteindre la concision et l'efficacité, Go présente un système de types proche de celui du langage Python, appelé "duck typing". Ce nom original représente un principe simple : si un objet a un bec de canard, et qu'il cancanne comme un canard, alors on peut l'utiliser comme un canard. Plus sérieusement, en Python, on ne se préoccupe pas du type exact des objets, mais des opérations supportées. Cela permet par exemple d'utiliser la même fonction len sur des listes ou des chaînes de caractères pour en mesurer la longueur. Cela permet aussi au programmeur d'implémenter l'opération correspondant à la fonction len sur ses propres objets pour que ceux-ci puissent également être utilisés avec la fonction.

Cependant, Python est flexible au détriment de la sécurité : si vous utilisez une fonction cancanner sur un objet qui ne cancanne pas, l'erreur ne sera détectée que pendant l'exécution de votre programme, et pas pendant la compilation. Cela pose problème car pour vérifier votre programme, vous devez alors le tester dans de multiples situations - ce qui ne garantit même pas son fonctionnement à 100 %. Go va donc plus loin, en proposant de vérifier à la compilation les opérations supportées par vos objets. Ceci est réalisé par un mécanisme d'interfaces, comme dans les langages Java ou Objective-C (où ils sont appelés "protocoles").
Par exemple, la fonction Printf sait afficher les objets répondant à l'interface Stringer, c'est à dire ceux équipés d'une méthode String. Voici un exemple de définition d'une interface, puis d'un nouveau type respectant cette interface :

Code : Python
1
2
3
4
5
6
7
8
9
type Stringer interface {
	String() string
}

type testType struct { a int; b string }

func (t *testType) String() string {    // Ceci est bien une méthode du type testType
	return fmt.Sprint(t.a) + " " + t.b   // Le + peut servir à concaténer des chaînes
}

Ici, testType est une structure comportant un entier a et une chaîne b, et on définit comment afficher les objets de type testType. Lorsque Printf voudra afficher un de ces objets, il appellera la méthode String et affichera le résultat. Cependant, notez bien que rien dans ce code ne laisse supposer la présence de classes comme dans la majorité des langages objets : les concepteurs de Go jugent en effet que ce concept n'est pas nécessaire à la programmation orientée objet, ou à la programmation tout court. Notamment, ils jugent l'introduction de hiérarchie entre les types (par exemple par héritage) comme étant artificielle et inadaptée. Le système d'interfaces permet quant à lui un polymorphisme jugé simple et naturel.

Enfin, les types de base proposés par Go sont grossièrement les mêmes types de base que ceux de Python : le programmeur aura rarement à se préoccuper de la différence entre int et long , ou float et double , mais pourra se contenter de distinguer int et float (entier ou décimal). De plus, des types plus ou moins élaborés comme les chaînes, les tableaux, mais aussi les "slices" (sous-tableaux utilisant des références) et les "maps" (tableaux associatifs) sont fournis par défaut. Enfin, les fonctions peuvent être très naturellement manipulées, notamment passées en argument à d'autres fonctions.

Les outils du parallélisme


Go est un langage dit "concurrent", c'est à dire conçu pour faire tourner plusieurs tâches plus ou moins indépentantes en même temps, et pour les faire communiquer de façon naturelle. Pour cela, Go implémente le paradigme CSP, conçu par Charles Hoare en 1978. Ce paradigme conçoit les processus comme tournant indépendamment les uns des autres, avec pour seul moyen de communication des messages qu'ils s'envoient les uns aux autres (à condition de connaître l'adresse du destinataire).

Cette façon de faire était déjà implémentée par certains langages, notamment Erlang, qui a connu un certain succès dans le domaine de l'écriture de serveurs (notamment ejabberd) supportant facilement des milliers de connexions simultanées, mais dont la puissance de calcul était en revanche très limitée. Go pourrait donc proposer une alternative plus adaptée aux calculs lourds dans ce domaine.

De même qu'en Erlang, les processus utilisés pour la programmation concurrente sont des "processus légers", dont l'exécution peut être lancée facilement de façon à ce que des milliers de processus s'exécutent simultanément. On les appelle "goroutines" en Go, afin de les distinguer d'éventuels processus systèmes, plus lourds et dédiés à une utilisaiton différente. Même si ce côté n'a pour l'instant été que peu évoqué pour Go, ils peuvent alors être répartis sur plusieurs cœurs, voire sur plusieurs ordinateurs, sans que cela perturbe le déroulement du programme.

Dans l'exemple suivant, la fonction processus va être lancée dans deux nouveaux processus, via l'instruction go :

Code : Python
1
2
3
4
5
6
7
8
func server(i int) {
    for {    // La boucle for seule équivaut au while du C
        print(i);
        sys.sleep(10)
    }
}
go server(1);
go server(2);

La communication entre processus se fait simplement à l'aide de l'opérateur <-. Des exemples peuvent être trouvés dans la documentation du langage.

Quel avenir pour le langage ?



Malgré des caractéristiques alléchantes, il est encore trop tôt pour dire si Go réussira à percer. Les langages qu'il veut détrôner semblent multiples (C++ ? Java ? Python ?) et sont tous bien plus matures que lui. D'ailleurs, Go n'est pour l'instant guère plus qu'un intéressant projet de langage, encore susceptible d'évoluer. De plus, des langages comparables existaient déjà ces dernières années. Par exemple, le langage D prétendait lui aussi être plus moderne que C++, et être capable de remplacer ce langage. Pour l'instant, rien de tel ne s'est produit. De même, OCaml, développé par l'INRIA, est fiable, performant, et en certains points comparables à Go - mais il n'a pas vraiment non plus connu de succès dans le milieu industriel.

Ainsi, le futur de Go est incertain. Même son nom est susceptible d'être modifié : il existe en effet déjà un langage concurrent nommé Go!, ce qui ressemble beaucoup trop au langage de Google pour son auteur. Cependant, pour certains, le milieu de la programmation a bien toléré pendant des années que des langages s'appellent C, C++ et C#...

Pour les passionnés, Go représente en tout cas au moins un jouet intéressant, et éventuellement un langage adapté pour l'apprentissage de la programmation concurrente. Google n'a pas annoncé pour l'instant de projet majeur écrit en Go, même si le serveur du site officiel du langage, Golang.org est écrit en Go. Il sera donc également intéressant de voir dans quelle mesure Go est adopté par ses propres géniteurs, et notamment d'étudier s'il remplace Python, très utilisé par Google en interne.

Quelques liens :

276 Participations

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  4  5  6  7  8  9  10  Suivante
Pseudo Discussion
1 visiteur sur cette news (0 membre et 1 Anonyme)
Page Précédente  1  2  3  4  5  6  7  8  9  10  Suivante
Hors ligne Takeo92 # Posté le 15/11/2009 à 15:24:15
GRENOBLE e BASTA !!
Avatar

Qui est le newseur "désastreux" qui accepte de telles news ?

On râle quand des gens présentent Windows 7, de manière un peu trop publicitaire, mais la subjectivité du type qui a écrit le passage sur le 'php, javascript, perl et python', faut arrêter les conneries.

Les news communautaires, ok, c'est une bonne idée, mais si vous prenez même pas la peine de relire correctement...
Et 3 personnes sur 40 commentaires qui le remarquent...

C'est sûr, vous faites des news qui servent pas à informer le lecteur vu qu'il l'a lit pas, mais bon comme c'est sur le SdZ ouai 'trop bonne news', 'ah encore google!!!', 'ah PREUMS!!'.

C'est de la news attrape couillons ça... et ça marche!
Hors ligne kidefaks # Posté le 15/11/2009 à 15:25:30

Need un tuto absolutely !!

Merci à ceux qui vont créer le tuto, j'en peut plus de la gestion des thread en c++, un véritable calvaire, il est temps que je change de language.
Aussinon, quid du futur language "C" ? le Cx01 je crois.
Hors ligne Zanpa # Posté le 15/11/2009 à 15:28:09
Avatar

Citation : Takeo92
On râle quand des gens présentent Windows 7, de manière un peu trop publicitaire, mais la subjectivité du type qui a écrit le passage sur le 'php, javascript, perl et python', faut arrêter les conneries.

C'est pas faux, c'est juste exagéré.
Hors ligne Ferterps # Posté le 15/11/2009 à 15:30:21
Avatar

Ville : Waldighoffen
Pays : France métropolitaine

Takeo92, ta réponse n'a pas lieu d'être, cette news n'était pas vraiment communautaire parce que son auteur n'a pas voulu là faire passer entre toutes les mains, qu'est ce qui n'est pas relu correctement ? et je ne comprend pas la fin de ton message, elle se contre-dit avec ce que tu disais au début, tu dis, on râle quand c'est trop publicitaire, mais qu'on ne fait pas des news qui servent à informer ? alors que justement elle informe ? Exprimes toi clairement on comprend rien.

:: Tutoriel de configuration d'awesome ::
Citation : Citation
90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne Tchouk! # Posté le 15/11/2009 à 15:35:52
Avatar
Flux RSS

Takeo92> Le passage que vous me reprochez ("implémentations désastreuses") est

a) proche des propos tenus par les auteurs de Go
b) parfaitement justifiable : le caractère dynamique de ces langages complique énormément les tâches d'optimisation
c) écrit par quelqu'un qui utilise des langages dynamiques (moi). Je veux dire, ça n'enlève pas la subjectivité de mes propos, mais je sais très bien que Python (par exemple) souffre de certains défauts qui ne pourront pas être corrigés à moins de revoir de façon conséquente un certain nombre de caractéristiques du langage.

Par conséquent, je ne pense pas qu'on puisse me taxer de faire la publicité de Go. Tout au plus ai-je été un peu enthousiaste, désolé si ça te choque.

Si un newser a envie d'éditer, il peut remplacer "sont en revanche conçus et implémentés de façon désastreuse." par "sont en revanche conçus et implémentés de façon désastreuse pour ce qui est des performances ou de la sûreté des programmes.".

C'est clair que ça valait le coup de s'énerver :) .

Image utilisateur
J'étais un homme moderne !
Je n'ai plus le mot de passe de ce compte. Si vous voulez me contacter pour une raison ou une autre, vous pouvez me joindre à l'adresse unpoulet@gmail.com pour encore quelques jours.
 
Hors ligne Takeo92 # Posté le 15/11/2009 à 15:37:00
GRENOBLE e BASTA !!
Avatar

Citation : Ferterps
Takeo92, ta réponse n'a pas lieu d'être, cette news n'était pas vraiment communautaire parce que son auteur n'a pas voulu là faire passer entre toutes les mains, qu'est ce qui n'est pas relu correctement ? et je ne comprend pas la fin de ton message, elle se contre-dit avec ce que tu disais au début, tu dis, on râle quand c'est trop publicitaire, mais qu'on ne fait pas des news qui servent à informer ? alors que justement elle informe ? Exprimes toi clairement on comprend rien.


Je te dit que si tu veux faire des news qui épatent les zéros, tu peux leur dire tout ce que tu veux : personne n'a lu la news, la preuve, y a 3 personnes qu'ont tiqué sur le passage honteux de la news.

Maintenant, si tu veux faire des news un peu intelligentes, t'évites les conneries subjectives.
Même si bien évidemment, comme c'est pas Windows, ici personne ne critiquera.
Hors ligne gnomnain # Posté le 15/11/2009 à 15:38:47
Avatar
Newsers

Excuse-moi, mais j'ai lu la news et ça ne m'a pas choqué : il est évident qu'un interpréteur pour un langage dynamique tournera moins vite qu'un programme écrit dans un langage statique et compilé. Il est possible d'optimiser ce genre de choses mais c'est compliqué, et la plupart des interpréteurs ne le font pas.
Tiens, un exemple : http://shootout.alioth.debian.org/gp4/ [...] ng2=icc&box=1

Image utilisateur
«Software and cathedrals are much the same - first we build them, then we pray»
Haskell - Learn You a Haskell - Real World Haskell - xmonad

Pourquoi on ne viendra pas vous plagier (ou "On veut les sources !")
Apprenez Haskell ! - #sdz
 
Hors ligne Tchouk! # Posté le 15/11/2009 à 15:39:22
Avatar
Flux RSS

Depuis quand énoncer des faits avérés est une preuve de subjectivité ?

Image utilisateur
J'étais un homme moderne !
Je n'ai plus le mot de passe de ce compte. Si vous voulez me contacter pour une raison ou une autre, vous pouvez me joindre à l'adresse unpoulet@gmail.com pour encore quelques jours.
 
Hors ligne Takeo92 # Posté le 15/11/2009 à 15:39:24
GRENOBLE e BASTA !!
Avatar

Citation
Takeo92> Le passage que vous me reprochez ("implémentations désastreuses") est

a) proche des propos tenus par les auteurs de Go
b) parfaitement justifiable : le caractère dynamique de ces langages complique énormément les tâches d'optimisation
c) écrit par quelqu'un qui utilise des langages dynamiques (moi).


Ah bon, et si un jour y a Joey Starr qui dit que tel_ministre est un enculé, tu mets toujours pas des guillemets dans ta news ?
Ce qui est avéré selon moi.

Si c'est des propos rapportés, tu cites...
Hors ligne dio3 # Posté le 15/11/2009 à 15:48:22
faux papy serial killer
Avatar

Ville : Cergy
Pays : France métropolitaine

merci pour la news ,tres intéressant

Image utilisateurImage utilisateur

venez battre ma brute http://zdio.labrute.fr/cellule :)
 
Hors ligne atlanthot # Posté le 15/11/2009 à 15:48:23
Avatar

De là à dire que c'est "implémenté de façon désastreuse" il y a quand même un cap à ne pas franchir.

Pour ma part j'utilise des langages hauts et bas niveau et j'ai déjà vu des programmes en PHP tourner plus vite que des programmes écrits en C.

On a vite tendance à oublier que la plupart du temps, la lenteur d'un programme est due au programmeur qui n'a pas suffisamment optimisé celui-ci.

Alors je veux bien qu'on dise qu'un langage à typage dynamique et/ou interprété soit plus lents que ses congénères plus bas niveaux ( c'est même une évidence qu'on ne devrait plus souligner ) seulement de là à dire que l'implémentation est désastreuse il y a des limites à la connerie.

Le PHP, tout comme le JS, le VBScript et autres Python répondent à un besoin, qui est de faire quelque chose qui tourne vite et relativement bien.

Quand au fait que les programmeurs prennent de mauvaises habitudes car ils utilisent des langages de haut niveau ....
C'est vraiment pathétique d'en arriver à ce genre de conclusion.

Le programmeur crado est un programmeur crado quelque soit le langage qu'il a appris. J'ai déjà vu des programmeurs en C qui ne savaient pas manipuler correctement des pointeurs et qui utilisaient des variables globales à tout bout de champs !!

Donc doucement sur les conclusions hâtives, on est sur un site web communautaire et on est pas la pour créer des tensions.
Hors ligne psimod # Posté le 15/11/2009 à 15:50:59
Avatar
Flux RSS

autant l'idée et la motivation sont bonnes, autant la mise en place du lanagage est vraiment a chier!
 
Hors ligne atlanthot # Posté le 15/11/2009 à 15:54:44
Avatar

ça me rappelle les débats sur pour ou contre le flash etc ...
Je me suis vite rendu compte que moins on en sait et plus on l'ouvre.

Pour ma part je dis juste que Mr Rasmus Ledorf ne mérite pas que l'on dise de son travail qu'il est "désastreux d'un point de vue performances" ( surtout que le bougre est plutôt pour l'économie de ressources & farouchement anti-framework )
Hors ligne robocop # Posté le 15/11/2009 à 15:54:44
Avatar

Citation : atlanthot
De là à dire que c'est "implémenté de façon désastreuse" il y a quand même un cap à ne pas franchir.

Pour ma part j'utilise des langages hauts et bas niveau et j'ai déjà vu des programmes en PHP tourner plus vite que des programmes écrits en C.

On a vite tendance à oublier que la plupart du temps, la lenteur d'un programme est due au programmeur qui n'a pas suffisamment optimisé celui-ci.

Alors je veux bien qu'on dise qu'un langage à typage dynamique et/ou interprété soit plus lents que ses congénères plus bas niveaux ( c'est même une évidence qu'on ne devrait plus souligner ) seulement de là à dire que l'implémentation est désastreuse il y a des limites à la connerie.

Le PHP, tout comme le JS, le VBScript et autres Python répondent à un besoin, qui est de faire quelque chose qui tourne vite et relativement bien.

Quand au fait que les programmeurs prennent de mauvaises habitudes car ils utilisent des langages de haut niveau ....
C'est vraiment pathétique d'en arriver à ce genre de conclusion.

Le programmeur crado est un programmeur crado quelque soit le langage qu'il a appris. J'ai déjà vu des programmeurs en C qui ne savaient pas manipuler correctement des pointeurs et qui utilisaient des variables globales à tout bout de champs !!

Donc doucement sur les conclusions hâtives, on est sur un site web communautaire et on est pas la pour créer des tensions.

Il faut comparer ce qui est comparable : si tu compares le C et le php en terme de vitesse, il faut faire deux programmes qui ont la même complexité, qui utilisent le même algorithme.
Je doute que le php, soit, dans ces conditions, même une fois, plus rapide que le C.
Le C est compilé, alors que le php est reparsé/évalué à la volée. Il ne bénifie pas de toutes les optimisations du C (de mémoire, il ne gère même pas la tail-rec par exemple), et le C est bien plus bas niveau.

Bref, [référence nécessaire] !
 
Hors ligne atlanthot # Posté le 15/11/2009 à 15:58:42
Avatar

C'est bien le problème de cette news robocop... comparer ce qui est comparable...

Je ne compare en aucun cas le PHP et le C, je dis juste que si on veut vraiment économiser des ressources on peut critiquer la lenteur du langage utilisé c'est un fait.

Seulement avant de dire que le langage est trop lent on ferait mieux de vérifier l'implémentation de nos codes.

Comme tu le dis si bien il faut comparer ce qui est comparable et pour moi dire que les langages interprétés qui sont là pour produire quelque chose très rapidement et très facilement sont désastreux c'est quand même pousser le vice trop loin
Hors ligne cgizmo # Posté le 15/11/2009 à 16:01:01
Avatar

Citation : atlanthot
Pour ma part j'utilise des langages hauts et bas niveau et j'ai déjà vu des programmes en PHP tourner plus vite que des programmes écrits en C.

On a vite tendance à oublier que la plupart du temps, la lenteur d'un programme est due au programmeur qui n'a pas suffisamment optimisé celui-ci.
L'argument ne tiens pas, atlanthot. Il y a surement de très bon codeurs PHP, et de très mauvais codeurs C, mais ca ne change pas les faits : le C est un langage compilé et le PHP un langage interprété et typé dynamiquement. Pour le même algorithme, implémenté de la même facon, le C ira plus vite que le PHP.
Citation : atlanthot
Alors je veux bien qu'on dise qu'un langage à typage dynamique et/ou interprété soit plus lents que ses congénères plus bas niveaux ( c'est même une évidence qu'on ne devrait plus souligner ) seulement de là à dire que l'implémentation est désastreuse il y a des limites à la connerie.
Désastreuse dans la mesure ou un langage compilé (de même niveau) peut atteindre des performances plus que nettement supérieux à un langage typé dynamiquement et interprété.Citation : atlanthot

Quand au fait que les programmeurs prennent de mauvaises habitudes car ils utilisent des langages de haut niveau ....
C'est vraiment pathétique d'en arriver à ce genre de conclusion.
Tu as mal lu, ce que tu dis est completement à coté de la plaque.
Hors ligne atlanthot # Posté le 15/11/2009 à 16:05:46
Avatar

Selon eux, un certain nombre de mauvaises habitudes ont été prises par les programmeurs, et les langages les plus utilisés (C, puis C++, Java ou C#) y sont pour quelque chose.

Si ça ca veut pas dire ce que j'ai dit ni toi ni moi ne comprenons la langue française.


Désastreuse dans la mesure ou un langage compilé peut atteindre des performances plus que nettement supérieux à un langage typé dynamiquement et interprété.

Je suis d'accord, seulement il faut bien le dire quand on code dans un langage interprété ça va souvent plus vite et c'est souvent plus simple. Ce n'est pas désastreux, ça réponds à un besoin nuance. Honnêtement depuis que PHP est populaire, tu as encore vu un seul site codé en C ?

Ce n'est pas désastreux ça réponds à un besoin.

Dans ce cas je peux dire que le C est désastreux car je peux faire la même chose en assembleur ca ira toujours plus vite.
Hors ligne atlanthot # Posté le 15/11/2009 à 16:07:27
Avatar

Moi je pense qu'il faut faire preuve d'un peu plus de tolérance et nuancer ses propos.

Ce n'est pas parceque Google dit que les langages interprétés c'est désastreux qu'il faut dire amen.

C'est aussi con et stérile que le débat Linux trop classe & Libre , Windows pourri & propriétaire
Hors ligne abdelhaq007 # Posté le 15/11/2009 à 16:09:59
Avatar
Flux RSS

je vais l'essayer...et je verrai


Image utilisateur
 
Hors ligne gnomnain # Posté le 15/11/2009 à 16:11:04
Avatar
Newsers

Citation : atlanthot
Je suis d'accord, seulement il faut bien le dire quand on code dans un langage interprété ça va souvent plus vite et c'est souvent plus simple. Ce n'est pas désastreux, ça réponds à un besoin nuance. Honnêtement depuis que PHP est populaire, tu as encore vu un seul site codé en C ?

Je suis d'accord, coder un site web en C c'est pas forcément pertinent, et les gens aiment les langages dynamiques comme python et php pour leur simplicité d'utilisation. Et si j'ai bien compris, le principe de Go est de créer un langage statique, quasiment aussi simple à utiliser que python (grace à l'inférence de types, au garbage collector, ...), mais avec des performances proches du C.

Image utilisateur
«Software and cathedrals are much the same - first we build them, then we pray»
Haskell - Learn You a Haskell - Real World Haskell - xmonad

Pourquoi on ne viendra pas vous plagier (ou "On veut les sources !")
Apprenez Haskell ! - #sdz
 
Hors ligne robocop # Posté le 15/11/2009 à 16:12:47
Avatar

Citation : atlanthot
C'est bien le problème de cette news robocop... comparer ce qui est comparable...

Je ne compare en aucun cas le PHP et le C, je dis juste que si on veut vraiment économiser des ressources on peut critiquer la lenteur du langage utilisé c'est un fait.

Seulement avant de dire que le langage est trop lent on ferait mieux de vérifier l'implémentation de nos codes.

Comme tu le dis si bien il faut comparer ce qui est comparable et pour moi dire que les langages interprétés qui sont là pour produire quelque chose très rapidement et très facilement sont désastreux c'est quand même pousser le vice trop loin

En fait, ce que Tchouk! critique, c'est le choix qu'ont fait les developpeurs avec le typage dynamique. Et je suis d'accord avec lui : avec ce système, pour vérifier qu'un programme n'a pas d'erreurs de types, il faut le tester de A à Z, alors que le compilateur pourrait détecter les erreurs à la compilation, comme le faire ocaml par exemple.
 
Hors ligne cgizmo # Posté le 15/11/2009 à 16:13:30
Avatar

Citation : Tchouk!
Selon eux, un certain nombre de mauvaises habitudes ont été prises par les programmeurs, et les langages les plus utilisés (C, puis C++, Java ou C#) y sont pour quelque chose. Pire, les personnes qui cherchent à échapper à ces langages se mettent à utiliser des langages dynamiques comme PHP, JavaScript, Perl ou Python, qui, s'ils présentent de bonnes idées, sont en revanche conçus et implémentés de façon désastreuse.
Tu vois où dans ce texte que les programmeurs prennent de mauvaises habitudes en utilisant des langages de haut-niveau ?

Citation : atlanthot
Je suis d'accord, seulement il faut bien le dire quand on code dans un langage interprété ça va souvent plus vite et c'est souvent plus simple. Ce n'est pas désastreux, ça réponds à un besoin nuance. Honnêtement depuis que PHP est populaire, tu as encore vu un seul site codé en C ?
Pourquoi comparer le C et le PHP ? Et pourquoi partir sur le web ? Le PHP a été pensé pour le web, le C... non. Pourquoi soulever cette argument ?
Pour répondre à la premiere partie de ta phrase, on peux comparer le OCaml et le Python, par exemple, qui sont tout les deux grosso modo du même niveau. Je te laisses trouver des comparaisons de perfs.

Citation : atlanthot
Dans ce cas je peux dire que le C est désastreux car je peux faire la même chose en assembleur ca ira toujours plus vite.
Oui, tu pourrais dire ca, mais il faudrait que tu le prouves. Prouve moi que tu optimises mieux que GCC en O2, par exemple.
Hors ligne atlanthot # Posté le 15/11/2009 à 16:14:14
Avatar

Ben pour détecter ça il y a les assertions en PHP ( bon je sais c'est loin d'être aussi sympa et je suis le premier à aimer les langags typés mais on fait avec ce qu'on a ).
Hors ligne atlanthot # Posté le 15/11/2009 à 16:22:28
Avatar

cgizmo je pense honnêtement que je vais arrêter de discuter avec toi.
Pour moi tu vas trop dans la confrontation personnelle ( "Il faudrait que tu le prouves" ...

"Tu vois où dans ce texte que les programmeurs prennent de mauvaises habitudes en utilisant des langages de haut-niveau ?" ... faut pas se contenter de lire, il faut aussi comprendre ce qu'on lit.
Hors ligne cartmandu77 # Posté le 15/11/2009 à 16:24:50
Pourquoi vouloir aller vite ?
Avatar

Citation : nico11400
Google propose de plus en plus de chose (Attention, il pourrait de venir le nouveau Microsoft ! :euh: ).

Sinon, bonne news !


+1

Bonne news'

Maya Learning ~> PasBeaucoup / 100
^_^
"Partages ce que tu sais, apprends le reste..." - SdZ
irc://irc.epiknet.org/3D le salon des 3déiste du SdZ !
 
Hors ligne mussimuss # Posté le 15/11/2009 à 16:41:41
Like a Shadow...
Avatar

Hum...à quand un tuto sur le site du zér0 ? Vous pensez qu'il remplacera le C++ dans les jeux par exemple ?

carpediem! :soleil:
 
Hors ligne atlanthot # Posté le 15/11/2009 à 16:43:16
Avatar

Honnêtement si ce langage tient toutes ses promesses, ça peut être super intéressant. :D
Hors ligne Cassoulet # Posté le 15/11/2009 à 16:46:37
Je suis sur Windows et ça rox
Avatar


Une discussion assez comique. :)

Le Show : jeu en 2D dédié à un grand artiste ! (C++, SFML)
|||||||||| 100% C++
|||||||||| 90% SFML
|||||||||| 37% JAVA
 
Hors ligne ChristopheG # Posté le 15/11/2009 à 17:04:39

Citation : Cassoulet
Le problème de ce benchmark est qu'il compare gcc avec le mini compilateur de go, tailé pour etre rapide à compiler. Ce serait plus pertinent de comparer avec le backend gcc, meme s'il n'est pas encore complet

--[ ChristopheG ]--
 
Hors ligne distopia # Posté le 15/11/2009 à 17:06:06
4-3 Komoku
Avatar

<troll>

Citation : cgizmo
Citation : atlanthot
Dans ce cas je peux dire que le C est désastreux car je peux faire la même chose en assembleur ca ira toujours plus vite.

Oui, tu pourrais dire ca, mais il faudrait que tu le prouves. Prouve moi que tu optimises mieux que GCC en O2, par exemple.

En ASM je peut faire un Code : Console
Hello world !
de 170 octets.

Si tu arrive à faire mieux avec GCC... :waw:

J'anticipe sur l'argument du "ouais, mais un plus gros programme c'est pas sûr que tu fasses mieux que GCC" : si si, je suis sensé pouvoir faire mieux mais je mettrais beaucoup beaucoup... plus de temps.
</troll>

Non non non, je ne suis pas un Otaku.
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news