Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Web Scraping
15 mars 2024

Remplacez le langage C ! De nombreux développeurs Python rejoignent l'équipe Rust

À l'avenir, de plus en plus de bibliothèques utiliseront Python comme frontal (améliorant l'efficacité de la programmation) et Rust comme back-end (améliorant les performances).

python

Rust remplace C comme « backend » pour les packages Python hautes performances. Quelle est la raison derrière cela?

Tout d’abord, considérons la motivation. Python est facile à écrire, mais présente le problème d'une vitesse d'exécution lente. Je ne peux surtout pas écrire de bibliothèques de traitement de données car Python est très lent et il est difficile d'écrire des bibliothèques hautes performances en Python pur. Cependant, Python est le langage principal pour l’apprentissage automatique et l’ingénierie des données. Ainsi, lorsque vous essayez d'écrire une bibliothèque pour les ingénieurs de données ou les ingénieurs en apprentissage automatique, vous rencontrez les problèmes suivants :

Bien que nous devions écrire des API en Python, les tâches de traitement de données hautes performances ne peuvent pas être effectuées uniquement en Python.
Cela signifie que vous disposez des options suivantes pour écrire une bibliothèque :

Soit vous apprenez et utilisez le C, soit quelqu'un d'autre apprend le C, écrit une bibliothèque et vous comptez sur cette bibliothèque pour pouvoir effectuer des opérations de bas niveau.
Une personne familière avec le langage C pourrait demander : « Y a-t-il quelque chose qui ne va pas avec cela ? De nombreux auteurs de bibliothèques peuvent sous-traiter leurs calculs numériques à NumPy ou SciPy. Vous pourriez penser : « Je peux apprendre ».

Toutefois, la situation n’est pas si idéale. Il est pratique de sous-traiter certaines tâches à des bibliothèques comme NumPy, SciPy, etc., mais cela nécessite que toutes les fonctions soient vectorisées et vous ne pouvez pas écrire votre code dans une boucle for. Vous devez également vous inquiéter du blocage de certaines opérations par le Global Interpreter Lock (GIL), et il existe divers autres problèmes. Tout ce que vous voulez faire ne peut pas être facilement trouvé dans une bibliothèque déjà existante.

Il existe donc une autre méthode. Que diriez-vous d'écrire une bibliothèque à partir de zéro en C et d'ajouter ensuite les liaisons Python ? Cependant, si vous avez une formation Python, écrire du code de bas niveau en C semble de très bas niveau et apprendre le langage demande des efforts. Déréférencements de pointeurs nuls, débordements de tampon, fuites de mémoire… ce sont des pièges que l’on peut rencontrer lors de l’utilisation du langage C, et qui ne sont pas familiers aux programmeurs qui apprennent Python pour la première fois.

Serait-ce formidable s’il existait un langage aussi rapide et efficace en mémoire que le C, mais ne nécessitant pas de gestion manuelle de la mémoire ni de garbage collection ? Ce serait bien si le langage disposait d'un bon support des outils Python et d'une communauté de développeurs en constante expansion.


Rust

Rust est rapide et dispose d'une gestion efficace de la mémoire. Par conséquent, la programmation concurrente et parallèle devient plus facile. Rust dispose d'excellents outils, d'un compilateur convivial et d'une communauté de développeurs vaste et active. Rust rend vos programmes plus rapides et vous permet de vous faire plus d'amis tout en apprenant.

Plus important encore, Rust est plus facile à apprendre que le C pour les développeurs Python.

Il améliore l’expérience du « premier niveau » et permet aux débutants d’écrire plus facilement du code « sûr ». La courbe d'apprentissage est plus fluide, vous permettant de maîtriser progressivement des fonctionnalités linguistiques plus avancées au fil du temps.

Par conséquent, au cours des dernières années, de plus en plus de bibliothèques hautes performances choisissent Python comme front-end et Rust comme back-end. exemple:

Lance : une base de données vectorielles hautes performances et à faible coût.
Les fondateurs Chang She et Lei Xu ont initialement écrit des bibliothèques de code en C++, mais ont décidé de passer à Rust lorsqu'ils n'avaient plus besoin de travailler avec CMake. Voici pourquoi Chang a pris cette décision.

« La décision de passer du C++ à Rust était due au fait que je pouvais travailler plus efficacement, sans perdre en performances, et que je n'avais pas à gérer CMake. J'ai essentiellement commencé à apprendre Rust à partir de zéro, et pendant que je l'apprenais, Lei et moi avons J'ai réécrit environ 4 mois de code C++ dans Rust, et chaque fois que nous écrivons et publions une nouvelle fonctionnalité dans Rust, nous devenons plus sûrs que nous n'obtiendrons pas d'erreur de segmentation à chaque fois que nous exécutons une autre commande. Je n’ai pas à m’inquiéter que cela se produise.

Non seulement Rust est bien adapté au traitement des données, mais il peut également servir de backend pour de nombreux autres packages Python ayant des exigences de performances élevées.

Pydantic : Une bibliothèque de vérification Python pour les développeurs.
L'équipe Pydantic a réécrit la deuxième version dans Rust et a constaté une amélioration des performances 20 fois supérieure, même pour les modèles simples. Outre l’amélioration des performances, Rust présente plusieurs autres avantages. Le fondateur de Pydantic, Samuel Colvin, cite plusieurs avantages.

« Une autre particularité de Rust est qu'en plus de sa rapidité, le code écrit en Rust est généralement plus facile à utiliser et à maintenir. En particulier, Rust détecte et gère toutes les erreurs possibles. , et le système de types Python (et TypeScript) a tendance à ignorer ces erreurs, donc je ne suis pas sûr quelles exceptions peuvent être déclenchées dans quelles situations lors de l'appel de « foobar() », je n'en ai aucune idée. Fondamentalement, je dois essayer de manière itérative pour trouver d’éventuels échecs.

Combiner Python et Rust

À l’avenir, de plus en plus de bibliothèques utiliseront Python comme front-end et Rust comme back-end. Dans l’ensemble, les développeurs Python ont aujourd’hui une approche meilleure et plus fluide pour créer des bibliothèques hautes performances.

Publicité
Publicité
Commentaires
Publicité
Archives
Publicité