En 2023, nous avons mille raisons d'apprendre Rust.
Le 7 août, la Fondation Rust a publié les résultats du rapport d'enquête Rust 2022. Le rapport montre que le taux d'adoption de Rust continue d'augmenter. Plus de 90 % des répondants à l'enquête ont indiqué qu'ils sont des utilisateurs de Rust ; Rust est utilisé pour le majorité des travaux de codage en , soit une augmentation significative de 51,8 % par rapport à l'année précédente.
Il ne fait aucun doute que Rust devient de plus en plus au centre des préoccupations des développeurs avec ses excellentes performances en matière de sécurité de la mémoire et de simultanéité. Cependant, il est également difficile d'ignorer Go, un joueur relativement "vétéran" qui a été sélectionné une fois comme langage de programmation de l'année.
Né en 2009, le langage Go a suscité une grande attention depuis son modèle de concurrence unique et ses puissants avantages en termes de performances. Il est à noter que, comme le langage Rust, le créateur du langage Go "déteste" également le C++, et Go est également le langage dominant du cloud natif.
Dans l'enquête développeur Stack Overflow 2022, parmi les 70 000 réponses à la question "un langage de programmation qui fait aimer et détester", les programmeurs préfèrent évidemment Rust, 86% d'entre eux disent aimer Rust, et 64% disent aimer Go. Face au statut brûlant de Rust, certains développeurs se sont interrogés : est-ce que Go vaut encore la peine d'être appris en 2023 ?
De plus, au cours des deux derniers jours, choisir Rust ou Go est également devenu un sujet brûlant sur Hacker News :
Un internaute qui soutient Rust a déclaré: "Ce choix m'a également troublé pendant longtemps. Au final, Rust a gagné. D'abord, je sens que Rust est plus proche des choses de l'ère Pascal précédente, et vous pouvez tout contrôler. ; deuxièmement, si wasm et les technologies associées sont une grande épidémie, Rust serait un choix plus sûr ; alors, nous avons déjà Python pour un développement rapide, il est donc logique de choisir quelque chose d'un peu plus extrême, et Go est quelque peu au milieu. Enfin, Rust devrait être utilisé pour le Core et le haut profil, il est donc peu probable qu'il soit éliminé."
Un autre développeur qui n'était pas d'accord a déclaré : "Je développe en Go depuis près de dix ans, mais récemment, j'ai également essayé Rust. Je pense qu'il existe actuellement une préférence obligatoire et trompeuse pour Rust, d'après mon expérience dans From expérience dans diverses startups, y compris mon actuel, Go est de loin le meilleur choix pour le développement backend ! Remarque, performances, fonctionnalités ou autre... les deux langages sont très, très similaires ! "
Je dois dire que Go et Rust sont sans aucun doute d'excellents langages de programmation. Ils sont modernes, puissants, polyvalents et offrent d'excellentes performances. Mais cela n'a vraiment aucun sens de comparer directement Go et Rust, qui est meilleur, car chaque langage de programmation représente une série de compromis profonds derrière lui. Différentes langues seront optimisées pour différents besoins, donc lorsque nous choisissons une langue, nous devons également considérer le type de problèmes que nous voulons l'utiliser pour résoudre. Nous partirons donc des scénarios applicables des langages Go et Rust, et discuterons de la "voie" de la conception de Go et Rust.
Bien que Rust et Go diffèrent considérablement par leur syntaxe et leur style, les deux sont des outils de premier ordre pour la création de logiciels. Commençons l'analyse spécifique ci-dessous.
Go contre Rust : Similitudes
Rust et Go ont beaucoup en commun, c'est pourquoi les gens comparent souvent les deux. Quels objectifs ont-ils en commun ?
Rust est un langage de programmation multi-paradigmes typé statiquement de bas niveau, davantage axé sur la sécurité et les performances.
—Gints Dreimanis
et:
Go est un langage de programmation open source qui facilite la création de logiciels simples, fiables et efficaces.
—golang.org
Sécurité de la mémoire
Go et Rust font tous deux partie des langages de programmation modernes qui mettent l'accent sur la sécurité de la mémoire. Au cours des décennies de développement d'anciens langages comme C et C++, il est devenu évident que l'une des principales causes d'erreurs et de bogues est l'accès non sécurisé/incorrect à la mémoire.
Ainsi, Rust et Go ont chacun donné des solutions différentes, mais l'objectif des deux est d'être plus intelligent et plus sûr en termes de gestion de la mémoire, et d'aider les développeurs à écrire des programmes corrects avec d'excellentes performances.
Exécutable rapide et compact
Les deux sont des langages compilés, ce qui signifie que les programmes peuvent être traduits directement en code machine exécutable, de sorte que les programmes peuvent être déployés sous la forme d'un seul fichier binaire. Contrairement aux langages interprétés comme Python et Ruby, nous n'avons pas besoin d'expédier un interpréteur et beaucoup de bibliothèques/dépendances avec le programme. En tant que reflet direct de cette force fondamentale, les programmes Rust and Go ont tendance à s'exécuter plus rapidement que les langages interprétés.
Langage à usage général
Rust et Go sont des langages de programmation polyvalents puissants et extensibles que vous pouvez utiliser pour développer toutes sortes de logiciels modernes, des applications Web aux microservices distribués, aux microcontrôleurs intégrés, aux applications mobiles, etc. **Les deux disposent d'excellentes bibliothèques standard et d'écosystèmes tiers florissants, ainsi que d'un support commercial solide et d'une large base d'utilisateurs. ** Les deux existent depuis des années et continueront de prospérer dans les années à venir. Apprendre Go ou Rust serait un investissement de temps et d'énergie très raisonnable de nos jours.
Style de programmation pragmatique
Ce ne sont pas non plus des langages trop fonctionnels (comme Scala ou Elixir), ni entièrement orientés objet (comme Java et C#). Au contraire, bien que Go et Rust aient tous deux les fonctions de programmation fonctionnelle et orientée objet, ils mettent toujours l'accent sur l'orientation pragmatique, c'est-à-dire résolvent le problème de la manière la plus appropriée, plutôt que de forcer tout le monde à utiliser un méthode spécifique par « idéologie », manière de faire les choses. ** Mais si vous aimez vraiment le style de programmation fonctionnel, il existe d'autres options d'outils connexes du côté de Rust, ce qui est l'un des avantages de Rust over Go. **
Nous pouvons certainement débattre de ce qui constitue un véritable langage "orienté objet". Mais pour être juste, le style de programmation orientée objet auquel les utilisateurs de C++, Java ou C# s'attendent n'existe pas vraiment dans Go ou Rust.
—Jack Mott
Développement massif
Rust et Go fournissent tous deux de nombreuses fonctionnalités utiles pour la programmation à grande échelle, de sorte qu'ils peuvent tous deux s'adapter aux besoins réels des grandes équipes de développement et des grandes bases de code. ** Par exemple, les programmeurs C ont débattu pendant des années sur l'endroit où mettre les parenthèses et si le code devait être indenté avec des tabulations ou des espaces ; mais Rust et Go utilisent déjà des outils de formatage standard (Go a gofmt, Rust It est rustfmt) résolvent complètement ces problèmes problèmes. Ils réécrivent automatiquement votre code en utilisant un style conforme.
Ce n'est pas que ce format particulier soit subtil, mais **Les programmeurs Rust and Go sont plus pragmatiques et préfèrent choisir une norme d'implémentation uniforme. **
Le style gofmt n'est peut-être pas le préféré de tout le monde, mais gofmt a quelque chose pour tout le monde.
— Rob Pike
Un autre gros avantage de ces deux langages se reflète dans le pipeline de construction. Les deux ont d'excellents outils de gestion de construction et de dépendance standard intégrés et performants. Cela signifie que les programmeurs n'ont pas à faire face à des systèmes de construction tiers complexes, ni à apprendre un nouveau système toutes les quelques années.
J'ai utilisé Java et Ruby au début de ma carrière, donc écrire du code Go et Rust a toujours été un peu intimidant et hors de mon contrôle. Mais quand je suis entré dans Google et que j'ai vu un service écrit en Go, j'ai été vraiment soulagé car je l'ai trouvé facile à construire et à exécuter.
Il en va de même pour Rust. Bien que je n'aie fait que des recherches sur des projets à petite échelle, je peux voir sa facilité d'utilisation. Je souhaite que ces systèmes de construction configurables à l'infini appartiennent au passé, maintenant que les nouveaux langages sont livrés avec leurs propres outils de construction dédiés qui fonctionnent prêts à l'emploi, n'est-ce pas bien ?
—Sam Rose
** Rouille ou part ? **
Après avoir parlé de tant de problèmes et du fait que les deux langages sont si bien conçus et puissants, y a-t-il un résultat dans ce concours ? Ou, puisque les deux sont d'excellentes options, pourquoi les gens sont-ils toujours indignés sur les réseaux sociaux, en écrivant de longs articles de blog commentés disant "Rust est pour les idiots" ou "Go n'est pas du tout un langage de programmation".
Bien sûr, certaines personnes veulent juste évacuer leurs émotions, mais cela n'aide évidemment pas à résoudre le problème réel. Au moins lorsqu'il s'agit de savoir quelle langue utiliser dans un projet, ou quelle langue utiliser pour percer dans le monde de la programmation, les voix fortes n'aident évidemment pas à faire le bon choix.
Revenons à la discussion sur les adultes et voyons comment Rust et Go ont des forces et des faiblesses dans le cadre d'une analyse rationnelle.
Go contre Rust : performances
Comme mentionné précédemment, les programmes générés par Go et Rust sont tous deux rapides car ils sont compilés en code machine natif sans passer par un interpréteur ou une machine virtuelle. Mais les performances de Rust sont encore meilleures, voire comparables à C et C++, qui sont connus comme les références de performance de l'industrie. Et contrairement à ces langages à l'ancienne, Rust fournit également des mécanismes de sécurité de la mémoire et de la concurrence, tout en n'affectant guère la vitesse d'exécution. Rust permet également aux développeurs de créer des abstractions complexes sans encourir de pénalité de performances lors de l'exécution.
En revanche, Bien que les performances des programmes Go soient également bonnes, la conception se concentre principalement sur la vitesse de développement (y compris la compilation), plutôt que sur le degré d'exécution. Les programmeurs Go préfèrent un code clair et lisible, donc la vitesse d'exécution est un peu plus lente.
Le compilateur Go ne passe pas non plus beaucoup de temps à générer le code machine le plus efficace, il se préoccupe davantage de compiler rapidement de grandes quantités de code. ** Ainsi, dans les benchmarks d'exécution, c'est souvent le programme Rust qui submerge le programme Go. **
Les performances d'exécution de Rust sont également très cohérentes et prévisibles car il n'utilise pas de récupération de place. Le ramasse-miettes de Go est très efficace et optimisé pour maintenir les temps de pause aussi courts que possible (les temps de pause deviennent plus courts à chaque version de Go). Mais quoi qu'il en soit, le ramasse-miettes introduit toujours une certaine imprévisibilité dans le comportement du programme, et cela peut être grave, voire totalement inacceptable pour certaines applications (telles que les systèmes embarqués).
Parce que l'objectif de Rust est de donner au programmeur un contrôle complet sur le matériel sous-jacent, **Les programmes Rust peuvent être profondément optimisés pour se rapprocher des performances théoriques maximales de la machine. ** Cela fait de Rust le meilleur choix pour certains cas d'utilisation où la vitesse d'exécution l'emporte sur tout le reste, comme la programmation de jeux, les noyaux de système d'exploitation, les composants de navigateur Web et les systèmes de contrôle en temps réel.
Simplicité
Peu importe la puissance d'un langage de programmation s'il est trop difficile à apprendre et exclut la plupart des gens. Go semble être délibérément conçu pour se distinguer des langages de complexité croissante comme le C++ : **Il a très peu de syntaxe, très peu de mots-clés, et même pas beaucoup de fonctions. **
Cela signifie que le langage Go est facile à apprendre et que vous pouvez écrire divers programmes avec lui après un peu de compréhension.
Go est vraiment facile à apprendre. J'en ai souvent entendu parler auparavant, mais après l'avoir utilisé, je suis toujours étonné de la rapidité avec laquelle il améliore la productivité. Grâce au langage Go, à la documentation et aux outils associés, j'ai écrit du code intéressant et engageable en seulement deux jours.
—Les premières impressions du programmeur Rust sur Go
Le point clé ici est "simplicité" trois mots. Bien sûr, simple ne veut pas dire facile. Mais une langue petite et simple est certainement plus facile à apprendre qu'une langue grande et complexe. Il n'y a pas beaucoup de façons d'obtenir un effet, donc le code Go de haute qualité a presque toujours le même aspect. Cela a un autre avantage : nous pouvons rapidement comprendre ce que fait un service avec lequel nous ne sommes pas familiers.
** L'ontologie de base de Go est petite, mais la bibliothèque standard est très puissante. ** C'est-à-dire qu'en plus de la syntaxe Go, notre courbe d'apprentissage doit également prendre en compte cette partie de la bibliothèque standard.
D'autre part, le transfert de fonctions du langage vers la bibliothèque standard signifie que chacun n'a qu'à se concentrer sur l'apprentissage des bibliothèques liées aux besoins de développement actuels. ** Go est également conçu en tenant pleinement compte des besoins du développement logiciel à grande échelle et peut fortement prendre en charge de grandes bases de code et équipes de développement. **Dans ce type de scénario, les nouveaux développeurs doivent pouvoir démarrer rapidement. À cette fin, la communauté Go a toujours privilégié la simplicité, la clarté, la polyvalence et la directivité des programmes.
En utilisant le langage GO, il est souvent plus facile pour les développeurs juniors d'être productifs, mais il est plus difficile pour les développeurs intermédiaires d'introduire des abstractions complexes et donc de poser des problèmes. En raison de cette caractéristique, Rust a tendance à être moins attrayant que Go dans le monde du développement de logiciels d'entreprise.
— Loris Cro
Fonction
Rust prend en charge plus de complexité que plusieurs autres langages de programmation, de sorte que la portée d'implémentation correspondante est également plus grande.
— Dévathon
**Rust est spécifiquement conçu pour inclure une variété de fonctionnalités puissantes et utiles qui aident les programmeurs à faire plus avec moins de code. **Par exemple, la fonction match de Rust permet d'écrire rapidement une logique flexible et expressive :
Mais aussi parce que Rust a beaucoup de considérations de conception, il est plus difficile à apprendre, surtout au stade initial. Mais ce n'est pas grave, C++ ou Java a beaucoup à apprendre après tout, et il n'offre même pas les fonctionnalités avancées de Rust comme la sécurité de la mémoire. Il est donc vraiment déraisonnable de critiquer le son trop compliqué de Rust : il est conçu pour mettre l'accent sur l'expression et la richesse des fonctions, on ne peut pas s'attendre à ce qu'il soit aussi simple et pur tout en profitant des avantages. Alors bien sûr, Rust a sa propre courbe d'apprentissage. Mais tant que cette difficulté sera surmontée, il y aura un chemin sans heurt devant nous.
Si vous êtes prêt à apprendre une syntaxe et une sémantique plus complexes (et une barre plus haute pour la lisibilité du code) en échange du plus haut niveau de performances, Rust peut même rivaliser avec C++ et D. —Dave Cheney
** Bien que Rust et Go s'empruntent mutuellement certaines fonctionnalités (telles que les génériques), il est juste de dire que les fonctionnalités de Rust sont toujours supérieures et que les fonctionnalités de Go font relativement défaut. **
Concurrence
La plupart des langages offrent une forme de prise en charge de la programmation simultanée (c'est-à-dire l'exécution de plusieurs opérations en même temps), mais Go a été conçu pour cela dès le départ. ** Go n'utilise pas les threads du système d'exploitation, mais fournit une alternative légère : les goroutines. **Chaque goroutine est une fonction Go s'exécutant indépendamment que le planificateur Go mappe à l'un des threads du système d'exploitation sous contrôle. Autrement dit, le planificateur peut gérer très efficacement un grand nombre de goroutines simultanées, tout en n'utilisant qu'un nombre limité de threads du système d'exploitation.
Par conséquent, nous pouvons exécuter des millions de goroutines simultanées dans un seul programme sans nous soucier de causer de graves problèmes de performances. Pour cette raison, **Go est une solution complète pour les scénarios d'applications simultanées à grande échelle tels que les serveurs Web et les microservices. **
Go propose également des canaux pour les goroutines, un moyen rapide, sûr et efficace de communiquer et de partager des données. Le niveau de conception de la simultanéité de Go est en effet très élevé et l'expérience d'utilisation est assez détendue et agréable.
En général, la conception de programmes concurrents est très difficile et la construction de programmes concurrents fiables et corrects dans n'importe quel langage n'est en aucun cas facile. Cependant, puisque cette exigence a été prise en compte au début du projet, le mécanisme de programmation concurrente en Go a été rendu aussi simple que possible et bien intégré.
Go facilite la création d'une application soigneusement déconstruite qui peut être déployée en tant qu'ensemble de microservices et tirer pleinement parti de la simultanéité. Ce n'est pas impossible dans Rust, c'est juste plus difficile à mettre en œuvre. Dans un sens, Rust est plus adapté aux programmeurs qui ne doivent pas autoriser les failles de sécurité causées par des problèmes de mémoire ; mais corrélativement, lorsqu'ils effectuent certaines tâches relativement simples pour d'autres langages (dont GO), ils préfèrent avoir à payer plus d'effort. —Sonya Koptiev
En revanche, le mécanisme de concurrence dans Rust vient d'atterrir et n'a pas encore été stabilisé, donc tout le monde est invité à continuer à prêter attention à cette direction de développement active. Ceci est également bénéfique.Par exemple, la bibliothèque rayon de Rust fournit une méthode très élégante et légère qui peut convertir des calculs séquentiels en calculs parallèles.
Ce serait vraiment bien d'avoir une syntaxe légère pour générer des goroutines et utiliser des canaux. Il s'agit d'une manifestation directe de la puissance de la grammaire, et divers petits détails rendent également l'expérience de programmation simultanée de Go bien meilleure que celle des autres langages.
—Les premières impressions du programmeur Rust sur Go
Bien qu'il ne soit pas facile d'implémenter des programmes concurrents dans Rust, cela reste parfaitement faisable, et ** ces programmes bénéficient également des garanties de sécurité de la mémoire soigneusement conçues par Rust. **Prenez l'exemple de la classe Mutex de la bibliothèque standard : en Go, on peut oublier d'acquérir le mutex avant d'accéder à quelque chose ; mais en Rust, il n'y a pas besoin de s'en soucier du tout.
Go se concentre sur la simultanéité comme l'un des concepts de base. Cela ne veut pas dire que nous ne pouvons pas obtenir des effets de concurrence similaires à Go dans Rust, mais la difficulté de mise en œuvre est en quelque sorte un test pour les programmeurs. Go se concentre sur la simultanéité comme l'un de ses concepts de base. Cela ne veut pas dire que nous ne pouvons pas obtenir des effets de concurrence similaires à Go dans Rust, mais la difficulté de mise en œuvre est en quelque sorte un test pour les programmeurs.
——Dave Cheney
sécurité
Comme mentionné précédemment, Go et Rust ont leurs propres moyens d'éviter diverses erreurs de programmation courantes, en particulier les problèmes liés à la gestion de la mémoire. Mais **Rust va plus loin, on peut dire qu'il ne ménage pas ses efforts pour s'assurer que tout le monde ne commette pas de fautes de sécurité inattendues. **
Le compilateur de Rust est si strict qu'il vérifie chaque variable que nous utilisons, chaque adresse mémoire à laquelle nous nous référons. Il évite les conditions potentielles de course aux données et vous avertit également des comportements indéfinis. Dans le monde de Rust, les problèmes de concurrence et de sécurité de la mémoire sont presque impossibles à survenir.
— Pourquoi choisir Rust ?
Cela dit, l'expérience de programmation dans Rust est différente de celle de presque tous les autres langages, et ** peut être assez difficile ** lors de sa première introduction. Mais aux yeux de nombreux développeurs, cet effort en vaut clairement la peine.
Pour moi, le plus gros avantage de Rust est que le compilateur est devenu mon bon assistant, il ne manquera aucun bug détecté (sérieusement, parfois ça me semble magique).
—Grzegorz Nosek
De nombreux langages, y compris Go, fournissent également des outils pour aider les programmeurs à éviter les erreurs, mais Rust porte cet effet à un nouveau niveau. De nombreux programmes incorrects ne se compilent même pas du tout.
Dans Rust, diverses fonctionnalités de la bibliothèque aident les programmeurs à éviter les erreurs des utilisateurs. Rust nous permet de spécifier une donnée, puis de garantir qu'elle n'appartient pas à ou n'est pas falsifiée par quoi que ce soit d'autre. Je ne peux pas penser à un langage qui a fourni autant d'outils pour prévenir les abus accidentels auparavant, ce qui est merveilleux. -Sam Rose
"Combattre le vérificateur d'emprunt" est un must pour les nouveaux venus de Rust, mais pour la plupart, le vérificateur n'est pas vraiment l'ennemi. Les problèmes qu'il trouve sont en effet de vrais bugs (ou du moins des bugs potentiels) dans le code. ** Cela peut nous obliger à refactoriser fondamentalement nos programmes pour éviter de tels problèmes ** - Si vous placez vraiment l'exactitude et la fiabilité au premier rang de vos priorités, alors cette exigence stricte est évidemment une bonne chose.
D'un autre point de vue, un nouveau langage qui ne change pas la méthode de programmation peut-il être appelé un nouveau langage ? Et lorsque nous utilisons d'autres langages, Rust nous apprend à penser en toute sécurité, ce qui est tout aussi important.
Si les gens choisissent Rust, c'est souvent en raison de la conception garantie qu'il offre : sécurité sur les pointeurs nuls/courses de données, comportement d'exécution prévisible et contrôle complet sur le matériel. Si cela n'a pas de sens pour vous, il n'est vraiment pas nécessaire d'utiliser Rust. Après tout, il y a un prix derrière ces avantages : il est difficile de se lancer. Vous devez briser les mauvaises habitudes et maîtriser de nouveaux concepts. Au début, tout le monde sera torturé à mort par le vérificateur d'emprunt.
— Matthieu Endler
La difficulté réelle de démarrer avec le modèle de programmation Rust peut ** dépendre des autres langages que vous avez utilisés auparavant **. Les programmeurs Python ou Ruby pourraient trouver Rust trop restrictif, mais d'autres pourraient trouver la clarté et les contraintes non ambiguës agréables.
Si vous êtes un programmeur C ou C++ et que vous avez passé des semaines à chercher des bogues de sécurité mémoire dans le langage, vous allez adorer Rust. Donc "combattre le vérificateur d'emprunt" devient "est-ce encore possible avec un compilateur ? Cool !"
— Grzegorz Nosek
Augmenter
Les programmes serveur d'aujourd'hui contiennent des dizaines de millions de lignes de code, écrites par des centaines de programmeurs, et sont mis à jour presque tous les jours. En termes de conception et de développement, Go prend pleinement en compte la nécessité d'améliorer l'efficacité du travail dans un tel environnement. Les considérations de conception pour Go incluent une gestion stricte des dépendances, l'adaptabilité de l'architecture logicielle à mesure que le système se développe et la robustesse au-delà des limites des composants. —Rob Pike
Lorsque vous résolvez un problème seul ou en petite équipe, le choix d'un langage simple ou d'un langage riche est purement une question de préférence personnelle. Cependant, avec l'expansion de l'échelle logicielle, la complexité et l'expansion de l'équipe, les différences entre les deux langages ont commencé à vraiment émerger.
Pour les grandes applications et les systèmes distribués, la vitesse d'exécution du code est souvent moins importante que la vitesse de développement : un langage comme Go qui met délibérément l'accent sur le lean design peut réduire le temps d'adaptation des nouveaux développeurs et leur permettre de participer plus rapidement Pour contribuer à de grandes bases de code.
En utilisant le langage GO, il est souvent plus facile pour les développeurs juniors d'être productifs, mais il est plus difficile pour les développeurs intermédiaires d'introduire des abstractions complexes et donc de poser des problèmes. En raison de cette caractéristique, Rust a tendance à être moins attrayant que Go dans le monde du développement de logiciels d'entreprise.
— Loris Cro
La clarté et la lisibilité sont toujours plus importantes que l'élégance lorsqu'il s'agit de développement de logiciels à grande échelle. ** Les limitations de Go le rendent en fait plus adaptable aux besoins des entreprises et des grandes organisations que des langages plus complexes et puissants tels que Rust. **
Rouille contre Go : Différences
Bien que Rust et Go soient des langages modernes populaires et largement utilisés, ils ne sont pas vraiment concurrents car ils ciblent sans doute des cas d'utilisation complètement différents **.
Toute l'approche de la programmation en Go est complètement différente de Rust, et ces fonctionnalités conviennent particulièrement à certaines personnes, mais peuvent en revanche complètement irriter les autres. Ce qui est logique, car si Rust et Go résolvent tous les deux fondamentalement les mêmes problèmes de manière fondamentalement similaire, pourquoi avons-nous besoin de deux langages distincts ?
Alors, peut-on partir des approches adoptées par Rust and Go et interpréter leurs essences respectives ? Essayons ensemble.
collecte des ordures
« Ramasser les ordures ou ne pas ramasser les ordures » est toujours une question sans bonne réponse. En général, la récupération de place et la gestion automatique de la mémoire peuvent nous aider à développer rapidement et facilement des programmes fiables et efficaces. Donc, pour certains développeurs, ce sont des fonctionnalités essentielles.
D'autres soutiennent que la récupération de place, avec sa surcharge de performances et ses pauses globales, peut entraîner un comportement d'exécution imprévisible et introduire une latence inacceptable. Bien sûr, il y a du vrai dans cette affirmation.
Go et Rust sont deux langages très différents. Bien que les deux puissent être simplement décrits comme un langage système ou un substitut du C, leurs objectifs et leurs scénarios d'application, leurs styles de conception de langage et leurs priorités de fonction sont en effet très différents. La collecte des ordures est un différenciateur majeur. La récupération de place dans Go rend le langage plus simple, plus petit et plus facile à comprendre. Rust n'a pas de ramasse-miettes, ce qui le rend extrêmement rapide (cela convient particulièrement aux développeurs qui ont besoin non seulement d'un débit élevé, mais également d'une faible latence), et réalise également une série de fonctions et de modèles de programmation que Go ne peut pas du tout faire ( At moins sans sacrifier les performances).
— PingCAP
proche du matériel
L'histoire de la programmation informatique peut être considérée comme un processus de développement abstrait de plus en plus complexe. Il permet aux programmeurs de résoudre des problèmes sans prêter trop d'attention au fonctionnement réel du matériel sous-jacent. Cette conception rend les programmes plus faciles à écrire et plus portables. Mais pour d'autres programmes, l'accès au matériel et un contrôle précis sur la façon dont le programme s'exécute sont plus importants.
**L'objectif de Rust est de permettre aux programmeurs de "se rapprocher du matériel" et de reprendre plus de contrôle ; tandis que Go fait abstraction des détails architecturaux, permettant aux programmeurs de se rapprocher du problème. **
Les deux langues ont des domaines d'application différents. Go est bon pour écrire des microservices et des tâches "DevOps" typiques, mais ce n'est pas un langage de programmation système. Rust est plus fort dans les tâches qui mettent l'accent sur la simultanéité, la sécurité et/ou les performances, et a une courbe d'apprentissage plus abrupte que Go.
— Matthieu Endler
La performance d'abord
En fait, pour la plupart des programmes, les performances sont moins importantes que la lisibilité du code. Mais si certains projets accordent vraiment la priorité aux performances, il existe de nombreux compromis de conception dans Rust qui vous aideront à pousser la vitesse d'exécution de votre code jusqu'à la limite. **
En revanche, Go se soucie davantage de la simplicité du code et est même prêt à sacrifier certaines performances d'exécution pour cela. Mais la vitesse de construction de Go est sans précédent, ce qui est souvent encore plus important pour les projets de code à grande échelle.
Rust fonctionne plus vite que Go. Dans les benchmarks, Rust est en effet plus rapide, dans certains cas d'un ordre de grandeur. Mais avant de choisir Rust, soyez clair : Go n'est pas loin derrière dans la plupart des benchmarks, et il conserve toujours un avantage en termes de performances par rapport à des langages comme Java, C#, Java et Python.
Si vous avez besoin de performances de premier ordre, vous pouvez choisir l'une de ces deux langues, et les performances de vitesse ne vous décevront jamais. De plus, si vous créez un service Web qui gère des charges de haute intensité et nécessite une mise à l'échelle verticale/horizontale flexible, les deux langages peuvent également répondre à vos besoins.
— Andrew Lader
** Exactitude **
D'autre part, si vous ne forcez pas le programme à ne jamais se tromper, les compromis seront différents. La plupart des codes ne sont pas conçus pour une utilisation à long terme, mais certains programmes fonctionnent en production pendant des années. Face à ces réalités, il peut être utile d'investir un peu plus de temps pour développer et s'assurer que le programme fonctionne correctement et de manière fiable sans encourir une lourde charge de maintenance à l'avenir.
Go et Rust vous aident à écrire des programmes corrects, mais de différentes manières : ** Go fournit un excellent cadre de test intégré, tandis que Rust se concentre sur l'élimination des bogues d'exécution grâce à des vérificateurs d'emprunt. **
Mon opinion est la suivante : pour du code qui doit être publié demain, utilisez Go ; si c'est du code qui doit fonctionner de manière stable dans les cinq prochaines années, alors choisissez Rust.
— Grzegorz Nosek
Bien que Go et Rust soient tous deux assez bons pour des projets de développement sérieux, il est préférable de bien comprendre leurs diverses fonctionnalités et avantages. En bref, peu importe ce que les autres pensent : **Vous seul pouvez décider quel langage de programmation est le plus adapté aux besoins de votre équipe et de votre projet. **
Si vous souhaitez accélérer le développement, disons que vous avez de nombreux services différents à écrire, ou que l'équipe de développement elle-même est importante, alors le langage Go est définitivement la bonne réponse. Go accorde une attention particulière à la conception pour la simultanéité et tient à repérer les comportements d'accès mémoire non sécurisés (comme le fait Rust), mais ne vous oblige pas à gérer chaque détail individuellement.
Go est rapide et puissant, mais à la base, il aide les développeurs à s'éloigner et à se concentrer sur la simplicité et l'unité. D'un autre côté, si vous avez besoin de presser chaque once de marge de performance, Rust est idéal.
—Andrew Lader
Conclusion J'espère que cet article pourra vous aider à comprendre les points forts respectifs de Rust et Go. Si possible, vous feriez mieux d'expérimenter un peu ces deux langages, car ils sont très utiles dans n'importe quel chemin technique, même pour les amateurs de programmation.
Mais si vous ne consacrez votre temps qu'à étudier sérieusement une langue, veuillez assurez-vous de l'expertise et des inclinations respectives de Go et Rust avant de faire votre choix.
Bien sûr, la connaissance des langages de programmation n'est qu'une petite partie de ce qui fait le succès d'un ingénieur logiciel. En plus de la programmation, les ingénieurs doivent maîtriser la conception, l'ingénierie, l'architecture, la communication et la collaboration. Tant que tout le monde peut bien faire les choses suivantes, quel que soit le langage de programmation que vous choisissez, vous deviendrez un excellent maître en génie logiciel.
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
Rust VS Go, quel langage les développeurs devraient-ils choisir en 2023 ?
Source : InfoQ
En 2023, nous avons mille raisons d'apprendre Rust.
Le 7 août, la Fondation Rust a publié les résultats du rapport d'enquête Rust 2022. Le rapport montre que le taux d'adoption de Rust continue d'augmenter. Plus de 90 % des répondants à l'enquête ont indiqué qu'ils sont des utilisateurs de Rust ; Rust est utilisé pour le majorité des travaux de codage en , soit une augmentation significative de 51,8 % par rapport à l'année précédente.
Il ne fait aucun doute que Rust devient de plus en plus au centre des préoccupations des développeurs avec ses excellentes performances en matière de sécurité de la mémoire et de simultanéité. Cependant, il est également difficile d'ignorer Go, un joueur relativement "vétéran" qui a été sélectionné une fois comme langage de programmation de l'année.
Né en 2009, le langage Go a suscité une grande attention depuis son modèle de concurrence unique et ses puissants avantages en termes de performances. Il est à noter que, comme le langage Rust, le créateur du langage Go "déteste" également le C++, et Go est également le langage dominant du cloud natif.
Dans l'enquête développeur Stack Overflow 2022, parmi les 70 000 réponses à la question "un langage de programmation qui fait aimer et détester", les programmeurs préfèrent évidemment Rust, 86% d'entre eux disent aimer Rust, et 64% disent aimer Go. Face au statut brûlant de Rust, certains développeurs se sont interrogés : est-ce que Go vaut encore la peine d'être appris en 2023 ?
De plus, au cours des deux derniers jours, choisir Rust ou Go est également devenu un sujet brûlant sur Hacker News :
Un internaute qui soutient Rust a déclaré: "Ce choix m'a également troublé pendant longtemps. Au final, Rust a gagné. D'abord, je sens que Rust est plus proche des choses de l'ère Pascal précédente, et vous pouvez tout contrôler. ; deuxièmement, si wasm et les technologies associées sont une grande épidémie, Rust serait un choix plus sûr ; alors, nous avons déjà Python pour un développement rapide, il est donc logique de choisir quelque chose d'un peu plus extrême, et Go est quelque peu au milieu. Enfin, Rust devrait être utilisé pour le Core et le haut profil, il est donc peu probable qu'il soit éliminé."
Un autre développeur qui n'était pas d'accord a déclaré : "Je développe en Go depuis près de dix ans, mais récemment, j'ai également essayé Rust. Je pense qu'il existe actuellement une préférence obligatoire et trompeuse pour Rust, d'après mon expérience dans From expérience dans diverses startups, y compris mon actuel, Go est de loin le meilleur choix pour le développement backend ! Remarque, performances, fonctionnalités ou autre... les deux langages sont très, très similaires ! "
Je dois dire que Go et Rust sont sans aucun doute d'excellents langages de programmation. Ils sont modernes, puissants, polyvalents et offrent d'excellentes performances. Mais cela n'a vraiment aucun sens de comparer directement Go et Rust, qui est meilleur, car chaque langage de programmation représente une série de compromis profonds derrière lui. Différentes langues seront optimisées pour différents besoins, donc lorsque nous choisissons une langue, nous devons également considérer le type de problèmes que nous voulons l'utiliser pour résoudre. Nous partirons donc des scénarios applicables des langages Go et Rust, et discuterons de la "voie" de la conception de Go et Rust.
Bien que Rust et Go diffèrent considérablement par leur syntaxe et leur style, les deux sont des outils de premier ordre pour la création de logiciels. Commençons l'analyse spécifique ci-dessous.
Go contre Rust : Similitudes
Rust et Go ont beaucoup en commun, c'est pourquoi les gens comparent souvent les deux. Quels objectifs ont-ils en commun ?
et:
Sécurité de la mémoire
Go et Rust font tous deux partie des langages de programmation modernes qui mettent l'accent sur la sécurité de la mémoire. Au cours des décennies de développement d'anciens langages comme C et C++, il est devenu évident que l'une des principales causes d'erreurs et de bogues est l'accès non sécurisé/incorrect à la mémoire.
Ainsi, Rust et Go ont chacun donné des solutions différentes, mais l'objectif des deux est d'être plus intelligent et plus sûr en termes de gestion de la mémoire, et d'aider les développeurs à écrire des programmes corrects avec d'excellentes performances.
Exécutable rapide et compact
Les deux sont des langages compilés, ce qui signifie que les programmes peuvent être traduits directement en code machine exécutable, de sorte que les programmes peuvent être déployés sous la forme d'un seul fichier binaire. Contrairement aux langages interprétés comme Python et Ruby, nous n'avons pas besoin d'expédier un interpréteur et beaucoup de bibliothèques/dépendances avec le programme. En tant que reflet direct de cette force fondamentale, les programmes Rust and Go ont tendance à s'exécuter plus rapidement que les langages interprétés.
Langage à usage général
Rust et Go sont des langages de programmation polyvalents puissants et extensibles que vous pouvez utiliser pour développer toutes sortes de logiciels modernes, des applications Web aux microservices distribués, aux microcontrôleurs intégrés, aux applications mobiles, etc. **Les deux disposent d'excellentes bibliothèques standard et d'écosystèmes tiers florissants, ainsi que d'un support commercial solide et d'une large base d'utilisateurs. ** Les deux existent depuis des années et continueront de prospérer dans les années à venir. Apprendre Go ou Rust serait un investissement de temps et d'énergie très raisonnable de nos jours.
Style de programmation pragmatique
Ce ne sont pas non plus des langages trop fonctionnels (comme Scala ou Elixir), ni entièrement orientés objet (comme Java et C#). Au contraire, bien que Go et Rust aient tous deux les fonctions de programmation fonctionnelle et orientée objet, ils mettent toujours l'accent sur l'orientation pragmatique, c'est-à-dire résolvent le problème de la manière la plus appropriée, plutôt que de forcer tout le monde à utiliser un méthode spécifique par « idéologie », manière de faire les choses. ** Mais si vous aimez vraiment le style de programmation fonctionnel, il existe d'autres options d'outils connexes du côté de Rust, ce qui est l'un des avantages de Rust over Go. **
Développement massif
Rust et Go fournissent tous deux de nombreuses fonctionnalités utiles pour la programmation à grande échelle, de sorte qu'ils peuvent tous deux s'adapter aux besoins réels des grandes équipes de développement et des grandes bases de code. ** Par exemple, les programmeurs C ont débattu pendant des années sur l'endroit où mettre les parenthèses et si le code devait être indenté avec des tabulations ou des espaces ; mais Rust et Go utilisent déjà des outils de formatage standard (Go a gofmt, Rust It est rustfmt) résolvent complètement ces problèmes problèmes. Ils réécrivent automatiquement votre code en utilisant un style conforme.
Ce n'est pas que ce format particulier soit subtil, mais **Les programmeurs Rust and Go sont plus pragmatiques et préfèrent choisir une norme d'implémentation uniforme. **
Un autre gros avantage de ces deux langages se reflète dans le pipeline de construction. Les deux ont d'excellents outils de gestion de construction et de dépendance standard intégrés et performants. Cela signifie que les programmeurs n'ont pas à faire face à des systèmes de construction tiers complexes, ni à apprendre un nouveau système toutes les quelques années.
** Rouille ou part ? **
Après avoir parlé de tant de problèmes et du fait que les deux langages sont si bien conçus et puissants, y a-t-il un résultat dans ce concours ? Ou, puisque les deux sont d'excellentes options, pourquoi les gens sont-ils toujours indignés sur les réseaux sociaux, en écrivant de longs articles de blog commentés disant "Rust est pour les idiots" ou "Go n'est pas du tout un langage de programmation".
Bien sûr, certaines personnes veulent juste évacuer leurs émotions, mais cela n'aide évidemment pas à résoudre le problème réel. Au moins lorsqu'il s'agit de savoir quelle langue utiliser dans un projet, ou quelle langue utiliser pour percer dans le monde de la programmation, les voix fortes n'aident évidemment pas à faire le bon choix.
Revenons à la discussion sur les adultes et voyons comment Rust et Go ont des forces et des faiblesses dans le cadre d'une analyse rationnelle.
Go contre Rust : performances
Comme mentionné précédemment, les programmes générés par Go et Rust sont tous deux rapides car ils sont compilés en code machine natif sans passer par un interpréteur ou une machine virtuelle. Mais les performances de Rust sont encore meilleures, voire comparables à C et C++, qui sont connus comme les références de performance de l'industrie. Et contrairement à ces langages à l'ancienne, Rust fournit également des mécanismes de sécurité de la mémoire et de la concurrence, tout en n'affectant guère la vitesse d'exécution. Rust permet également aux développeurs de créer des abstractions complexes sans encourir de pénalité de performances lors de l'exécution.
En revanche, Bien que les performances des programmes Go soient également bonnes, la conception se concentre principalement sur la vitesse de développement (y compris la compilation), plutôt que sur le degré d'exécution. Les programmeurs Go préfèrent un code clair et lisible, donc la vitesse d'exécution est un peu plus lente.
Le compilateur Go ne passe pas non plus beaucoup de temps à générer le code machine le plus efficace, il se préoccupe davantage de compiler rapidement de grandes quantités de code. ** Ainsi, dans les benchmarks d'exécution, c'est souvent le programme Rust qui submerge le programme Go. **
Les performances d'exécution de Rust sont également très cohérentes et prévisibles car il n'utilise pas de récupération de place. Le ramasse-miettes de Go est très efficace et optimisé pour maintenir les temps de pause aussi courts que possible (les temps de pause deviennent plus courts à chaque version de Go). Mais quoi qu'il en soit, le ramasse-miettes introduit toujours une certaine imprévisibilité dans le comportement du programme, et cela peut être grave, voire totalement inacceptable pour certaines applications (telles que les systèmes embarqués).
Parce que l'objectif de Rust est de donner au programmeur un contrôle complet sur le matériel sous-jacent, **Les programmes Rust peuvent être profondément optimisés pour se rapprocher des performances théoriques maximales de la machine. ** Cela fait de Rust le meilleur choix pour certains cas d'utilisation où la vitesse d'exécution l'emporte sur tout le reste, comme la programmation de jeux, les noyaux de système d'exploitation, les composants de navigateur Web et les systèmes de contrôle en temps réel.
Peu importe la puissance d'un langage de programmation s'il est trop difficile à apprendre et exclut la plupart des gens. Go semble être délibérément conçu pour se distinguer des langages de complexité croissante comme le C++ : **Il a très peu de syntaxe, très peu de mots-clés, et même pas beaucoup de fonctions. **
Cela signifie que le langage Go est facile à apprendre et que vous pouvez écrire divers programmes avec lui après un peu de compréhension.
Le point clé ici est "simplicité" trois mots. Bien sûr, simple ne veut pas dire facile. Mais une langue petite et simple est certainement plus facile à apprendre qu'une langue grande et complexe. Il n'y a pas beaucoup de façons d'obtenir un effet, donc le code Go de haute qualité a presque toujours le même aspect. Cela a un autre avantage : nous pouvons rapidement comprendre ce que fait un service avec lequel nous ne sommes pas familiers.
** L'ontologie de base de Go est petite, mais la bibliothèque standard est très puissante. ** C'est-à-dire qu'en plus de la syntaxe Go, notre courbe d'apprentissage doit également prendre en compte cette partie de la bibliothèque standard.
D'autre part, le transfert de fonctions du langage vers la bibliothèque standard signifie que chacun n'a qu'à se concentrer sur l'apprentissage des bibliothèques liées aux besoins de développement actuels. ** Go est également conçu en tenant pleinement compte des besoins du développement logiciel à grande échelle et peut fortement prendre en charge de grandes bases de code et équipes de développement. **Dans ce type de scénario, les nouveaux développeurs doivent pouvoir démarrer rapidement. À cette fin, la communauté Go a toujours privilégié la simplicité, la clarté, la polyvalence et la directivité des programmes.
**Rust est spécifiquement conçu pour inclure une variété de fonctionnalités puissantes et utiles qui aident les programmeurs à faire plus avec moins de code. **Par exemple, la fonction match de Rust permet d'écrire rapidement une logique flexible et expressive :
Mais aussi parce que Rust a beaucoup de considérations de conception, il est plus difficile à apprendre, surtout au stade initial. Mais ce n'est pas grave, C++ ou Java a beaucoup à apprendre après tout, et il n'offre même pas les fonctionnalités avancées de Rust comme la sécurité de la mémoire. Il est donc vraiment déraisonnable de critiquer le son trop compliqué de Rust : il est conçu pour mettre l'accent sur l'expression et la richesse des fonctions, on ne peut pas s'attendre à ce qu'il soit aussi simple et pur tout en profitant des avantages. Alors bien sûr, Rust a sa propre courbe d'apprentissage. Mais tant que cette difficulté sera surmontée, il y aura un chemin sans heurt devant nous.
** Bien que Rust et Go s'empruntent mutuellement certaines fonctionnalités (telles que les génériques), il est juste de dire que les fonctionnalités de Rust sont toujours supérieures et que les fonctionnalités de Go font relativement défaut. **
La plupart des langages offrent une forme de prise en charge de la programmation simultanée (c'est-à-dire l'exécution de plusieurs opérations en même temps), mais Go a été conçu pour cela dès le départ. ** Go n'utilise pas les threads du système d'exploitation, mais fournit une alternative légère : les goroutines. **Chaque goroutine est une fonction Go s'exécutant indépendamment que le planificateur Go mappe à l'un des threads du système d'exploitation sous contrôle. Autrement dit, le planificateur peut gérer très efficacement un grand nombre de goroutines simultanées, tout en n'utilisant qu'un nombre limité de threads du système d'exploitation.
Par conséquent, nous pouvons exécuter des millions de goroutines simultanées dans un seul programme sans nous soucier de causer de graves problèmes de performances. Pour cette raison, **Go est une solution complète pour les scénarios d'applications simultanées à grande échelle tels que les serveurs Web et les microservices. **
Go propose également des canaux pour les goroutines, un moyen rapide, sûr et efficace de communiquer et de partager des données. Le niveau de conception de la simultanéité de Go est en effet très élevé et l'expérience d'utilisation est assez détendue et agréable.
En général, la conception de programmes concurrents est très difficile et la construction de programmes concurrents fiables et corrects dans n'importe quel langage n'est en aucun cas facile. Cependant, puisque cette exigence a été prise en compte au début du projet, le mécanisme de programmation concurrente en Go a été rendu aussi simple que possible et bien intégré.
En revanche, le mécanisme de concurrence dans Rust vient d'atterrir et n'a pas encore été stabilisé, donc tout le monde est invité à continuer à prêter attention à cette direction de développement active. Ceci est également bénéfique.Par exemple, la bibliothèque rayon de Rust fournit une méthode très élégante et légère qui peut convertir des calculs séquentiels en calculs parallèles.
Bien qu'il ne soit pas facile d'implémenter des programmes concurrents dans Rust, cela reste parfaitement faisable, et ** ces programmes bénéficient également des garanties de sécurité de la mémoire soigneusement conçues par Rust. **Prenez l'exemple de la classe Mutex de la bibliothèque standard : en Go, on peut oublier d'acquérir le mutex avant d'accéder à quelque chose ; mais en Rust, il n'y a pas besoin de s'en soucier du tout.
Comme mentionné précédemment, Go et Rust ont leurs propres moyens d'éviter diverses erreurs de programmation courantes, en particulier les problèmes liés à la gestion de la mémoire. Mais **Rust va plus loin, on peut dire qu'il ne ménage pas ses efforts pour s'assurer que tout le monde ne commette pas de fautes de sécurité inattendues. **
Cela dit, l'expérience de programmation dans Rust est différente de celle de presque tous les autres langages, et ** peut être assez difficile ** lors de sa première introduction. Mais aux yeux de nombreux développeurs, cet effort en vaut clairement la peine.
De nombreux langages, y compris Go, fournissent également des outils pour aider les programmeurs à éviter les erreurs, mais Rust porte cet effet à un nouveau niveau. De nombreux programmes incorrects ne se compilent même pas du tout.
"Combattre le vérificateur d'emprunt" est un must pour les nouveaux venus de Rust, mais pour la plupart, le vérificateur n'est pas vraiment l'ennemi. Les problèmes qu'il trouve sont en effet de vrais bugs (ou du moins des bugs potentiels) dans le code. ** Cela peut nous obliger à refactoriser fondamentalement nos programmes pour éviter de tels problèmes ** - Si vous placez vraiment l'exactitude et la fiabilité au premier rang de vos priorités, alors cette exigence stricte est évidemment une bonne chose.
D'un autre point de vue, un nouveau langage qui ne change pas la méthode de programmation peut-il être appelé un nouveau langage ? Et lorsque nous utilisons d'autres langages, Rust nous apprend à penser en toute sécurité, ce qui est tout aussi important.
La difficulté réelle de démarrer avec le modèle de programmation Rust peut ** dépendre des autres langages que vous avez utilisés auparavant **. Les programmeurs Python ou Ruby pourraient trouver Rust trop restrictif, mais d'autres pourraient trouver la clarté et les contraintes non ambiguës agréables.
Lorsque vous résolvez un problème seul ou en petite équipe, le choix d'un langage simple ou d'un langage riche est purement une question de préférence personnelle. Cependant, avec l'expansion de l'échelle logicielle, la complexité et l'expansion de l'équipe, les différences entre les deux langages ont commencé à vraiment émerger.
Pour les grandes applications et les systèmes distribués, la vitesse d'exécution du code est souvent moins importante que la vitesse de développement : un langage comme Go qui met délibérément l'accent sur le lean design peut réduire le temps d'adaptation des nouveaux développeurs et leur permettre de participer plus rapidement Pour contribuer à de grandes bases de code.
La clarté et la lisibilité sont toujours plus importantes que l'élégance lorsqu'il s'agit de développement de logiciels à grande échelle. ** Les limitations de Go le rendent en fait plus adaptable aux besoins des entreprises et des grandes organisations que des langages plus complexes et puissants tels que Rust. **
Rouille contre Go : Différences
Bien que Rust et Go soient des langages modernes populaires et largement utilisés, ils ne sont pas vraiment concurrents car ils ciblent sans doute des cas d'utilisation complètement différents **.
Toute l'approche de la programmation en Go est complètement différente de Rust, et ces fonctionnalités conviennent particulièrement à certaines personnes, mais peuvent en revanche complètement irriter les autres. Ce qui est logique, car si Rust et Go résolvent tous les deux fondamentalement les mêmes problèmes de manière fondamentalement similaire, pourquoi avons-nous besoin de deux langages distincts ?
Alors, peut-on partir des approches adoptées par Rust and Go et interpréter leurs essences respectives ? Essayons ensemble.
« Ramasser les ordures ou ne pas ramasser les ordures » est toujours une question sans bonne réponse. En général, la récupération de place et la gestion automatique de la mémoire peuvent nous aider à développer rapidement et facilement des programmes fiables et efficaces. Donc, pour certains développeurs, ce sont des fonctionnalités essentielles.
D'autres soutiennent que la récupération de place, avec sa surcharge de performances et ses pauses globales, peut entraîner un comportement d'exécution imprévisible et introduire une latence inacceptable. Bien sûr, il y a du vrai dans cette affirmation.
L'histoire de la programmation informatique peut être considérée comme un processus de développement abstrait de plus en plus complexe. Il permet aux programmeurs de résoudre des problèmes sans prêter trop d'attention au fonctionnement réel du matériel sous-jacent. Cette conception rend les programmes plus faciles à écrire et plus portables. Mais pour d'autres programmes, l'accès au matériel et un contrôle précis sur la façon dont le programme s'exécute sont plus importants.
**L'objectif de Rust est de permettre aux programmeurs de "se rapprocher du matériel" et de reprendre plus de contrôle ; tandis que Go fait abstraction des détails architecturaux, permettant aux programmeurs de se rapprocher du problème. **
En fait, pour la plupart des programmes, les performances sont moins importantes que la lisibilité du code. Mais si certains projets accordent vraiment la priorité aux performances, il existe de nombreux compromis de conception dans Rust qui vous aideront à pousser la vitesse d'exécution de votre code jusqu'à la limite. **
En revanche, Go se soucie davantage de la simplicité du code et est même prêt à sacrifier certaines performances d'exécution pour cela. Mais la vitesse de construction de Go est sans précédent, ce qui est souvent encore plus important pour les projets de code à grande échelle.
D'autre part, si vous ne forcez pas le programme à ne jamais se tromper, les compromis seront différents. La plupart des codes ne sont pas conçus pour une utilisation à long terme, mais certains programmes fonctionnent en production pendant des années. Face à ces réalités, il peut être utile d'investir un peu plus de temps pour développer et s'assurer que le programme fonctionne correctement et de manière fiable sans encourir une lourde charge de maintenance à l'avenir.
Go et Rust vous aident à écrire des programmes corrects, mais de différentes manières : ** Go fournit un excellent cadre de test intégré, tandis que Rust se concentre sur l'élimination des bogues d'exécution grâce à des vérificateurs d'emprunt. **
Bien que Go et Rust soient tous deux assez bons pour des projets de développement sérieux, il est préférable de bien comprendre leurs diverses fonctionnalités et avantages. En bref, peu importe ce que les autres pensent : **Vous seul pouvez décider quel langage de programmation est le plus adapté aux besoins de votre équipe et de votre projet. **
Conclusion J'espère que cet article pourra vous aider à comprendre les points forts respectifs de Rust et Go. Si possible, vous feriez mieux d'expérimenter un peu ces deux langages, car ils sont très utiles dans n'importe quel chemin technique, même pour les amateurs de programmation.
Mais si vous ne consacrez votre temps qu'à étudier sérieusement une langue, veuillez assurez-vous de l'expertise et des inclinations respectives de Go et Rust avant de faire votre choix.
Bien sûr, la connaissance des langages de programmation n'est qu'une petite partie de ce qui fait le succès d'un ingénieur logiciel. En plus de la programmation, les ingénieurs doivent maîtriser la conception, l'ingénierie, l'architecture, la communication et la collaboration. Tant que tout le monde peut bien faire les choses suivantes, quel que soit le langage de programmation que vous choisissez, vous deviendrez un excellent maître en génie logiciel.