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 739

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  ...  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  ...  6  7  8  9  10  Suivante
Hors ligne gnomnain # Posté le 21/11/2009 à 19:47:11
Avatar
Newsers

Citation : Nightwar0
Oui c'est vrai que cela peut se ramener a "est-ce que l'abstraction c'est mal"
Tu as donné un exemple sur le SQL trés bien qui permet de comparé ce que je dis.
Selon moi et ce que je dis depuis le debut le niveau d'abstraction de Go (meme si je ne le connais pas parfaitement est déja trop élevé".

Je suis content qu'on soit d'accord sur un point, mais ce serait pas mal d'argumenter un peu ton avis sur Go, sinon on va pas aller bien loin comme ça :-°

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 Schtroumpfette # Posté le 21/11/2009 à 20:57:26
Avatar

Citation : Nightwar0
Je te retourne cette phrase :)
Et contrairement à ce que tu dis je ne suis pas fermé et j'utilise dans ma vie courante pas moin de 10 langages (dont 3 tous les jours)

Et puis se "foutre de la poire des autres ouvertement" et un mauvais signe de faiblesse intellectuelle. Tu devrais travailler dessus. Certain psychologue font des merveilles avec des personnes de ce genre pour les aider dans leur vie sociale.


Faiblesse intellectuelle ? Eh ben, il faudra que tu me dise comment tu peux te permettre de me dire ça. Tu ne me connais pas, tu ne sais pas qui je suis et comment je suis dans la vie réelle. L'avantage du virtuel c'est qu'on peut se permettre des écarts, quite à passer pour un connard (c'est le bon mot je pense).
Ensuite, tu n'as pas à me dire ce que je dois faire de ma vie. Les psy, j'en ai jamais été voir un seul... et crois moi, j'en ai pas besoin, ma vie sociale est prospère.

PS: ça m'étonne que tu utilise autant de langages et que tu crache sur Go...

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne LoupSolitaire # Posté le 21/11/2009 à 23:30:33
Connard patenté
Avatar
Flux RSS

études : Université de Rennes 1

Citation : Nightwar0
Selon moi et ce que je dis depuis le debut le niveau d'abstraction de Go (meme si je ne le connais pas parfaitement est déja trop élevé".

Ok, génial, mais si tu es quelqu'un de talentueux qui connais 10 langages, tu pourrais partager ton savoir, et nous expliquer les tenants et les aboutissants de ta réflexion, puisque c'est précisément ce qu'on attends.
Hors ligne Schtroumpfette # Posté le 21/11/2009 à 23:55:15
Avatar

+1

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne Nightwar0 # Posté le 22/11/2009 à 13:18:10

J'ai déjà expliquer certain points qui me géner dans Go dans mes posts précédents (oui ceux ou l'on m'a ouvertement insulté)

Citation
Faiblesse intellectuelle ? Eh ben, il faudra que tu me dise comment tu peux te permettre de me dire ça. Tu ne me connais pas, tu ne sais pas qui je suis et comment je suis dans la vie réelle. L'avantage du virtuel c'est qu'on peut se permettre des écarts, quite à passer pour un connard (c'est le bon mot je pense).
Ensuite, tu n'as pas à me dire ce que je dois faire de ma vie. Les psy, j'en ai jamais été voir un seul... et crois moi, j'en ai pas besoin, ma vie sociale est prospère.


Aberrant !!! rend toi compte de ce que tu dis. C'est vrai que je ne te connais pas et justement les seules paroles que tu peux avoir sont celles de tes posts. Ce sont elles qui donnent la première image de toi. Si tu t'autorise des ecarts de ce genre c'est que dans ta vie tu n'a aucun moyen d'évacuer tes malaises. Fais du sport !
Les forums sont un espace communautaire ou toutes les personnes se doivent le respect. Sa ressemble un peu a une communauté (dans la vie réélle). Ne t'autorise pas ce genre d'ecart pour paraitre supérieur ou intéréssent, c'est bléssant et sa donne une mauvaise image de toi.

Citation
PS: ça m'étonne que tu utilise autant de langages et que tu crache sur Go...

Et pourtant,
C/C++/JAVA tous les jours sur de multiples projets.
prolog scheme actionScript python ASM Objective-C C# dans des projets annexes

Je ne crache pas sur Go. Il me rebute par son introduction, et ses éditeurs.

Citation
Ok, génial, mais si tu es quelqu'un de talentueux qui connais 10 langages, tu pourrais partager ton savoir, et nous expliquer les tenants et les aboutissants de ta réflexion, puisque c'est précisément ce qu'on attends.


Connaitre 10 langage na rien de talentueux je ne vois pas pourquoi tu dis cela. J'ai dit sa uniquement pour recadrer le fait que je soit un programmeur fermé.

Voila
Hors ligne Schtroumpfette # Posté le 22/11/2009 à 13:25:05
Avatar

Citation : Nightwar0
Aberrant !!! rend toi compte de ce que tu dis. C'est vrai que je ne te connais pas et justement les seules paroles que tu peux avoir sont celles de tes posts. Ce sont elles qui donnent la première image de toi. Si tu t'autorise des ecarts de ce genre c'est que dans ta vie tu n'a aucun moyen d'évacuer tes malaises. Fais du sport !
Les forums sont un espace communautaire ou toutes les personnes se doivent le respect. Sa ressemble un peu a une communauté (dans la vie réélle). Ne t'autorise pas ce genre d'ecart pour paraitre supérieur ou intéréssent, c'est bléssant et sa donne une mauvaise image de toi.


Seulement qui viendra vérifier qui je suis dans le monde réel ? Et je ne me sens pas appartenir à aucune communauté virtuelle. Tu vois, je préfère le réel, les amis quoi. T'en fais pas pour le sport, j'en fais. Et ausi, arrête de jouer ua psychologue. Quand j'ai lû ta 2° -> 3° phrase, j'ai eu envie de dire "Mais ferme la petit con" parce que, c'est l'image que tu renvois de toi.

Si tu veux, on continue par MP, ça sera sans doute mieux que de poluer les commentaires.

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne gnomnain # Posté le 22/11/2009 à 14:47:26
Avatar
Newsers

Et moi qui espérait avoir une discussion argumentée avec Nightwar0.. on dirait qu'il a preféré répondre aux posts agressifs.

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 Nightwar0 # Posté le 22/11/2009 à 15:48:53

Oui désolé mais je ne peux répondre au milieu d'agression...
Et non pas de MP avec des gens qui savent pas controler leur langage :)

Je viens de voir que tu est en terminale. Tu dois être en pleine puberté alors. Je peux comprendre tes propos alors. cette période peut être difficile pour certain ;)

