Cython

From Wikipedia, the free encyclopedia

Remove ads

Η Cython είναι ένα υπερσύνολο της γλώσσας προγραμματισμού Python. Eπιτρέπει στους προγραμματιστές να γράφουν κώδικα Python με προαιρετικές επεκτάσεις στο συντακτικό που είναι εμπνευσμένες από τη C και επιδόσεις συγκρίσιμες με εκείνες της ίδιας της C.[1][2] Είναι υλοποιημένη σε Python και C και μπορεί να τρέξει σε Windows, macOS και Linux.

Πρόκειται για μια μεταγλωττιζόμενη (αγγλικά: compiled) γλώσσα που χρησιμοποιείται συνήθως για τη δημιουργία επεκτάσεων προγραμμάτων σε CPython. Παράγονται modules που μπορούν να φορτωθούν και να χρησιμοποιηθούν από κανονικό κώδικα Python με την εντολή import, αλλά με σημαντικά μικρότερο υπολογιστικό κόστος κατά την εκτέλεση. Η Cython διευκολύνει επίσης την ενσωμάτωση ανεξάρτητου κώδικα C ή C++ σε modules που μπορούν να εισαχθούν στην Python.

Remove ads

Ιστορία

Η Cython βασίζεται στη γλώσσα Pyrex αλλά έχει περισσότερες δυνατότητες και ενσωματώνει βελτιστοποιήσεις.[3][4] Το 2007 δημιουργήθηκε ένα παρακλάδι (αγγλικά: fork) από τους προγραμματιστές του αλγεβρικού υπολογιστικού προγράμματος Sagemath διότι δεν ήταν ικανοποιημένοι με τους περιορισμούς της Pyrex και δεν μπορούσαν να ενσωματώσουν τις διορθώσεις τους στον κύριο κώδικά της. Έτσι αποφάσισαν να δημιούργησαν τη SageX.

Όταν διαπίστωσαν ότι πολλοί χρήστες κατέβαζαν τη Sage μόνο για να αποκτήσουν το SageX και ότι προγραμματιστές άλλων πακέτων διατηρούσαν επίσης δικές τους διακλαδώσεις της Pyrex, έκαναν τη SageX ανεξάρτητο από το υπόλοιπο Sagemath ώστε να δημιουργηθεί η Cython.[5]

Remove ads

Χαρακτηριστικά

Η Cython παράγει τυπικά Python modules. Ωστόσο, η συμπεριφορά τους διαφέρει από της κανονικής Python διότι ο κώδικας τους, που αρχικά είναι γραμμένος σε Python, μεταφράζεται σε C. Παρότι ο παραγόμενος κώδικας είναι γρήγορος, πραγματοποιεί πολλές κλήσεις προς τον διερμηνευτή (αγγλικά: interpreter) της CPython και τις βασικές της βιβλιοθήκες. Αυτή η σχεδιαστική επιλογή εξοικονόμησε σημαντικό χρόνο στην ανάπτυξη της Cython αλλά την καθιστά εξαρτημένη από τον διερμηνευτή της Python. Αν και το μεγαλύτερο μέρος του κώδικα είναι γραμμένο σε C, συνήθως απαιτείται ένα μικρό αρχείο φόρτωσης (αγγλικά: stub loader) γραμμένο σε κλασική Python, κάτι που δεν αποτελεί ζήτημα καθώς απαιτείται ούτως ή άλλως η παρουσία του διερμηνευτή της Python.[6] Η Cython διαθέτει επίσης διεπαφή για να καλεί συναρτήσεις σε C/C++ καθώς και για να δηλώνονται στατικοί τύποι.

Ένα πρόγραμμα σε Cython που υλοποιεί τον ίδιο αλγόριθμο με ένα αντίστοιχο πρόγραμμα σε Python μπορεί να καταναλώνει λιγότερους υπολογιστικούς πόρους, όπως μνήμη RAM και κύκλους επεξεργαστή, λόγω διαφορών μεταξύ του μοντέλου εκτέλεσης. Ένα βασικό πρόγραμμα σε Python φορτώνεται και εκτελείται από τη εικονική μηχανή της CPython, με αποτέλεσμα τόσο το περιβάλλον εκτέλεσης όσο και το ίδιο το πρόγραμμα να καταναλώνουν πόρους. Αντίθετα, ένα πρόγραμμα σε Cython μεταγλωττίζεται σε κώδικα C, ο οποίος στη συνέχεια μεταγλωττίζεται σε γλώσσα μηχανής, οπότε η εικονική μηχανή χρησιμοποιείται μόνο για λίγο κατά τη φόρτωση του προγράμματος.[7][8][9][10]

Remove ads

Παραπομπές

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads