www.wikidata.de-de.nina.az
Cython ist eine universelle Programmiersprache die weitgehend mit Python kompatibel ist Wie diese unterstutzt sie verschiedene Programmierparadigmen wie objektorientierte aspektorientierte und funktionale Programmierung Der Hauptvorteil liegt jedoch in der Ubersetzung in die Zielsprache C was sowohl eine hohe Performance im Vergleich zum Standard Python Interpreter erlaubt als auch eine direkte Interaktion mit externem Code ermoglicht der in C C oder Fortran geschrieben ist CythonParadigmen multiparadigmatischErscheinungsjahr 28 Juli 2007Entwickler Robert Bradshaw Stefan Behnel et al Aktuelle Version 3 0 5 1 30 Oktober 2023 Typisierung stark statisch dynamisch Duck Typing Beeinflusst von Python C C Betriebssystem Linux Unix ahnliches System Microsoft Windows 2 macOS 2 Lizenz Apache Lizenz Version 2 0 3 Apache Lizenz 4 cython orgHaupteinsatzgebiete sind die Anbindung von externen Bibliotheken an den CPython Interpreter sowie die Beschleunigung von Python Code Der Cython Compiler kann auch zur Kompilierung reiner Python Module verwendet werden Der generierte Code ist nicht autark sondern benotigt eine CPython kompatible Laufzeitumgebung Dabei wird sowohl die Generierung von Binarmodulen Extension Modul unterstutzt die dynamisch uber den import Befehl in den Python Interpreter geladen werden konnen als auch die Linker Integration des CPython Interpreters in das generierte Modul so dass ein ausfuhrbares Programm entsteht Embedding Inhaltsverzeichnis 1 Entwicklungsgeschichte 2 Namensherkunft 3 Ziele 4 Eigenschaften 5 Performance 6 Anwendungsgebiete 7 Verwandte und ahnliche Projekte 8 EinzelnachweiseEntwicklungsgeschichte BearbeitenCython basiert auf Pyrex von Greg Ewing Erstveroffentlichung am 4 April 2002 5 Im Juli 2007 wurde der Cython Compiler durch Robert Bradshaw und Stefan Behnel als eigenstandiges offen entwickeltes Projekt von Pyrex abgespalten Seither wurde versucht die beiden Compiler weitgehend kompatibel zu halten wobei jedoch Cython wesentlich weiterreichende Optimierungen anwendet und eine hohere Kompatibilitat mit Python Code erreicht Wichtige Unterschiede zu Pyrex sind in der Cython Dokumentation beschrieben Namensherkunft BearbeitenDer Name Cython ist ein Kofferwort der beiden zugrunde liegenden Programmiersprachen Python und C Ziele BearbeitenDas Cython Projekt hat sich zum Ziel gesetzt einen Compiler fur normalen Python Code zu entwickeln 6 der durch zusatzliche explizite statische Typisierung eine moglichst hohe Performance und eine weitreichende Integration mit Code bietet der in C C und Fortran geschrieben ist Cython ist ein optimierender Compiler jedoch nicht im gangigen Sinne eines Compilers der Binarcode erzeugt Vielmehr erlaubt es die Ubersetzung in C Code viele grundlegende Optimierungen und Plattform Anpassungen einem C Compiler zu uberlassen So kann sich der Cython Compiler selbst auf High Level Optimierungen auf AST Ebene beschranken Der C Code den Cython generiert ist weitgehend portabel bezuglich Plattformen Prozessor C Compiler und Betriebssystem und CPython Versionen Aktuell Version 0 28 5 werden die CPython Versionen 2 6 und 2 7 sowie alle von 3 3 an unterstutzt Getestete Plattformen sind unter anderem macOS Windows und vor allem verschiedene Linux Distributionen mit 32 Bit und 64 Bit Systemversionen Eigenschaften BearbeitenDie Kombination von Python und C erlaubt Cython ein sehr breites Anforderungsspektrum abzubilden Moglich ist sowohl High Level Programmierung mit Python Datentypen Sprachkonstrukten und automatischer Speicherverwaltung als auch eine sehr C nahe Programmierung mit C Datentypen C Funktionen und manueller Speicherverwaltung Beides kann beliebig kombiniert werden und die Interaktion mit reinem unkompilierten Python Code ist ebenso nativ moglich wie die Interaktion mit C oder C Code was bei der Optimierung von Cython Code ein sehr feingranulares Vorgehen ermoglicht Beliebige Teile des Codes konnen in reinem Python geschrieben mit Cython kompiliert mit statischen Datentypen optimiert oder sogar nach C portiert werden je nach Anforderung Dadurch unterstutzt Cython sehr gut das Prinzip dass der grosste Teil der Laufzeit eines Programms in einem sehr kleinen Teil des Quelltextes entsteht also die Optimierung eines kleinen Programmteils einen sehr grossen Performancegewinn bringen kann wahrend bei dem grossten Teil des Codes eine hohe Entwicklungsgeschwindigkeit und ein geringer Wartungsaufwand wichtiger sind als eine grosstmogliche Ausfuhrungsgeschwindigkeit Die Programmiersprache erreicht die Sprachintegration zwischen Python und C vor allem uber Datentypen So konnen verschiedene Python Sprachkonstrukte sowohl auf Python Datentypen als auch auf C Datentypen angewendet werden Ein Beispiel ist die for Schleife die in Python eine Foreach Schleife ist also uber beliebige iterierbare Container laufen kann z B Listen oder Dateien In Cython kann diese Schleife zudem uber C Listen C Arrays und Teilarrays laufen sowie uber Pointer Abschnitte Slices 7 z B ptr 2 8 fur die Offsets 2 7 Daneben erfolgt eine automatische Konvertierung zwischen verschiedenen Python Datentypen und C Datentypen sowohl bei Skalartypen Zahlen als auch bei Zeichenketten und strukturierten Datentypen z B C Struct Typen und Python Dictionaries Performance BearbeitenViele der Optimierungen die der Cython Compiler automatisch durchfuhrt bewirken eine Spezialisierung des generierten C Codes Dazu verwendet der Compiler explizite statische Typdeklarationen und einfache Typinferenz um spezialisierten C Code fur die verwendeten Datentypen und bestimmte Code Patterns zu erzeugen Ein grosser Teil der Optimierungen im Cython Compiler bezieht sich auf Schleifen da sich hier zumeist ein grosser Teil der Gesamtlaufzeit ansammelt Kontrollstrukturen vor allem Schleifen sind mit Cython und einem C Compiler ubersetzt um ein Vielfaches schneller als wenn sie von CPython interpretiert werden 8 Dies ist bedingt durch optimistische Optimierungen und Typ Inferenz Dadurch lauft Cython kompilierter Python Code auch ohne explizite Typ Deklarationen meist schneller als in CPython 2 6 x obwohl die relative Performance naturlich vom jeweiligen Code abhangt Durch die statische Deklaration von Datentypen und die dadurch resultierende Spezialisierung des C Codes lasst sich jedoch zumeist eine Beschleunigung um ein Vielfaches erreichen Vor allem bei mathematischen Berechnungen ergeben sich oft Laufzeitverbesserungen um den Faktor hundert bis tausend 9 Im Vergleich dazu liegt die typische Beschleunigung durch den Python JIT Compiler Psyco bei etwa vier bis hundertfach 10 bei PyPy in ausgewahlten Fallen bei bis zu zwolffach 11 Der von Cython fur Funktionen generierte Code ist optimiert fur schnelles Entpacken und Konvertieren von Aufrufparametern Daher ist ein Python Aufruf von nativem Code durch einen Cython Wrapper hindurch im Allgemeinen schneller als in anderen Wrapper Implementierungen fur Python 12 13 Anwendungsgebiete BearbeitenDie wichtigsten Anwendungsgebiete von Cython sind die Anbindung von externen Bibliotheken an den CPython Interpreter sowie die Beschleunigung von Python Code insbesondere in mathematischen Berechnungen und rechenintensiven Algorithmen Beispielsweise basiert das Computeralgebrasystem SageMath zu einem grossen Teil auf Cython Code Dieser dient sowohl zur Implementierung mathematischer Algorithmen als auch zur Anbindung externen Codes in C C und Fortran Cython unterstutzt zudem eine sehr effiziente Interaktion mit NumPy Matrizen was darauf basierende Berechnungen stark vereinfacht Die High Performance XML Bibliothek lxml ist grosstenteils in Cython implementiert Dabei werden die externen C Bibliotheken libxml2 und libxslt an den Python Interpreter angebunden Ein weiteres Beispiel aus dem Umfeld der Cython Core Entwickler ist die MPI Bibliothek mpi4py Sie bindet verschiedene MPI Implementierungen an CPython an Im Python Package Index findet sich eine kurze Liste weiterer Bibliotheken die in Cython implementiert sind 14 Verwandte und ahnliche Projekte BearbeitenPyrex Vorganger von Cython Unladen Swallow optimierte CPython Laufzeitumgebung basiert auf LLVM PyPy JIT Compiler Framework und Python Laufzeitumgebung die selbst in einem Python Dialekt RPython geschrieben ist Psyco spezialisierender JIT Compiler und Code Optimierer fur die CPython Laufzeitumgebung Shed Skin statisch typisierte Python ahnliche Programmiersprache die nach C kompiliert wirdEinzelnachweise Bearbeiten Release 3 0 5 30 Oktober 2023 abgerufen am 18 November 2023 a b docs cython org github com abgerufen am 2 Februar 2020 Cython C Extensions for Python abgerufen am 8 Juli 2018 ursprungliche Versionen des Vorgangers Pyrex Kompatibilitat zu Python 2 ist erklartes Ziel fur die zukunftige Cython Version 1 0 Memento des Originals vom 10 August 2011 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot wiki cython org Slices auf docs python org abgerufen am 2 August 2018 gmane comp python cython devel pybench Vergleich von Cython und CPython 2 6 2 gmane comp python cython devel Passing a pointer from Python Memento des Originals vom 14 Februar 2017 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot thread gmane org Psyco Introduction Geschwindigkeit von PyPy 1 4 im Vergleich zu CPython 2 6 2 mit ohne Psyco C Wrapper Benchmarks fur verschiedene Python Wrapper Generatoren ohne Cython Memento des Originals vom 4 April 2015 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot telecom inescporto pt C Wrapper Benchmarks fur Cython Boost Python und PyBindGen Liste der in Cython implementierten Python Pakete auf PyPI Abgerufen von https de wikipedia org w index php title Cython amp oldid 219811411