> gnomnain
J'ai déjà dit la majorité des choses que j'avais à dire.
Je n'aime pas :
- les propos que tiennent les ingénieurs de google qui celon moi essaye de vendre (meme si cela n'a pas de valeur en terme d'argent) leur produit.
- la nouvelle couche d'abstraction utilisant plusieurs langages. Je doute fortement qu'ils ai put puiser dans les bienfait de chaque langages pour en pondre un meilleur. Sinon ils aurait eu le niveau pour tout reprendre depuis l'ASM (voir précédent post)
- l'idée de ramasse miette ( un exemple parmis d'autre) qui ne laisse pas la possibilité au programmeur de savoir comment la mémoire est géré (principe même de l'abstraction). Cela peut s'arranger en proposant une option de désactivation de cette ressource. Apres le programmeur sera libre de tester et de remarquer la puissance de cet outils a condition qu'il marche bien.

Voila ce qui me vient à l'esprit
Hors ligne Tchouk! # Posté le 22/11/2009 à 15:54:18
Avatar
Flux RSS

Faut bien qu'ils justifient leurs travaux, ces ingénieurs. Il ne s'agit pas de vendre Go, il s'agit de dire "pourquoi un nouveau langage". Mais quoi qu'ils disent de toute façon, il y a toujours des gens pour s'insurger et trouver des débats là où il n'y en a pas.

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 Nightwar0 # Posté le 22/11/2009 à 16:00:40

c'est juste et c'est pour cela que j'ai lancer ma première critique
Hors ligne gnomnain # Posté le 22/11/2009 à 16:04:16
Avatar
Newsers

Oui, Nightwar0, le principe du ramasse-miette est de ne pas se soucier de comment est gérée la mémoire dans le cas général. Mais il faut voir que ça n'empêche pas de savoir comment ça marche réellement, que ce n'est pas une abstraction trop imprévisible (puisque la mémoire qui n'est plus accessible n'est... plus accessible, donc le programmeur n'a pas vraiment à s'en soucier) et que les ramasses miettes marchent vraiment bien.

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 Nightwar0 # Posté le 22/11/2009 à 16:10:08

Je parlais plus pour le nouveau programmeur qui se lance dans Go
Hors ligne bluestorm # Posté le 22/11/2009 à 16:14:57
dont ask to ask
Avatar
Anciens
Flux RSS

Il me semble que ton idée de "tout reprendre depuis l'ASM" ne veut rien dire. Go est implémenté dans le langage de leur choix, et c'est tout à fait normal, et compilé vers de l'assembleur.

Tu suggères qu'ils auraient du coder un interpréteur de leur langage en assembleur ? Cela me semble inutile et sans intérêt, en plus de poser des problèmes de portabilité que C résout admirablement. Vraiment je ne comprends pas ce que tu veux dire.

Pour le ramasse-miette, c'est effectivement une abstraction. Mais les langages de programmation font de nombreuses autres abstractions, qui ne sont pas "désactivables" en général : les exceptions, les objets, les fermetures...
De nos jours, la plupart des langages acceptent le GC comme une abstraction. Go vise visiblement un public qui veut faire de la "programmation d'outils système, mais sans trop s'embêter non plus", et le choix d'un GC me semble plutôt justifié pour ce public (si on veut produire un langage système sans GC, difficile aujourd'hui de justifier sa plus-value par rapport à C/C++). Pourquoi le critiques-tu en particulier ?
 
Hors ligne MarbolanGos # Posté le 22/11/2009 à 16:33:21
Avatar
Flux RSS

Ville : Nancy
Pays : France métropolitaine

Si on me montre que le Go est plus rapide que le Fortran pour faire des GROS calculs monoprocesseurs je l'adopte de suite sinon il me sert à rien.
 
Hors ligne Schtroumpfette # Posté le 22/11/2009 à 16:46:43
Avatar

Citation : gnomnain
Et moi qui espérait avoir une discussion argumentée avec Nightwar0.. on dirait qu'il a preféré répondre aux posts agressifs.


Désolé de l'avoir été.

Citation : Nightwar0
Je viens de voir que tu est en terminale. Tu dois être en pleine puberté alors. Je peux comprendre tes propos alors. cette période peut être difficile pour certain ;)


Je l'ai passée depuis un moment cette période moisie. Et puis ne te mêle pas de ma vie.

Citation : Nightwar0
Et non pas de MP avec des gens qui savent pas controler leur langage :)


Dans ce cas pourquoi m'as-tu répondu quand je t'ai agressé ?

Sinon, bluestorm a bien résumé la situation. Tu veux qu'on revienne à l'ASM mais heu... la dernière fois que j'ai vu du code ASM c'était dans le code du kernel Linux. Et encore, juste 10 lignes. Bref, le monde d'aujourdh'ui n'a pas que ça à faire de trainer pendant 10 ans sur une bibliothèque de parsage de code HTML par exemple. On a des langages et des compilateurs qui se chargent de créer du code ASM (qui sera, en passant, bien plus optimisé que celui fait avec tes petites mains [cela dépend tout de même de ce qu'on veut faire, si c'est simplement afficher une lettre à l'écran...]) en moins de temps qu'il n'en faut pour installer une bibliothèque sur un Unix-like.

Coder en un langage très très bas niveau ça sert en Electronique... plus en informatique à proprement parler où on a pas que ça à faire tous les jours comprends-tu ?

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne Nightwar0 # Posté le 22/11/2009 à 17:01:41

Citation
Dans ce cas pourquoi m'as-tu répondu quand je t'ai agressé ?

Comme je l'ai dit je ne te répondrait pas par MP. Ce qui n'exclut pas le fait de me defendre "en public".

Je comprend ce que tu as dit, le fait est que pour présenter un langage révolutionnaire mieux que n'importe quel autre langage (dont même les langage sur quoi il se base) le seul moyen est de reprendre de la base donc du langage machine.

Sinon ce n'est qu'une couche d'abstraction superficielle (pour moi pas pour d'autre je peux le concevoir) de plusieurs langages.
A ce moment la il ne faut pas critiquer négativement ceux sur quoi on se base.
Pour donner un exemple je connais des personnes qui critique le C vis a vis du C++. Cela me fais bien rire etant donné la relation qu'il existe entre les deux. La seule chose qui les sépare est qu'une personne (strousoup désolé les puristes pour l'orthographe) ai eu l'idée de créer une couche plus haut niveau a partir du C. En théorie n'importe quelle personne serait capable de faire sa (a condition d'en prendre le temps).

Je sais pas si je fais bien comprendre ce qui me traverse l'esprit.
On peut avoir des gouts des besoins mais jamais au grand jamais sauf cas extreme ne descendre un langage de programmation sous pretexte que 80% des programmeur font n'importe quoi avec
Hors ligne Schtroumpfette # Posté le 22/11/2009 à 17:13:44
Avatar

Si et maintenant je suis d'accord avec toi sur ce point. Mais, le problème étant qu'on pourrait implémenter les langages existants avec les nouvelles fonctionnalités de Go, seulement cela amènerai à faire une nouvelle norme pour le langage X et il faudrait encore du temps pour que les compilateurs prennent en compte cette implémentation et donc on en a encore pour 10 ans avant que la nouvelle norme soit appliquée.

Donc le mieux est encore de faire un langage à part qui reprendrai les idées des anciens sur lequel il est basé et ajouter ce qu'on souhaite.

Seulement, je pense que ce que tu ne comprends pas c'est qu'on peut tout à fait dire d'un langage qu'il est mauvais alors qu'on s'est basé dessus pendant des années, puis sortir son nouveau langage qui sera (en théorie :p ) mieux que l'ancien.

Mais pourtant, il faut bien que ça évolue non ? Donc, pour que ça évolue, il faut bien que le langage X soit meilleur que son prédécesseur. Non ? Et je ne vois pas où est le mal de dire que C est mauvais devant Go tant que c'est vrai.

Ca fait peut-être un peu histoire à l'eau de roses des langages de prog, mais je simplifie...

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne gnomnain # Posté le 22/11/2009 à 17:22:41
Avatar
Newsers

Citation : Nightwar0
Je comprend ce que tu as dit, le fait est que pour présenter un langage révolutionnaire mieux que n'importe quel autre langage (dont même les langage sur quoi il se base) le seul moyen est de reprendre de la base donc du langage machine.

Ou pas. On pourrait considérer que l'assembleur est le langage le plus pourri, et donc que n'importe quel langage qui se base sur l'assembleur n'est qu'une couche d'abstraction superficielle, et que n'importe qui qui code en haskell ou en python pourrait aussi bien code en langage machine, mais ça parait tout de suite pas très pertinent.
Déjà, ça montre une confusion entre le langage et son implémentation, ce qui n'est pas bon signe pour ce genre d'affirmations.
En fait, le compilateur peut transformer suffisament le programme pour que ça soit beaucoup plus facile de coder en langage X qu'en C, tout en profitant de l'infrastructure des compilateurs C actuels. Par exemple, GHC peut compiler les programmes en Haskell vers le C-- (un sous-ensemble du C), et pourtant personne ne peut prétendre que Haskell n'est qu'une couche d'abstraction superficielle par-dessus le C : c'est un langage vraiment différent.

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 Nightwar0 # Posté le 22/11/2009 à 17:30:01

Citation
Seulement, je pense que ce que tu ne comprends pas c'est qu'on peut tout à fait dire d'un langage qu'il est mauvais alors qu'on s'est basé dessus pendant des années, puis sortir son nouveau langage qui sera (en théorie :p ) mieux que l'ancien.


