Cython – Wikipedia

before-content-x4

Cython
Paradigmes: multiparié
Année de publication: 28 juillet 2007
Développeur: Robert Bradshaw, Stefan Behnel, et al.
Version actuelle 0,29,33 [d’abord] (5 janvier 2023)
Dactylographie: Strong, statique, dynamique (“type de canard”)
Influencé par: Python, 100, 100 ++
Système opérateur: Système Linux, type Unix, Microsoft Windows [2] , macOS [2]
Licence: Licence Apache, version 2.0 [3] , Licence Apache [4]
cython.org

Cython est un langage de programmation universel qui est largement compatible avec Python. Comme cela, elle prend en charge divers paradigmes de programmation tels que la programmation orientée vers l’objet, orientée vers l’aspect et fonctionnel. Cependant, le principal avantage est la traduction dans la cible C, qui permet à la fois une performance élevée par rapport à l’interpréteur Python standard, ainsi qu’une interaction directe avec le code externe qui est écrit en C, C ++ ou FORTRAN.

after-content-x4

Les principaux domaines d’application sont la connexion des bibliothèques externes à l’interpréteur CPYTHON, ainsi que l’accélération du code Python. Le compilateur Cython peut également être utilisé pour compiler les modules python purs.

Le code généré n’est pas autosuffisant, mais a besoin d’un environnement d’exécution compatible CPYTHON. La génération de modules binaires (“module d’extension”) est pris en charge, qui dynamiquement sur le importer -Incapse dans l’interpréteur Python peut être chargé, ainsi que l’intégration gauche de l’interpréteur CPYthon dans le module généré, de sorte qu’un programme exécutable est créé ( Intégration ).

Cython est basé sur Pyrex de Greg Ewing (première publication le 4 avril 2002 [5] ). En juillet 2007, le compilateur Cython a été séparé par Robert Bradshaw et Stefan Behnel en tant que projet indépendant et ouvertement développé de Pyrex. Depuis lors, des tentatives ont été faites pour maintenir les deux compilateurs largement compatibles, bien que Cython ait utilisé des optimisations significativement supplémentaires et atteint une compatibilité plus élevée avec le code Python. Des différences importantes avec Pyrex sont décrites dans la documentation du cython.

Le nom Cython Est un mot de valise des deux langages de programmation sous-jacents: Python et C.

Le projet Cython s’est fixé l’objectif de développer un compilateur pour le code Python normal, [6] qui offre les performances les plus élevées possibles et une intégration étendue avec le code, qui est écrit en C, C ++ et FORTRAN par le typage statique supplémentaire (explicite).

Cython est un compilateur d’optimisation, mais pas au bon sens d’un compilateur qui crée du code binaire. Au contraire, la traduction en code C permet de laisser de nombreuses optimisations et ajustements de plate-forme de base à un compilateur C. Le compilateur Cython peut se limiter aux optimisations de haut niveau au niveau AST.

Le code C, que le cython génère, est largement portable en termes de plates-formes (processeur, compilateur C et système d’exploitation) et des versions CPYTHON. Actuellement (version 0.28.5) Les versions CPYTHON 2.6 et 2.7 et toutes de 3,3 sont prises en charge. Les plates-formes testées incluent MacOS, Windows et, surtout, diverses distributions Linux, avec des versions système 32 bits et 64 bits.

after-content-x4

La combinaison de Python et C permet à Cython de cartographier une très large gamme d’exigences. Il est possible pour une programmation de haut niveau avec des types de données Python, des constructions de langage et une gestion automatique de la mémoire, ainsi que une programmation très C-Close avec les types de données C, les fonctions C et la gestion de la mémoire manuelle. Les deux peuvent être combinés comme souhaité et l’interaction avec le code Python pur (non compilé) est tout aussi native que l’interaction avec le code C ou C ++, ce qui permet une procédure très fine lors de l’optimisation du code cython. Toutes les parties du code peuvent être écrites en python pur, compilées avec Cython, optimisées avec des types de données statiques ou même portées selon C, selon l’exigence. En conséquence, Cython soutient très bien le principe selon lequel la majeure partie de l’exécution d’un programme est créée dans une très petite partie du texte source, c’est-à-dire que l’optimisation d’une petite partie du programme peut apporter un très grand gain de performances, tandis que dans la plus grande partie du code, une vitesse de développement élevée et un faible entretien sont plus importants que la plus grande vitesse d’exécution possible.

Le langage de programmation réalise l’intégration du langage entre Python et C avant tout via les types de données. Diverses constructions de langage Python peuvent être appliquées à la fois aux types de données Python et aux types de données C. Un exemple est la boucle ‘for’ qui est une boucle foreach dans Python, c’est-à-dire exécuter n’importe quel conteneur itérable (par exemple, listes ou fichiers). Dans Cython, cette boucle peut également fonctionner via des listes C ++, des arrailles C et des tableaux partiels, ainsi que via des sections de pointeur (tranches [7] , z. B. PTR [2: 8] pour les décalages 2 à 7). De plus, il existe une conversion automatique entre différents types de données Python et les types de données C, à la fois pour les types d’échelle (nombres) ainsi que dans les chaînes de caractères et les types de données structurés (par exemple, les types de structures C et les dictionnaires Python).

