Προγραμματισμός

Τζούλια εναντίον Python: Ποιο είναι καλύτερο για την επιστήμη των δεδομένων;

Μεταξύ των πολλών περιπτώσεων χρήσης που καλύπτει η Python, η ανάλυση δεδομένων έχει γίνει ίσως η μεγαλύτερη και πιο σημαντική. Το οικοσύστημα Python είναι γεμάτο με βιβλιοθήκες, εργαλεία και εφαρμογές που καθιστούν το έργο της επιστημονικής πληροφορικής και ανάλυσης δεδομένων γρήγορο και βολικό.

Αλλά για τους προγραμματιστές πίσω από τη γλώσσα της Τζούλια - που στοχεύουν συγκεκριμένα στην «επιστημονική πληροφορική, μηχανική μάθηση, εξόρυξη δεδομένων, γραμμική άλγεβρα μεγάλης κλίμακας, κατανεμημένη και παράλληλη πληροφορική» - το Python δεν είναι γρήγορο ή βολικό αρκετά. Η Julia στοχεύει να δώσει στους επιστήμονες και στους αναλυτές δεδομένων όχι μόνο γρήγορη και βολική ανάπτυξη, αλλά και απίστευτη ταχύτητα εκτέλεσης.

Ποια είναι η γλώσσα της Τζούλια;

Δημιουργήθηκε το 2009 από μια ομάδα τεσσάρων ατόμων και αποκαλύφθηκε στο κοινό το 2012, η ​​Julia προορίζεται να αντιμετωπίσει τις ελλείψεις στην Python και σε άλλες γλώσσες και εφαρμογές που χρησιμοποιούνται για την επιστημονική πληροφορική και την επεξεργασία δεδομένων. «Είμαστε άπληστοι», έγραψαν. Θέλουν περισσότερα:

Θέλουμε μια γλώσσα ανοιχτού κώδικα, με ελεύθερη άδεια. Θέλουμε την ταχύτητα του C με τον δυναμισμό του Ruby. Θέλουμε μια γλώσσα που είναι ομοφωνική, με αληθινές μακροεντολές όπως το Lisp, αλλά με προφανή, οικεία μαθηματική σημειογραφία όπως το Matlab Θέλουμε κάτι τόσο εύχρηστο για τον γενικό προγραμματισμό όσο το Python, τόσο εύκολο για στατιστικά ως R, τόσο φυσικό για επεξεργασία εγχόρδων όσο το Perl, τόσο ισχυρό για γραμμική άλγεβρα όσο το Matlab, τόσο καλό για την κόλληση προγραμμάτων μαζί με το κέλυφος. Κάτι που είναι απλό να μάθει, αλλά διατηρεί τους πιο σοβαρούς χάκερ χαρούμενους. Το θέλουμε διαδραστικό και το θέλουμε να συντάσσεται.

(Αναφέραμε ότι πρέπει να είναι τόσο γρήγορο όσο το C;)

Εδώ είναι μερικοί από τους τρόπους με τους οποίους η Τζούλια υλοποιεί αυτές τις φιλοδοξίες:

  • Η Τζούλια καταρτίζεται, δεν ερμηνεύεται. Για ταχύτερη απόδοση χρόνου εκτέλεσης, η Julia καταρτίζεται ακριβώς στο χρόνο (JIT) χρησιμοποιώντας το πλαίσιο μεταγλωττιστή LLVM. Στην καλύτερη περίπτωση, η Τζούλια μπορεί να πλησιάσει ή να ταιριάξει με την ταχύτητα του C.
  • Η Τζούλια είναι διαδραστική. Η Julia περιλαμβάνει ένα REPL (read-eval-print loop) ή μια διαδραστική γραμμή εντολών, παρόμοια με αυτά που προσφέρει η Python. Γρήγορα εφάπαξ σενάρια και εντολές μπορούν να διατρηθούν αμέσως.
  • Η Τζούλια έχει μια απλή σύνταξη. Η σύνταξη της Τζούλια είναι παρόμοια με την Πύθωνα - στενή, αλλά και εκφραστική και ισχυρή.
  • Η Julia συνδυάζει τα οφέλη της δυναμικής πληκτρολόγησης και της στατικής πληκτρολόγησης. Μπορείτε να καθορίσετε τύπους για μεταβλητές, όπως "ακέραιος 32-bit χωρίς υπογραφή". Ωστόσο, μπορείτε επίσης να δημιουργήσετε ιεραρχίες τύπων για να επιτρέψετε σε γενικές περιπτώσεις για το χειρισμό μεταβλητών συγκεκριμένων τύπων - για παράδειγμα, να γράφετε μια συνάρτηση που δέχεται ακέραιους αριθμούς χωρίς να καθορίζει το μήκος ή την υπογραφή του ακέραιου. Μπορείτε ακόμη να το κάνετε χωρίς να πληκτρολογήσετε τελείως αν δεν είναι απαραίτητο σε ένα συγκεκριμένο περιβάλλον.
  • Η Τζούλια μπορεί να καλέσει βιβλιοθήκες Python, C και Fortran. Η Τζούλια μπορεί να διασυνδέεται απευθείας με εξωτερικές βιβλιοθήκες γραμμένες στα Γ και Φορτράν. Είναι επίσης δυνατή η διασύνδεση με τον κώδικα Python μέσω της βιβλιοθήκης PyCall και ακόμη και κοινή χρήση δεδομένων μεταξύ Python και Julia.
  • Η Τζούλια υποστηρίζει τον μεταπρογραμματισμό. Τα προγράμματα Julia μπορούν να δημιουργήσουν άλλα προγράμματα Julia, ακόμη και να τροποποιήσουν τον δικό τους κώδικα, με τρόπο που θυμίζει γλώσσες όπως το Lisp.
  • Η Julia διαθέτει ένα πρόγραμμα εντοπισμού σφαλμάτων πλήρους δυνατότητας. Το Julia 1.1 εισήγαγε μια σουίτα εντοπισμού σφαλμάτων, η οποία εκτελεί κώδικα σε μια τοπική REPL και σας επιτρέπει να προχωρήσετε στα αποτελέσματα, να ελέγξετε τις μεταβλητές και να προσθέσετε σημεία διακοπής στον κώδικα. Μπορείτε ακόμη και να εκτελέσετε λεπτομερείς εργασίες, όπως να περάσετε από μια λειτουργία που δημιουργείται από κώδικα.

Σχετικό βίντεο: Πώς ο Python διευκολύνει τον προγραμματισμό

Ιδανικό για IT, η Python απλοποιεί πολλά είδη εργασίας, από τον αυτοματισμό του συστήματος έως την εργασία σε πρωτοποριακούς τομείς όπως η μηχανική μάθηση.

Τζούλια εναντίον Python: Πλεονεκτήματα της γλώσσας της Τζούλια