en shématisant grossierement on va dire que cette phrase s'applique au C et C++.
Donc on me dit que le C++ est mieux que le C car polymorphisme, exception, objets et j'en passe.

Pourquoi mieux ? parce qu'il créer des nouveaux concepts ? Un nouveau concept ne rend pas un langage meilleur qu'un autre. Il introduit juste l'idée de son concepteur pour faciliter la programmation.
Si maintenant moi qui ai fait C++ je dis que le C est vraiment pourri et catastrophique, je ne peux que admettre que le C++ est la même chose.

Et enfin si maintenant je dis ceux qui utilise le C le font de maniere catastrophique et moi je viens remedier à sa grace a mon nouveau langage C++, j'instaure ici une relation de dominance entre moi et les utilisateur de C++.

Projetons cela sur Go et on retrouve les même faits.

Si les ingénieurs de google impliqués dans ce projet se serait contenté de dire qu'il introduise une nouvelle couche a partir de nouveaux langages pour simplifier la vie des programmeurs systemes chacun aurait trouvé ses avantages et inconvenient la dedans.
Ne présentons pas Go comme un langage révolutionnaire capable de devancer tous les autres langages donc .
Hors ligne Tchouk! # Posté le 22/11/2009 à 17:32:28
Avatar
Flux RSS

FFFFFFFUUUUUUUUUUUU.

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 Schtroumpfette # Posté le 22/11/2009 à 17:34:03
Avatar

Je ne disais pas que Go allait être un langage révolutionnaire, mais juste un langage de plus tout comme l'a été C++ par rapport à C.

Et non, je ne suis toujours pas d'accord sur le fait que lorsqu'on dit que C est pourri et qu'on développe en C++ (ce qui n'est pas mon cas en passant) que forcément, C++ est pourri.

C'est pas comme la génétique, si tu vois ce que je veux dire.

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne Nightwar0 # Posté le 22/11/2009 à 17:57:44

Ok chacun sa manière de penser.

c'est pas toi qui dit que Go est révolutionnaire. Ce sont les ingénieurs qui le sous-entendent
Hors ligne la colombe noir # Posté le 23/11/2009 à 02:11:47
Avatar

Le langage est peu être sous licence libre pour l'instant mes Google risque de changer sa licence pour en faire un langage propriétaire sa risque d'être un coup dure si le langage connais un franc succet je préfère continuer a programmer en c pour l'instant.

http://hatokuro.comuf.com/ >(m)< °o0(mon site) Image utilisateur
 
Hors ligne la colombe noir # Posté le 23/11/2009 à 02:13:11
Avatar

Citation : Schtroumpfette


Je ne disais pas que Go allait être un langage révolutionnaire, mais juste un langage de plus tout comme l'a été C++ par rapport à C.

Et non, je ne suis toujours pas d'accord sur le fait que lorsqu'on dit que C est pourri et qu'on développe en C++ (ce qui n'est pas mon cas en passant) que forcément, C++ est pourri.

C'est pas comme la génétique, si tu vois ce que je veux dire.


d'après se que je sais le c++ est une mise a jour du langage c.

http://hatokuro.comuf.com/ >(m)< °o0(mon site) Image utilisateur
 
Hors ligne la colombe noir # Posté le 23/11/2009 à 02:14:08
Avatar

Double poste désoler :-°

http://hatokuro.comuf.com/ >(m)< °o0(mon site) Image utilisateur
 
Hors ligne LoupSolitaire # Posté le 23/11/2009 à 02:43:26
Connard patenté
Avatar
Flux RSS

études : Université de Rennes 1

Citation : la colombe noir
Le langage est peu être sous licence libre pour l'instant mes Google risque de changer sa licence pour en faire un langage propriétaire sa risque d'être un coup dure si le langage connais un franc succet je préfère continuer a programmer en c pour l'instant.

Ce serait pas malin de leur part.
Hors ligne Tuxicomane # Posté le 23/11/2009 à 08:11:58
Avatar

Ville : Murray hill, n.j.
Pays : États-Unis

Citation : la colombe noir
Le langage est peu être sous licence libre pour l'instant mes Google risque de changer sa licence pour en faire un langage propriétaire


