Fermer

avril 10, 2022

Vous pensiez aimer Python ? Attendez de rencontrer Rust


"La technologie du passé vient sauver l'avenir de lui-même." C'est ainsi que Graydon Hoare, le créateur de Rust,décrit ce qu'il veut atteindre.

C'est l'une des principales caractéristiques de Rust : utiliser des technologies bien connues du monde universitaire mais rarement implémentées dans les langages de programmation contemporains. Des technologies anciennes, fiables et parfois oubliées. Mais qui, surtout, fonctionnent extrêmement bien.

Ces technologies sont utilisées principalement pour une chose : la sécurité.

Ça semble ennuyeux? Ce n'est pas le cas, si vous demandez à la communauté. UN87% des développeurs Rust aiment ce langageau-dessus de tous les autres, ce qui en fait le langage le plus apprécié depuis 2016 selon l'enquête auprès des développeurs StackOverflow de cette année.

On pourrait penser que les développeurs de logiciels sont parmi les humains les plus innovants de cette planète. La rouille, cependant, est l'exact opposé du mantra "avancer vite et casser les choses". Néanmoins, les développeurs Rust sont presque assurés d'apprendre des concepts dont ils n'ont jamais entendu parler auparavant.

De la nouveauté de la programmation système pour certains développeurs aux types de données algébriques à la propre approche de Rust en matière de sécurité de la mémoire : chaque développeur peut trouver quelque chose de nouveau et d'incroyablement utile à apprendre. Etil y a plus de raisonstomber amoureux de Rust.

Plus de sécurité mémoire sans récupération de place

L'un des défis de chaque langage de programmation est de gérer la mémoire d'un ordinateur de manière sûre et efficace. Python, par exemple, a un ramasse-miettes qui recherche constamment la mémoire non utilisée et la nettoie pendant que le programme s'exécute.

Dans d'autres langages, comme C et C++, le programmeur doit explicitement allouer et libérer de la mémoire au fur et à mesure. Étant donné que tous les problèmes liés à la mémoire sont donc résolus avant l'exécution du programme, cette approche est bien meilleure pour optimiser les performances.

D'un autre côté, la mémoire est une autre chose à laquelle les développeurs doivent constamment penser. C'est l'une des raisons pour lesquelles il faut beaucoup plus de temps pour écrire un programme en C qu'en Python, même s'il fait la même chose au bout du compte.

Rust utilise une méthode alternative : la mémoire est allouée via un système de propriété au moment de la compilation. C'est un hack astucieux pour s'assurer que les données inutilisées sont nettoyées sans forcer le programmeur à penser à allouer et à libérer de la mémoire tout le temps.

Fondamentalement, la propriété est un ensemble de troisrègles:

  1. Chaque valeur dans Rust a une variable appelée propriétaire.
  2. Il ne peut y avoir qu'un seul propriétaire à la fois.
  3. Lorsque le propriétaire sort de la portée, la valeur est supprimée, libérant ainsi de la mémoire.

Un exemple simple consiste à assigner un vecteur dans Rust :

Dans la deuxième ligne, le vecteur[1, 2, 3] avec le propriétaire a est créé. Après cela, b devient le propriétaire du vecteur. Puisque le propriétaire correct est appelé dans l'instruction print, ce programme compile et renvoie le résultat attendu lorsqu'il est exécuté :

D'autre part, vous pouvez essayer d'appeler le vecteur avec son ancien propriétaire, A, comme ceci :

Dans ce cas, le compilateur génère une erreur car a a déjà été supprimé dans la troisième ligne. Il y abeaucoup plus de profondeurau sujet, mais c'est l'idée de base.

En comparaison, Python fonctionnerait dans le second cas. Son ramasse-miettes ne laisserait tomber A qu'après le dernier appel, ce qui est bien pour le développeur mais pas si bien en termes d'espace mémoire.

En C, les choses seraient un peu plus compliquées : il faudrait allouer de l'espace mémoire pour a, puis le pointer sur le vecteur, puis allouer plus d'espace mémoire pour B, pointer B vers A, et enfin libérer l'espace occupé par A et B lorsque vous avez terminé.

