[Choix langage] Go / Rust

Le problème exposé dans ce sujet a été résolu.

Bonsoir,

Dans le cadre d’un stage en Entreprise mon chef ma demander d’apprendre de choisir Go ou Rust pour créer des micro services dans le web :)

Néanmoins je cherche avant tout à apprendre donc le langage servirai à faire des micro services web / Api Rest ; Logiciel ; Android ; Et deux trois trucs relativement bas niveau et système !

Lequel me conseillez-vous et pourquoi ?

Merci d’avance

Hello,

En dehors des considérations pratiques dans le cadre d’une application particulière, je pense que Rust est beaucoup plus intéressant à apprendre que Go.

En dehors des goroutines, Go est somme toute un langage assez classique qui n’apporte pas beaucoup sur le plan conceptuel. Rust introduit entre autre les notions de "lifetime" (qui lui permet de se passer de GC et de l’overhead que ça induit au runtime), de "trait" (qui permet de se passer des mécanismes de l’OO plus classiques comme l’héritage pour abstraire son code), un système de type sacrément bien foutu (malgré quelque lourdeurs ça et là)… Même si toutes ces idées ne sont pas forcément nouvelles (beaucoup viennent du monde de la programmation fonctionnelle), il est intéressant de les voir regroupées dans un langage destiné à la programmation système et haute performance.

Encore une fois, ce ne sont que des considérations conceptuelles indépendante des contraintes applicatives, mais je pense que ça peut intéresser les futurs lecteurs de ce sujet.

+8 -0

Après mon but est pas que de faire du web avec ce langage; J’aimerai faire du système plus tard ; Du Android et de l’embarquer pour pourquoi pas une situation pro !

J’hésite beaucoup Go semble être assez léger niveau écriture, facile à apprendre et performant

Rust semble quand à lui plus complexe à appréhender mais qui sur le long terme permettrai de faire " plus de choses "

Je possède encore 1-2 j avant le début du stage pour me décider

J’espère réussir à vite me décider

Rust semble quand à lui plus complexe à appréhender mais qui sur le long terme permettrai de faire " plus de choses "

D’un point de vue intrinsèque, les possibilités offertes par les deux langages sont très similaires. En revanche, à long terme, le système très pratique de packaging offert par Rust avec cargo pourrait bien lui permettre de prendre le pas sur Go d’un point de vue écosystème.

J’ai envie de dire que le choix que tu fais maintenant pour ton stage n’est pas définitif pour le reste de ta vie, tu peux bien apprendre Go maintenant (probablement beaucoup plus simple et rapide à appréhender, donc mieux adapté à la situation d’un stage), jouer un peu avec, puis te pencher sur Rust (ou encore autre chose) plus tard et voir ce que tu préfères.

+6 -0

Merci !

J’aimerai aussi vous dire que le choix entre Go et Rust importera beaucoup sur l’avenir d’un projet qui me tient à cœur :

La réalisation d’un hébergement complet assez conséquent pour lequel le développement devrait durée de 1 à 2 ans tant il y a de fonctionnalités

J’hésite énormément globalement à use Go ou Rust pour le stage ainsi que ce projet

Je préfère me fixer sur un des deux car en terme d’apprentissage cela sera plus simple à gerer

D’un point de vue apprentissage, intérêt à long terme, conception…, je ne vais pas répéter ce qui a été dit, Rust me semble mieux.

Mais j’apporterai un bémol. Si tu es un programmeur encore un peu vert, ça risque d’être compliqué ; pas insurmontable, mais il va te falloir plus de temps et d’énergie. Comme tu parles d’un stage, ça me semble être un critère important : Rust sera plus formateur, mais Go plus facile. À toi de voir l’énergie que tu es prêt à déployer pour apprendre un langage et pour ton stage.

Dans les détails web, j’avoue mon ignorance, quel que soit le langage.

+1 -0

Salut,

