De la rouille pour les 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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds











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 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.

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

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 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.

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.

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.

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