En ce sens, l'approche de Rust à la mémoire est un compromis entre vitesse de développement et performance. Bien qu'il ne soit pas aussi facile à écrire que Python, ce n'est pas aussi maladroit que C une fois que vous avez compris le concept de propriété.

En revanche, l'efficacité est assez étonnante : l'équipe de développeurs de Tilde, par exemple, a réussi à rréduire leur utilisation de la mémoire de 90 %après avoir réécrit certains morceaux JavaHTTP dans Rust.

Saisie statique sans devenir moche

C'est presque une guerre de religion entre les fans de typage dynamique contre le typage statique. Bien qu'il soit beaucoup plus facile de produire des logiciels dans des langages avec typage dynamique, le code peut devenir assez rapidement impossible à maintenir. C'est l'une des raisons pour lesquelles le code Python peut être assez difficile à maintenir, par rapport au C par exemple.

D'un autre côté, devoir déclarer le type de chaque variable à la manière du C peut devenir assez ennuyeux. Si vous avez déjà essayé d'utiliser un[double]dans une fonction qui renvoie un[float]tapez C, vous voyez ce que je veux dire.

Rust va à mi-chemin : c'est un système de type statique, mais il nécessite seulement que le programmeur spécifie des types de niveau supérieur comme des arguments de fonction et des constantes. Dans les corps de fonction, l'inférence de type de style Python est autorisée.

Une fonctionnalité particulièrement utile de Rust est qu'il a également un type None. Cela vous permet de gérer les exceptions au moment de la compilation afin que le programme soit assuré de fonctionner correctement chez l'utilisateur final. Considérez cet exemple, où nous pouvons obtenir le nom complet d'une personne, qu'elle ait un deuxième prénom ou non :

Bien que des versions de la solution de contournement None existent également dans d'autres langues, elle présente l'ambition de Rust d'une manière soignée : ne pas rendre les choses trop difficiles à écrire tout en gardant le code aussi durable et maintenable que possible.

Alors que Python est un langage de programmation à usage général, Rust est, comme C, résolument destiné à la programmation système. Bien que Rust ne soit pas le langage idéal si vous créez une application pour votre utilisateur final, il est parfait pour créer des logiciels qui fournissent des services à d'autres logiciels.

Une approche astucieuse de la programmation système

En tant que tel, l'efficacité est au cœur de Rust. Cela est mieux démontré par des abstractions à coût nul, qui interprètent le code tout en minimisant l'utilisation de la mémoire. Comme Bjarne Stroustrup, l'inventeur du C++,le met : « Ce que vous n'utilisez pas, vous ne le payez pas. Et plus loin : ce que vous utilisez, vous ne pourriez pas coder mieux. »

Par exemple, envisagez d'ajouter tous les nombres entiers jusqu'à 1 000 en Python :

Cela fait 1 000 itérations et ajouts à chaque exécution du code – et vous pouvez imaginer à quel point cela peut ralentir le code. En revanche, considérez la même chose dans Rust :

Cela compile jusqu'à la constante 499500. En effet, l'utilisation de la mémoire vient d'être réduite d'un facteur 1 000.

Bien que ces abstractions existent également en C, Rust en fait un usage intensif – en fait, l'un des objectifs est d'ajouter autant d'abstractions à coût nul que possible au langage. En ce sens, Rust est un peu comme le C de niveau supérieur.

C existe depuis plus de 40 ans et Rust vise à faire de même. Rust accorde une telle importance à la rétrocompatibilité que vous pouvez toujours exécuter du code dans Rust 1.0 aujourd'hui. De même, si vous écrivez du code Rust aujourd'hui, vous devriez toujours pouvoir l'exécuter dans vingt ans. La rouille ne rouillera pas !

Une petite mais incroyable communauté