Niveau apprentissage je pense désormais savoir que Rust serait plus enrichissant que Go Il demandera plus d’énergie et de temps de dev sa c’est clair !

Par contre, je vois que très peu d’entreprise bossant en Rust et que très peu de projets concret l’utilisant Alors que en Go j’aurai plus tendance à dire l’inverse ( Docker, Gobot )

Pour les projets utilisant Rust : https://www.rust-lang.org/en-US/friends.html

Après, je suis complètement d’accord avec Gabbro. Tu sembles être encore plutôt débutant dans le monde de la programmation et Rust risque d’être un peu délicat à aborder. J’irais même plus loin en disant qu’il est surement plus bénéfique d’apprendre Rust après avoir utilisé un langage classique parce qu’on comprend mieux l’utilité des choix qui ont été faits lors de sa conception si on s’est heurté aux problèmes qu’ils résolvent.

+0 -0

Je ne pense pas être un débutant en prog, j’en ai fait beaucoup ( Java, C#, Js )

Sans vouloir t’offenser, la question que tu poses "quel langage choisir" en tournant autour du pot est typiquement une question de débutant. La réponse, surtout quand tu parles de deux langages qui ont des possibilités aussi similaires et dans le cadre d’un simple stage, c’est "peu importe". Davidbrcz semble dire que les outils dispo pour le web sont plus fournis en Go, donc pars sur Go. C’est à peu près le seul critère pertinent pour un stage. Encore une fois, ce que tu fais à long terme pour tes projets personnels n’a aucune raison d’être influencé par le choix que tu fais maintenant.

Au pire, tu jettes un oeil à des codes/des cours introductif dans les deux langages et tu pars sur celui qui te tente le plus. Ce sera plus productif et utile que de se demander pendant 3000 ans si le choix que tu fais maintenant est pertinent pour le projet que tu vas commencer dans quelque mois.

+1 -0

Salut,

En dehors des considérations pratiques dans le cadre d’une application particulière, je pense que Rust est beaucoup plus intéressant à apprendre que Go.

adri1

Il y a une chose qu’il faut tout de même souligner au sujet du Go, c’est qu’il ne passe pas par les bibliothèques systèmes. Ce qui, de mon point de vue, le rend assez singulier en ce qu’il ne repose que sur les appels systèmes (donc en passant directement par l’Assembleur et l’ABI). Ce qui, à ma connaissance, n’est réalisé par aucun autre langage de haut niveau. Cela amène des problèmes (cet article est particulièrement intéressant), mais aussi des avantages, notamment le caractère statique des exécutables.

+0 -0

Je me demande si tout le monde se rend bien compte ici que l’on est en train d’orienter un débutant dont le stage imminent touche au domaine du web, vers un langage système notoirement connu pour être difficile à apprendre et à manipuler efficacement ?

Je me permets de rééquilibrer la balance parce que même s’il est beaucoup moins sexy sur le papier que Rust (ce que j’admets volontiers), et qu’il ne répond pas à un idéal académique, on ignore souvent ce qui a poussé des gens comme Ken Thompson et Rob Pike à développer Go : le vrai monde, c’est-à-dire la réalité du développement, qui comprend la facilité à déployer, la gestion des dependances dans une codebase qui grossit, la vitesse du build de tout un projet sur un système d’intégration continue, et le fait que le temps de cerveau d’un développeur coûte beaucoup plus cher à l’entreprise que celui du CPU d’un ordinateur. Toutes ces problématiques ont été prises en considération jusque dans le design du langage, pas seulement son modèle de concurrence !

D’abord, il est notoire que le plus gros de l’écosystème de Go et donc son domaine d’application usuel, contrairement à celui de Rust, c’est le backend des services web ! Il n’y a qu’à consulter la liste des packages disponibles dans cet écosystème pour s’en apercevoir, et ça n’a rien d’étonnant puisque le langage est développé par Google.

Go a été pensé pour être versatile, à l’image de Python (c’est-à-dire modelable et très rapide à développer), en proposant notamment un modèle de concurrence basé sur l’idée il faut communiquer pour pouvoir coopérer, pas l’inverse. Ce que ce modèle a de particulièrement intéressant (et ce qui fait toute son élégance), c’est qu’il est simple à comprendre, à appréhender, immédiat à appliquer, et qu’une fois bien compris il permet de se passer de milliards de contraintes formelles pour rendre la programmation concurrente possible sans se péter les dents : il s’agit d’apprendre à penser son problème correctement plutôt que d’obéir à un compilateur qui le fait pour nous de façon rigide, ce que je trouve personnellement beaucoup plus enrichissant. Les autres idées qui ont poussé le développement de Go sont sa vitesse de compilation (parce qu’à la longue, sur de vrais gros projets, ça devient un vrai facteur limitant), et le fait qu’il incite les developpeurs à vraiment produire du code modulaire. Renseignez-vous sur le pourquoi du comment de ce langage (les articles de google sont légion à ce sujet) avant de dire des bêtises du style Go n’apporte rien en dehors des goroutines, ou de le snober pour manque d’académisme. Le système packages dont Rust s’ennorgueillit, Go en avait apporté tous les avantages 10 ans plus tôt !

Pour finir, je n’ai vraiment rien contre Rust et je trouve que c’est un langage très intéressant, mais à la fin de son stage qui va durer grand max 6 mois, peut-être que le PO voudra avoir accompli autre chose qu’apprendre à utiliser son langage de programmation, non ?

+8 -1

Je me permets de rééquilibrer la balance

Hmm, à part entwanne, personne n’a conseillé Rust à l’OP sur ce sujet.

avant de dire des bêtises du style Go n’apporte rien en dehors des goroutines

Heureusement que personne n’a dit ça, du coup. ^^ Comme j’ai l’impression d’être visé par cette partie, je précise que je parlais bien du plan purement conceptuel. Que le compilateur soit rapide et que le langage soit fait pour être modulaire, ça n’a rien de particulièrement nouveau comme objectif. Personne n’a dit que Go était un langage inintéressant à utiliser, ce que j’ai dit c’est qu’il est inintéressant à apprendre.

+0 -0

Que le compilateur soit rapide et que le langage soit fait pour être modulaire, ça n’a rien de particulièrement nouveau comme objectif

Que le langage soit pensé de telle façon que la compilation d’une solution entière se fasse en moins d’une seconde (il ne s’agit pas d’une banale optimisation du compilateur), à l’époque où Go a été créé, il était le seul. Certes aujourd’hui ce n’est plus quelque chose de tellement novateur puisque tous les autres se sont alignés avec plus ou moins de succès, mais il ne faut pas négliger le fait que derrière Go, tu as les travaux de gens qui ont toujours eu une influence considérable sur le domaine, y compris en recherche fondamentale, depuis les années 1960 (Ken Thompson en particulier) : les snober pour le manque d’académisme sur Go a quelque chose de plutôt rigolo.

Il serait judicieux, à mon avis, de se demander comment et pourquoi ces types sont arrivés à ce résultat.

Personne n’a dit que Go était un langage inintéressant à utiliser, ce que j’ai dit c’est qu’il est inintéressant à apprendre.

Et je pense que tu te trompes lourdement à ce sujet.

C’est le seul langage que je connaisse dont les idiomes incitent délibérément à penser la concurrence de cette façon. Et d’expérience, adopter cette façon de penser dans d’autres contextes n’est pas trivial : typiquement l’equipe avec laquelle je bosse a du mal à penser de cette façon en Python, quand bien même la codebase sur laquelle on bosse a inclu ces idiomes dès sa conception (alors que je ne connaissais pas vraiment Go à cette époque… Si c’était à refaire j’aurais probablement poussé Go pour ce projet).

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte