Maison développement back-end Golang De la rouille pour les Gophers

De la rouille pour les Gophers

Jul 19, 2024 pm 02:08 PM

Rust for Gophers

Lire l'article original sur packagemain.tech

Devez-vous rouiller ou devriez-vous partir ? Quelle langue est la meilleure, et cette question a-t-elle un sens ? Parlons de Go contre Rust en 2024, avec notre invité spécial, John Arundel. John est l'auteur de For the Love of Go, Cloud Native DevOps with Kubernetes et de nombreux autres livres. Il enseigne également Go et Rust, il sera donc intéressant d’entendre son point de vue. Voici l’interview !

John, il semble que nous entendons de plus en plus parler de Rust ces jours-ci. Pouvez-vous nous faire une brève introduction ? À quoi sert Rust et pourquoi existe-t-il ?

Bien sûr, c’est facile. Rust est un langage pour contrôler les ascenseurs.

Vous plaisantez ?

Pas du tout. Graydon Hoare, le créateur de Rust, a été frustré lorsque les ascenseurs de son immeuble tombaient en panne à cause de problèmes logiciels. Il s’est dit : « Nous pouvons sûrement faire mieux que ça ! » Et le reste appartient à l'histoire.

Nous ne pouvons pas prévenir tous les bugs, mais nous pouvons au moins utiliser un langage de programmation qui élimine certaines grandes catégories de bugs, tels que les débordements de tampon, les courses de données et les problèmes d'« utilisation après utilisation gratuite ». Ainsi, dès le début, Rust s'est concentré sur la création de logiciels fiables, en automatisant de nombreuses vérifications de sécurité que les bons programmeurs effectuent de toute façon et en aidant à détecter les erreurs avant qu'elles n'atteignent la production.

Cela semble être une bonne idée, mais j'ai l'impression que Rust est un langage difficile à apprendre, surtout comparé à Go. Est-ce juste, et si oui, pourquoi ?

Go et Rust tentent tous deux, de différentes manières, de résoudre le même problème : il est difficile d'écrire des logiciels à grande échelle dans des langages traditionnels comme le C et le C++, car les programmeurs doivent être très expérimentés et compétents pour éviter de commettre des erreurs. Même les experts peuvent faire des erreurs de temps en temps, et il faut beaucoup de temps pour former des programmeurs pour devenir des experts.

Go s'attaque à ce problème en simplifiant radicalement le langage : comparé à quelque chose comme le C++, il a beaucoup moins de syntaxe à apprendre. Ainsi, les programmeurs peuvent passer leur temps à apprendre à bien écrire des programmes, plutôt que de maîtriser un langage volumineux et complexe. Go est simple, mais efficace.

Pour utiliser une analogie, il est plus facile d’apprendre à conduire un tracteur que de piloter un vaisseau spatial. Le tracteur est peut-être une machine humble et pragmatique, mais il fait parfaitement son travail, et c'est en fait un meilleur choix que le vaisseau spatial pour de nombreuses tâches : labourer un champ, par exemple.

J’aime votre analogie. Je suppose que Rust est le vaisseau spatial ?

Oui, Rust est grand, compliqué et puissant, combinant bon nombre des meilleures idées des langages impératifs traditionnels comme C avec des concepts de programmation fonctionnelle empruntés à des langages comme Haskell et Lisp.

Il y a plus à apprendre dans Rust que dans Go, mais il en fait plus ! Si vous souhaitez vous rendre sur Mars, un vaisseau spatial est un meilleur choix qu'un tracteur. Bien sûr, il faut un peu plus de temps pour former un astronaute que pour former un conducteur de tracteur.

Go intègre un système de collecte des déchets, ce qui est idéal pour la simplicité. Comment fonctionne la gestion de la mémoire dans Rust, et est-ce un gros défi à apprendre ?

Oui, le garbage collection signifie que vous n’avez pas à vous soucier de l’allocation et de la libération de mémoire vous-même, comme vous le faites dans des langages comme C++. Cela facilite la programmation et élimine toutes sortes de bugs liés à la mémoire. D'un autre côté, vous avez besoin d'un runtime relativement complexe et le garbage collection affecte les performances.

Rust adopte une approche différente. Il récupère automatiquement la mémoire, mais sans avoir à mettre le programme en pause. Il peut le faire en gardant une trace de toutes les références existantes à une donnée particulière. Lorsqu'aucune partie du programme ne peut plus faire référence aux données, Rust sait qu'un peu de mémoire peut être immédiatement recyclé en toute sécurité.