Bon nombre des optimisations selon lesquelles le compilateur Cython effectue automatiquement une spécialisation des codes C générés. À cette fin, le compilateur utilise des déclarations de type statique explicites et une police (simple) pour créer du code C spécialisé pour les types de données utilisés et certains modèles de code. Une grande partie des optimisations du compilateur Cython fait référence aux boucles, car une grande partie du terme total s’accumule généralement ici.

Les structures de contrôle (en particulier le broyage) sont traduites avec Cython et un compilateur C plusieurs fois plus rapidement que si elles sont interprétées par Cpython. [8] Cela est dû aux optimisations optimistes et à l’inférence du type. En conséquence, le code Python compilé par cython s’exécute généralement plus rapidement que dans cpython 2.6.x même sans déclarations de type explicite, bien que les performances relatives dépendent naturellement du code respectif. Cependant, la déclaration statique des types de données et la spécialisation qui en résulte du COD C peut généralement être accélérée plusieurs fois. En particulier avec les calculs mathématiques, les améliorations des termes entraînent souvent une centaine à mille. [9] En comparaison, l’accélération typique du compilateur Python-Jit PSYCO est d’environ quatre à cent fois, [dix] Pour Pypy dans des cas sélectionnés jusqu’à douze toit. [11]

Le code généré par Cython pour les fonctions est optimisé pour déballer rapidement et convertir les paramètres d’appel. Par conséquent, un appel python du code nativable à travers un wrapper cython est généralement plus rapide que dans les autres implémentations de wrapper pour Python. [douzième] [13]

Les domaines d’application les plus importants du cython sont la connexion des bibliothèques externes à l’interprète CPYthon, ainsi que l’accélération du code Python, en particulier dans les calculs mathématiques et les algorithmes arithmétiques.

Par exemple, le système d’albums informatiques de Sagemath est largement basé sur le code cython. Cela sert à implémenter des algorithmes mathématiques, ainsi qu’à connecter des codes externes en C, C ++ et Fortran. Cython soutient également une interaction très efficace avec les matrices Numpy, ce qui est très simplifié à ce sujet.

La bibliothèque XML haute performance LXML est largement implémentée dans Cython. Les bibliothèques C externes libxml2 et libxslt sont connectées à l’interpréteur Python.

Un autre exemple de l’environnement des développeurs Cython Core est la bibliothèque MPI MPI4PY. Il connecte diverses implémentations MPI à CPython.

Dans l’index Python Package, il existe une courte liste d’autres bibliothèques implémentées dans Cython. [14]

  • Pyrex – prédécesseur de cython
  • L’environnement à terme Cpython à terme dévié à aval; Basé sur LLVM
  • Framework PyP-Jit-Compiler et environnement d’exécution Python qui est écrit dans un dialecte Python (RPYTHON)
  • Compilateur JIT et optimiseur de code spécialisés PSYCO pour l’environnement d’exécution CPYTHON
  • Langage du langage de programmation de type Python Skin Skin Skin, compilé selon C ++
  1. github.com .
  2. un b Docs.cython.org .
  3. github.com . (consulté le 2 février 2020).
  4. Cython: C-Extensions pour Python . (consulté le 8 juillet 2018).
  5. Versions originales du prédécesseur Pyrex
  6. La compatibilité avec Python 2 est un objectif déclaré pour le futur cython version 1.0 ( Mémento des Originaux à partir du 10 août 2011 dans Archives Internet ) Info: Le lien d’archive a été utilisé automatiquement et non encore vérifié. Veuillez vérifier le lien d’origine et d’archiver en fonction des instructions, puis supprimez cette note. @d’abord @ 2 Vorlage: webachiv / iabot / wiki.cython.org
  7. Tranches sur docs.python.org, consulté le 2 août 2018
  8. gmane.comp.python.cython.devel-pybench Comparaison par Cython et Cpython 2.6.2
  9. gmane.comp.python.cython.devel – Passer un pointeur de Python ( Mémento des Originaux à partir du 14 février 2017 Archives Internet ) Info: Le lien d’archive a été utilisé automatiquement et non encore vérifié. Veuillez vérifier le lien d’origine et d’archiver en fonction des instructions, puis supprimez cette note. @d’abord @ 2 Modèle: webachiv / iabot / thread.gmane.org
  10. PSYCO – Introduction
  11. Vitesse de PYPY 1.4 par rapport à Cpython 2.6.2 avec / sans PSYCO
  12. C ++ – Benchmarks Wrapper pour divers générateurs de wrapper Python (sans cython) ( Mémento des Originaux à partir du 4 avril 2015 Archives Internet ) Info: Le lien d’archive a été utilisé automatiquement et non encore vérifié. Veuillez vérifier le lien d’origine et d’archiver en fonction des instructions, puis supprimez cette note. @d’abord @ 2 Modèle: webachiv / iabot / télécom.inscporto.pt
  13. C ++ – Benchmarks wrapper pour Cython, boost.python et pybindgen
  14. Liste des packages Python implémentés dans Cython sur PYPI
after-content-x4