Η Julia σχεδιάστηκε από την αρχή για επιστημονικούς και αριθμητικούς υπολογισμούς. Επομένως, δεν αποτελεί έκπληξη το γεγονός ότι η Julia έχει πολλά πλεονεκτήματα για τέτοιες περιπτώσεις χρήσης:

  • Η Τζούλια είναι γρήγορη. Η συλλογή JIT της Julia και οι δηλώσεις τύπου σημαίνουν ότι μπορεί να νικήσει συστηματικά την «καθαρή», μη βελτιστοποιημένη Python με παραγγελίες μεγέθους. Η Python μπορεί να είναι έκανε γρηγορότερα μέσω εξωτερικών βιβλιοθηκών, μεταγλωττιστών JIT τρίτων (PyPy) και βελτιστοποιήσεων με εργαλεία όπως το Cython, αλλά η Julia έχει σχεδιαστεί για να είναι ταχύτερη έξω από την πύλη.
  • Η Τζούλια έχει μια σύνταξη φιλική προς τα μαθηματικά. Ένα σημαντικό κοινό-στόχος για τη Julia είναι χρήστες επιστημονικών υπολογιστικών γλωσσών και περιβαλλόντων όπως οι Matlab, R, Mathematica και Octave. Η σύνταξη της Julia για λειτουργίες μαθηματικών μοιάζει περισσότερο με τον τρόπο που οι μαθηματικοί τύποι γράφονται έξω από τον κόσμο των υπολογιστών, καθιστώντας ευκολότερο για τους μη προγραμματιστές.
  • Η Julia έχει αυτόματη διαχείριση μνήμης. Όπως η Python, η Julia δεν επιβαρύνει τον χρήστη με τις λεπτομέρειες της κατανομής και της απελευθέρωσης της μνήμης και παρέχει κάποιο μέτρο μη αυτόματου ελέγχου της συλλογής απορριμμάτων. Η ιδέα είναι ότι εάν μεταβείτε στη Julia, δεν θα χάσετε μία από τις κοινές ανέσεις της Python.
  • Η Τζούλια προσφέρει ανώτερο παραλληλισμό. Τα μαθηματικά και οι επιστημονικοί υπολογιστές ευδοκιμούν όταν μπορείτε να χρησιμοποιήσετε τους πλήρεις διαθέσιμους πόρους σε μια δεδομένη μηχανή, ειδικά σε πολλούς πυρήνες. Τόσο η Python όσο και η Julia μπορούν να λειτουργούν παράλληλα. Ωστόσο, οι μέθοδοι της Python για παράλληλες λειτουργίες συχνά απαιτούν την σειριοποίηση και την αποστειρωματοποίηση των δεδομένων μεταξύ νημάτων ή κόμβων, ενώ η παραλληλοποίηση της Julia είναι πιο εκλεπτυσμένη. Επιπλέον, η σύνταξη παραλληλισμού της Julia είναι λιγότερο βαρύ από την Python, μειώνοντας το όριο στη χρήση της.
  • Η Τζούλια αναπτύσσει τις δικές της μητρικές βιβλιοθήκες μηχανικής μάθησης. Το Flux είναι μια βιβλιοθήκη μηχανικής μάθησης για την Τζούλια που έχει πολλά υπάρχοντα πρότυπα μοντέλων για κοινές περιπτώσεις χρήσης. Δεδομένου ότι είναι γραμμένο εξ ολοκλήρου στη Julia, μπορεί να τροποποιηθεί ανάλογα με τις ανάγκες του χρήστη και χρησιμοποιεί την εγγενή συλλογή just-in-time της Julia για τη βελτιστοποίηση έργων από μέσα προς τα έξω.

Τζούλια εναντίον Python: Πλεονεκτήματα της Python