Oui, j'ai entendu dire que Rust se concentre fortement sur la propriété et l'emprunt. Comment ces concepts se comparent-ils au travail avec des pointeurs dans Go, et quelles sont les bonnes façons de les comprendre ?

Eh bien, j'ai une bonne nouvelle : si vous êtes déjà habitué aux pointeurs dans Go, alors les références dans Rust fonctionnent fondamentalement de la même manière, mais en plus sûr. Si vous créez une référence mutable à une variable, cela fonctionne comme un pointeur Go : vous pouvez la transmettre à une fonction ou la stocker quelque part.

Mais, contrairement à Go, tant que cette référence mutable existe, elle a un accès exclusif aux données : personne d'autre ne peut la modifier, ni même la lire. En termes Go, c’est comme avoir un verrouillage mutex automatique. Et lorsqu'une fonction n'a pas besoin de modifier les données, elle peut à la place emprunter une référence partagée, qui est en lecture seule, et plusieurs d'entre elles peuvent exister en même temps.

Rust garde également une trace des données d'origine : lorsqu'elles sortent du champ d'application, toute référence à celles-ci n'est plus valide. Ainsi, le compilateur peut détecter de nombreux types de bogues de pointeur en suspens lorsque vous essayez d'utiliser une référence à une valeur qui n'existe plus. Cela se traduit par un comportement indéfini, ce qui est une belle façon de dire que quelque chose d’horrible va se produire, et une partie de la proposition de valeur de Rust est « aucun comportement indéfini, jamais ».

Dans Rust, nous devons donc trouver un moyen d'écrire nos programmes de manière à ce que les références aux données soient toujours valides et qu'une seule référence mutable existe à la fois. Il faut un certain temps pour s'y habituer (les programmeurs de Rust appellent cela « combattre le vérificateur d'emprunt »), mais les programmes qui en résultent sont plus fiables et plus susceptibles d'être corrects.

Par exemple, tous les programmeurs Go sont familiers avec les courses aux données, où deux goroutines ou plus tentent d'accéder à certaines données partagées en même temps, avec des résultats imprévisibles : au mieux, le programme plantera, et au pire, il continuera. avec des données corrompues ou invalides.

Dans Rust, un programme comme celui-ci ne se compilera pas ! Les règles de propriété et de référence signifient que deux références mutables à la même chose ne peuvent pas exister simultanément. Il vous suffit de résoudre le problème d'une manière différente.

Cela nous amène parfaitement à la concurrence. J'aime les fonctionnalités de concurrence de Go avec les canaux et les goroutines. Comment Rust gère-t-il la concurrence et existe-t-il des similitudes que je peux tirer de mon expérience Go ?

Oui, les goroutines et les canaux sont géniaux : une abstraction de tâches ultra légère et très bon marché par rapport au multithreading traditionnel. D’un autre côté, Go ne nous donne que les éléments de base : à nous de veiller à les utiliser en toute sécurité, en évitant les courses aux données ou les blocages. Et cela peut être difficile à faire !

Rust n'a pas de goroutines, mais il a des tâches asynchrones, qui ressemblent beaucoup à des goroutines, uniquement avec les garanties de sécurité habituelles de Rust. Il existe également d'excellents frameworks tiers tels que Tokio et Rayon qui peuvent simplement prendre un tas de données et déterminer automatiquement le moyen le plus efficace de les traiter en parallèle.

Ainsi, même si les programmes simultanés seront toujours difficiles à bien écrire, si vous pouvez le faire dans Go, vous constaterez que ces compétences se transfèrent également bien vers Rust.

J'aime apprendre par la pratique. Y a-t-il de bons exercices ou projets pratiques que vous recommanderiez à un programmeur Go qui débute avec Rust, comme le Tour of Go, par exemple ?

Rustlings est un excellent point de départ : il s'agit d'une série d'exercices interactifs en petits morceaux qui vous guident à travers tous les principes fondamentaux du langage. Si vous souhaitez obtenir les commentaires d'un véritable humain, consultez la piste Rust sur Exercism. Il existe également Rust by Exemple, qui est une formidable ressource pour des extraits d’exemples fonctionnels.

On dirait que vous êtes fan des deux langues. Lequel préférez-vous, et recommanderiez-vous à quelqu'un qui connaît déjà Go d'essayer également d'apprendre Rust ?

Oui, Go et Rust font chacun appel à différentes parties de mon cerveau. J'aime la simplicité radicale et le pragmatisme de Go : il fait beaucoup avec très peu et résout plutôt bien la plupart des problèmes.

