Article de reference

Cython

{{cite web |url=https://www.behnel.de/cythonEP2008/cython-ep2008.html |type=28 July 2007: official Cython launch |title=The Cython Compiler for C-Extensions in Python |last=Behn...

sur-ensemble du langage de programmation Python , qui permet aux développeurs d'écrire du code Python (avec des extensions de syntaxe optionnelles inspirées du C) qui offre des performances comparables à celles du C .

Cython est un langage compilé généralement utilisé pour générer des modules d'extension CPython . Le code annoté, de type Python, est compilé en C puis automatiquement encapsulé dans du code d'interface , produisant ainsi des modules d'extension qui peuvent être chargés et utilisés par du code Python standard grâce à l'instruction `import`, avec une surcharge de calcul considérablement réduite à l' exécution . Cython facilite également l'encapsulation de code C ou C++ indépendant dans des modules importables par Python.

Cython est écrit en Python et en C et fonctionne sous Windows , macOS et Linux . Il produit des fichiers sources C compatibles avec CPython 2.6, 2.7 et 3.3 et versions ultérieures. Le code source Cython compilé en C peut utiliser la syntaxe Python 2 ou Python 3. La syntaxe Python 2 est utilisée par défaut dans Cython 0.x et la syntaxe Python 3 dans Cython 3.x. Ce comportement par défaut peut être modifié (par exemple, dans un commentaire du code source) pour utiliser la syntaxe Python 3 (ou 2). La syntaxe Python 3 ayant évolué récemment, Cython peut ne pas être compatible avec les dernières nouveautés. Cython offre une prise en charge native de la majeure partie du langage C++ et compile la quasi-totalité du code Python existant.

Cython 3.0.0 a été publié le 17 juillet 2023.

interface de fonction étrangère pour appeler des routines C / C++ et la possibilité de déclarer le type statique des paramètres et des résultats des sous-routines, des variables locales et des attributs de classe.

Un programme Cython implémentant le même algorithme qu'un programme Python correspondant peut consommer moins de ressources de calcul, telles que la mémoire et les cycles de traitement, en raison des différences entre les modèles d'exécution de CPython et de Cython. Un programme Python de base est chargé et exécuté par la machine virtuelle CPython ; par conséquent, l'environnement d'exécution et le programme lui-même consomment des ressources de calcul. Un programme Cython est compilé en code C, puis en code machine ; la machine virtuelle n'est donc utilisée que brièvement lors du chargement du programme.

Cython utilise :

  • Optimisations optimistes
  • Inférence de type (optionnel)
  • Faibles coûts liés aux structures de contrôle
  • Faible surcharge liée aux appels de fonction

Les performances dépendent à la fois du code C généré par Cython et de la manière dont ce code est compilé par le compilateur C.

Histoire

Cython est un dérivé du langage Pyrex , mais il offre davantage de fonctionnalités et d'optimisations. Cython a été créé à partir de Pyrex en 2007 par les développeurs du logiciel de calcul formel Sage . Insatisfaits des limitations de Pyrex, ils n'arrivaient pas à faire accepter leurs correctifs par Greg Ewing, le mainteneur de Pyrex, dont la vision pour son outil était bien plus restreinte que celle des développeurs de Sage. Ils ont alors créé une branche de Pyrex, SageX. Constatant que certains utilisateurs téléchargeaient Sage uniquement pour obtenir SageX, et que des développeurs d'autres logiciels (dont Stefan Behnel, qui maintient la bibliothèque XML un typage dynamique , en Cython, les types peuvent être spécifiés de manière optionnelle, ce qui permet d'améliorer les performances et de convertir les boucles en boucles C lorsque cela est possible. Par exemple :

1000: kmax = 1000 k = 0 n = 2 while k < kmax: i = 0 while i < k and n % p[i] != 0: i = i + 1 if i == k: p[k] = n k = k + 1 result.append(n) n = n + 1 return result "
# L'argument sera converti en int ou lèvera une exception TypeError. def primes ( int kmax ):# Ces variables sont déclarées avec des types C. cdef int n , k , i# Autre cdef de type C int p [1000]# Un résultat de type Python = []si kmax > 1000 : kmax = 1000k = 0 n = 2tant que k < kmax : i = 0tant que i < k et n % p [ i ] != 0 : i = i + 1si i == k : p [ k ] = n k = k + 1 résultat . ajouter ( n )n = n + 1résultat de retour

Exemples

Bonjour le monde en Cython

Un exemple de programme « Hello World » pour Cython est plus complexe que dans la plupart des langages, car il interagit avec l’API C de Python et/ setuptoolsou d’autres outils de développement d’extensions conformes à la norme )

Ces commandes permettent de compiler et de lancer le programme :

Une manière plus simple de commencer avec Cython est d'utiliser IPython en ligne de commande (ou la console Python intégrée au navigateur appelée Jupyter Notebook ) :

Guido van Rossum . À noter en particulier :

  • Le système de calcul formel SageMath , logiciel libre, dépend de Cython, à la fois pour ses performances et pour l'interface avec d'autres bibliothèques.
  • Des parties importantes des bibliothèques de calcul scientifique SciPy , pandas et scikit-learn sont écrites en Cython.

Le domaine d'application de Cython ne se limite pas au calcul numérique. Par exemple, la boîte à outils XML ZeroMQ . Cython peut également servir au développement de programmes parallèles pour les machines à processeurs multicœurs ; cette fonctionnalité exploite la bibliothèque OpenMP .