Avec son accent sur la sécurité et la durabilité et tous ses détails astucieux qui en parlent, il n'est pas étonnant queDropbox a réécrit une grande partie de sa structure de base à Rust. Mozilla, le premier grand sponsor de Rust, aécrit des parties vitales de Firefox dedans . Microsoft juge C et C++n'est plus sûr pour les logiciels critiqueset investit de plus en plus dans Rust.

Et ce ne sont pas seulement les grandes entreprises – l'amour pour Rust se traduit par le programmeur individuel. Même si seulement cinq pour cent des répondants à l'enquête de StackOverflow utilisent Rust jusqu'à présent, ces développeurs sont extrêmement enthousiastes à propos du langage.

Et il y a des raisons à cela. Non seulement la spécification du langage et le compilateur sont très bien pensés. Il y a rustup pour installer et gérer les chaînes d'outils. Il y a Cargo, un outil de ligne de commande fourni avec chaque installation de Rust et qui aide à gérer les dépendances, à exécuter des tests et à générer de la documentation.

Il y acaisses.io où les utilisateurs peuvent partager et découvrir des bibliothèques, et docs.rs où elles sont documentées. Il y apeluches du compilateur de Clippyetformatage automatique depuis rustfmt.

Au-delà de cela, il existe des chats officiels et non officiels, des sous-reddits, des forums d'utilisateurs, des questions StackOverflow et des conférences partout dans le monde. Avec c.a.communauté qui place la convivialité avant touty a-t-il autre chose à demander ?

Le bémol : la nécessité de courir avant de savoir marcher

La seule chose qui décourage à propos de Rust est le coût de démarrage élevé. Alors que vous auriez besoin d'un ou deux jours pour être productif dans la plupart des langues, cela ressemble plus à une ou deux semaines dans Rust.

Cela est dû aux nombreux nouveaux concepts que les autres langages n'utilisent pas et au fait qu'il y a généralement beaucoup d'erreurs au moment de la compilation. Vous devez gérer toutes les exceptions dès le premier jour et ne pouvez pas simplement écrire un code de travail qui s'exécute et ajouter des exceptions plus tard, comme vous le feriez en Python.

De plus, puisque Rust est encore assez nouveau, toutes les bibliothèques que vous pourriez souhaiter ne sont pas encore là. Hormis la documentation officielle et diverses questions sur StackOverflow, il n'y a pas non plus beaucoup de tutoriels.

La bonne nouvelle est qu'une fois que vous avez appris les concepts et que votre programme a été compilé, il fonctionne comme un charme. De plus, cela devrait encore fonctionner dans vingt ans compte tenu de la rétrocompatibilité.

Compte tenu de la durabilité de votre code et du fait que Rust est soutenu par un certain nombre de grandes entreprises, une ou deux semaines d'apprentissage initial pourraient bien en valoir la peine, malgré les inconvénients.

L'essentiel : pirater sans peur

La rouille est plus que la sécurité . Mais il est difficile de nier que bon nombre de ses concepts de base visent à éliminer les fuites de mémoire et autres problèmes de sécurité. Et à une époque où le logiciel est tout, la sécurité est un must.

Il y a probablement un espace pour chaque langue à venir :Allerpeuple de plus en plus l'espace de Python et Java,Julia s'attaque à Python en science des données , et Rust se développe dans le domaine de Python et C++. Ce qui rend Rust spécial, c'est son incroyable communauté, ses fonctionnalités innovantes et le fait qu'il est conçu pour fonctionner pendant des décennies.

Il y a encore beaucoup de travail à faire , et seule une fraction de cela peut et sera effectuée dans Rust. Les nouvelles langues d'aujourd'hui ont de fortes chances de perdurer un certain temps, même si d'autres langues émergeront également dans les prochaines années. Mais si je devais miser sur une seule langue, Rust serait une valeur sûre.

Lecture complémentaire :

Python est nul en termes d'efficacité énergétique – littéralement

Déplacez-vous sur Python – Rust est le langage de programmation le mieux payé de 2021

Cet article a été écrit par Ari Jouryet a été initialement publié le Vers la science des données . Tu peuxlis le ici.




Source link