Tout le monde peut rendre Go propriétaire pour son propre usage, c'est écrit dans la licence.
Ce qui ne t'empêcherait pas d'utiliser ( et d'améliorer ) la dernière version non propriétaire.



De toute façon, c'est en effet fortement improbable.

FDN, le FAI dont tu es le héros :)

Préfère m'envoyer un mail à vpm-sdz@serengetty.fr plutôt qu'un MP.
 
Hors ligne david96 # Posté le 23/11/2009 à 21:26:24
Avatar

Ils auraient du l'appeler Goo, car là ça va vite faire : Go ? Hein, c'est par qui ce langage ? Bâ Gô : Gogol ! :p

Quoi que si ça peut amener au jeune public à écouter du Gogol 1er, je ne suis pas contre ! :lol:
 
Hors ligne Schtroumpfette # Posté le 23/11/2009 à 21:35:52
Avatar

Quel jeu de mot... digne d'un gamin de 10 ans :-°

«Le fait de s'incliner n'humilie pas l'agresseur mais l'élève.»
Gandhi
Image utilisateur
 
Hors ligne sisko59 # Posté le 24/11/2009 à 13:54:12

Bonjour à tous,
Je trouve l'article intéressant, avec pas mal d'informations (à la différence de certains, je préfère qu'il soit un peu plus long au risque d'avoir des éléments clé).

J'espèrais trouver encore quelques informations dans les commentaires sur go, mais les commentaires semble être partit hors sujet avec Nightwar0 qui se fait un peu malmené. Je comprend très bien sont point de vue, si c'est pour faire un langage de plus qui ne propose que des pseudos innovations. Qui ne sont en faites des facilitations d'écritures, il ne semble pas avoir de grand intérêt puisque d'autre sont déjà là pour ça. En plus si les créateurs se mettent à insulter les autres langages, dans quel monde vit-on!

Mais avant de m'emporter j'aimerais déjà être sûr de ses affirmations, déjà sur la réactions des créateurs par rapports aux langages:
il ne semble pas remettre en question les autres langages mais les habitudes de leurs utilisateurs (ça me rappelle l'histoire d'une blonde, qui ne savait pas qu'il fallait mettre de l'essence dans un voiture...),
en plus le soucis avec la retranscription d'une conférence ou d'articles ne permet pas d'êtres sur d'avoir compris ce que les créateurs souhaitaient transmettre. En plus il est possible qu'il se soit un peu emporté et énoncé le langage C alors qu'il n'aurait pas dû.. Ils semblent aussi qu'ils parlaient globalement, donc plus par rapport de l'utilisateur béta... Mais bon je pense que sur go, ils y a aura surement le même problème ou sinon c'est vraiment révolutionnaire d'avoir les bonnes habitudes pour programmer sur un langage dés le départ. J'arrêterai là sur ce qui me semble n'être qu'un quiproquo. :)

Est-il vraiment qu'un langage de plus?
C'est là que j'ai besoin qu'on me réponde à d'autres question pour le vérifier.
Il semble que l'on puisse programmer à la fois des applications autonome (l'exe de windows), des applications web au travers de services (mais avec quel serveur d'appli?).
J'aimerais savoir est-il possible de programmer de façon rétroactive? Comme dans par exemple le delphi ou le c avec l'assembleur, donc peut-on mettre un bout de code d'assembleur (en sachant que l'application ne tournera que sur un type d'OS), ou un bout de C si c'est avec ce langage qu'il a été construit?
A propos du ramasse-miette, ayant développé sur Delphi où j'ai appris à faire attention aux object invoqués (car il faut les libérés). Quand je suis passé à l'action script et au java, avec aucun contrôle sur la mémoire, et plus difficile a détecté une fuite mémoire, je souhaiterais savoir si sur go on a la possibilité de gérer l'instanciation et la libération de ces objets soi-même?
Car moi, je vois pas l'intérêt de me faire un garbage collector si je sais quand mes objets doivent être présent on non, autant les enlevés de suite.

Je tiens à remercier ceux qui m'auront lu en entier et pourrait avoir un début de réponse à mes questions. ;)
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news