Αν και η Julia έχει σχεδιαστεί ειδικά για την επιστήμη των δεδομένων, ενώ η Python έχει εξελιχθεί περισσότερο ή λιγότερο στον ρόλο, η Python προσφέρει κάποια επιτακτικά πλεονεκτήματα στον επιστήμονα δεδομένων. Μερικοί από τους λόγους «γενικού σκοπού» Python μπορεί να είναι η καλύτερη επιλογή για το έργο επιστήμης δεδομένων:

  • Η Python χρησιμοποιεί ευρετήριο συστοιχιών με μηδενική βάση. Στις περισσότερες γλώσσες, συμπεριλαμβανομένων των Python και C, το πρώτο στοιχείο ενός πίνακα είναι προσβάσιμο με μηδέν - π.χ., χορδή [0] στο Python για τον πρώτο χαρακτήρα μιας συμβολοσειράς. Η Julia χρησιμοποιεί το 1 για το πρώτο στοιχείο σε έναν πίνακα. Δεν πρόκειται για αυθαίρετη απόφαση. Πολλές άλλες μαθηματικές και επιστημονικές εφαρμογές, όπως η Mathematica, χρησιμοποιούν την ευρετηρίαση 1 και η Julia προορίζεται να προσελκύσει αυτό το κοινό. Είναι πιθανό να υποστηρίξετε τη μηδενική ευρετηρίαση στη Julia με ένα πειραματικό χαρακτηριστικό, αλλά η 1-ευρετηρίαση από προεπιλογή μπορεί να εμποδίσει την υιοθέτηση από ένα κοινό γενικότερης χρήσης με ενσωματωμένες συνήθειες προγραμματισμού.
  • Η Python έχει λιγότερα έξοδα εκκίνησης. Τα προγράμματα Python μπορεί να είναι πιο αργά από τα προγράμματα Julia, αλλά ο ίδιος ο χρόνος εκτέλεσης του Python είναι πιο ελαφρύς και γενικά χρειάζεται λιγότερος χρόνος για την έναρξη και την παράδοση των πρώτων αποτελεσμάτων των προγραμμάτων Python. Επίσης, ενώ η συλλογή JIT επιταχύνει το χρόνο εκτέλεσης για τα προγράμματα Julia, το κόστος είναι πιο αργό. Πολλή δουλειά έχει γίνει για να κάνει την Τζούλια να ξεκινήσει γρηγορότερα, αλλά η Python έχει ακόμα το προβάδισμα εδώ.
  • Ο Python είναι ώριμος. Η γλώσσα της Τζούλια είναι νέα. Η Τζούλια βρίσκεται υπό ανάπτυξη μόνο από το 2009 και έχει υποστεί αρκετή αλλαγή χαρακτηριστικών. Αντιθέτως, η Python βρίσκεται εδώ και σχεδόν 30 χρόνια.
  • Η Python έχει πολύ περισσότερα πακέτα τρίτων. Το εύρος και η χρησιμότητα του πολιτισμού της Python για πακέτα τρίτων παραμένει ένα από τα μεγαλύτερα αξιοθέατα της γλώσσας. Και πάλι, η σχετική νεότητα της Julia σημαίνει ότι η κουλτούρα του λογισμικού γύρω της είναι ακόμα μικρή. Ορισμένα από αυτά αντισταθμίζονται από την ικανότητα χρήσης υφιστάμενων βιβλιοθηκών C και Python, αλλά η Julia χρειάζεται δικές της βιβλιοθήκες για να ευδοκιμήσει. Βιβλιοθήκες όπως το Flux και το Knet κάνουν τη Julia χρήσιμη για τη μηχανική μάθηση και τη βαθιά μάθηση, αλλά η συντριπτική πλειοψηφία αυτής της εργασίας γίνεται ακόμα με το TensorFlow ή το PyTorch.
  • Η Python έχει εκατομμύρια χρήστες. Μια γλώσσα δεν είναι τίποτα χωρίς μια μεγάλη, αφοσιωμένη και ενεργή κοινότητα γύρω της. Η κοινότητα γύρω από τη Julia είναι ενθουσιώδης και μεγαλώνει, αλλά εξακολουθεί να είναι μόνο ένα κλάσμα του μεγέθους της κοινότητας Python. Η τεράστια κοινότητα της Python είναι ένα τεράστιο πλεονέκτημα.
  • Η Python γίνεται γρηγορότερη. Εκτός από την επίτευξη βελτιώσεων στον διερμηνέα Python (συμπεριλαμβανομένων βελτιώσεων στην πολυπύρηνη και παράλληλη επεξεργασία), η Python έχει γίνει πιο εύκολη στην επιτάχυνση. Το έργο mypyc μεταφράζει Python με σχολιασμό τύπου σε εγγενή C, πολύ λιγότερο απότομα από το Cython. Συνήθως αποδίδει τετραπλάσιες βελτιώσεις απόδοσης και συχνά πολύ περισσότερες για καθαρά μαθηματικές λειτουργίες.