Rust, en revanche, comble parfaitement les lacunes où Go n'est pas un choix idéal : noyaux, micrologiciels, appareils embarqués et applications critiques pour la sécurité telles que les dispositifs médicaux, l'industrie, l'aérospatiale, etc.

Et les ascenseurs, bien sûr.

Naturellement ! J’aime donc cet aspect de Rust, et c’est aussi un langage vraiment amusant et expressif. Je pense que cela vaut la peine que chacun prenne le temps de jouer avec Rust et de s'y tenir suffisamment longtemps pour surmonter la méconnaissance initiale de la syntaxe et les difficultés avec le vérificateur d'emprunt.

Même si vous décidez que Rust n'est pas pour vous, vous apprendrez de nouvelles façons intéressantes de réfléchir aux problèmes, et cela vous aidera également à mieux comprendre les différents compromis que fait Go.

D'un point de vue professionnel, Go et Rust seront des compétences très précieuses dans un avenir prévisible. Je pense que très bientôt, au lieu de « Go contre Rust », nous parlerons de « Go et Rust contre tout le reste ».

John, merci d'être notre invité et de nous donner votre point de vue sur Go et Rust. Où les gens peuvent-ils en savoir plus sur vous, par exemple s'ils sont intéressés par vos livres ou vos formations ?

C'est avec plaisir ! Visitez mon site Web à l'adresse bitfieldconsulting.com si vous souhaitez en savoir plus ou contactez-nous, je me ferai un plaisir de discuter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1673
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Golang vs Python: performance et évolutivité Golang vs Python: performance et évolutivité Apr 19, 2025 am 12:18 AM

Golang est meilleur que Python en termes de performances et d'évolutivité. 1) Les caractéristiques de type compilation de Golang et le modèle de concurrence efficace le font bien fonctionner dans des scénarios de concurrence élevés. 2) Python, en tant que langue interprétée, s'exécute lentement, mais peut optimiser les performances via des outils tels que Cython.

Golang et C: concurrence vs vitesse brute Golang et C: concurrence vs vitesse brute Apr 21, 2025 am 12:16 AM

Golang est meilleur que C en concurrence, tandis que C est meilleur que Golang en vitesse brute. 1) Golang obtient une concurrence efficace par le goroutine et le canal, ce qui convient à la gestion d'un grand nombre de tâches simultanées. 2) C Grâce à l'optimisation du compilateur et à la bibliothèque standard, il offre des performances élevées près du matériel, adaptées aux applications qui nécessitent une optimisation extrême.

Partage avec Go: un guide du débutant Partage avec Go: un guide du débutant Apr 26, 2025 am 12:21 AM

GOISIDEALFORBEGINNERNERS et combinant pour pourcloudandNetWorkServicesDuetOtssimplicity, Efficiency, andCurrencyFeatures.1) InstallgofromTheofficialwebsiteandverifywith'goversion'..2)

Golang vs C: Performance et comparaison de la vitesse Golang vs C: Performance et comparaison de la vitesse Apr 21, 2025 am 12:13 AM

Golang convient au développement rapide et aux scénarios simultanés, et C convient aux scénarios où des performances extrêmes et un contrôle de bas niveau sont nécessaires. 1) Golang améliore les performances grâce à des mécanismes de collecte et de concurrence des ordures, et convient au développement de services Web à haute concurrence. 2) C réalise les performances ultimes grâce à la gestion manuelle de la mémoire et à l'optimisation du compilateur, et convient au développement du système intégré.

Golang vs Python: différences et similitudes clés Golang vs Python: différences et similitudes clés Apr 17, 2025 am 12:15 AM

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

Golang et C: les compromis en performance Golang et C: les compromis en performance Apr 17, 2025 am 12:18 AM

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

La course de performance: Golang vs C La course de performance: Golang vs C Apr 16, 2025 am 12:07 AM

Golang et C ont chacun leurs propres avantages dans les compétitions de performance: 1) Golang convient à une concurrence élevée et à un développement rapide, et 2) C fournit des performances plus élevées et un contrôle fin. La sélection doit être basée sur les exigences du projet et la pile de technologie d'équipe.

Golang contre Python: les avantages et les inconvénients Golang contre Python: les avantages et les inconvénients Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalableSystemsDuetoitSefficiency and Concurrency, tandis que les Implicites de l'Indrecosystem et le Golang'sDesignenCourageSlecElNCORES

See all articles