Γιατί υπάρχουν τόσες πολλές γλώσσες προγραμματισμού;

Υπάρχουν πάνω από 250 γλώσσες προγραμματισμού. Ορισμένοι χρησιμοποιούνται ευρέως στον επιχειρηματικό κόσμο, όπως οι C ++, Java, JavaScript, Ruby και Python. Άλλοι είναι κυρίως ακαδημαϊκοί, όπως ο Lisp. Ακόμα, οι άλλοι είναι σκοτεινές και εσωτεριστικές. Μπορεί να ρωτάς: "Γιατί υπάρχουν τόσα πολλά γλωσσά προγραμματισμού;"

Αυτό είναι κάτι σαν να ρωτάς: "Γιατί υπάρχουν τόσα πολλά πεδία μαθηματικών; Έχουμε άλγεβρα, γιατί χρειαζόμαστε γεωμετρία, λογισμό και μηχανική ρευστών;" Κάθε γλώσσα προγραμματισμού στοχεύει στην επίλυση ενός συγκεκριμένου προβλήματος. Περισσότερες από μία γλώσσες θα μπορούσαν να λύσουν το ίδιο πρόβλημα, αλλά το καθένα θα το προσεγγίσει διαφορετικά.

Ακολουθούν μερικές από τις μεγάλες διαφορές στις γλώσσες προγραμματισμού.

Ευανάγνωστη και διατηρησιμότητα

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

Σε αντίθεση, το Perl είναι μια γλώσσα που επιτρέπει στον προγραμματιστή να γράφει το ίδιο πρόγραμμα με πολλούς διαφορετικούς τρόπους, αλλά ο σκοπός του προγράμματος μπορεί να μην είναι άμεσα σαφής σε άλλο αναγνώστη. Ένα τέτοιο πρόγραμμα μπορεί να είναι βολικό να γράψει, αλλά είναι δύσκολο για κάποιον άλλον να καταλάβει και να επεξεργαστεί.

Εκτέλεση

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

Τα προγράμματα που έχουν συνταχθεί συνήθως εκτελούν καλύτερα από τα ερμηνευμένα προγράμματα. Για παράδειγμα, C, C ++ και Objective-C είναι γλώσσες που τυπικά καταρτίζονται με πολύ γρήγορο κώδικα μηχανής. Τα βιντεοπαιχνίδια και το λογισμικό συστήματος είναι συχνά γραμμένα σε αυτές τις γλώσσες, για να αποσπάσουν κάθε κομμάτι της απόδοσης από την CPU.

Από την άλλη πλευρά, τα προγράμματα ερμηνευμένης γλώσσας εκτελούνται από λογισμικό που ονομάζεται διερμηνέας, το οποίο εκτελεί τις οδηγίες του προγράμματος χωρίς πρώτα να τις καταρτίζει στον κώδικα μηχανής. Παρόλο που ο διερμηνέας μερικές φορές αναλύει το πρόγραμμα σε μια ενδιάμεση γλώσσα, με αποτέλεσμα κάποια βελτιστοποίηση, η απόδοση δεν είναι ποτέ τόσο γρήγορη όσο ο συντάκτης κώδικα μηχανής.

Ένα σημαντικό πλεονέκτημα των ερμηνευόμενων γλωσσών είναι το δυναμικό τους για διαδραστική ανάπτυξη. Επειδή ολόκληρο το πρόγραμμα δεν χρειάζεται να καταρτιστεί πριν να μπορέσει να εκτελεστεί, ο κώδικας μπορεί να εκτελεστεί διαδραστικά. Είστε εξοικειωμένοι με αυτό αν έχετε χρησιμοποιήσει ποτέ τη γραμμή εντολών του λειτουργικού σας συστήματος: εισάγετε μια εντολή και δείτε τα αποτελέσματα. Μια τέτοια διεπαφή ονομάζεται REPL ή "read-eval-print-loop". Ένα REPL σας επιτρέπει να εκτελέσετε εντολές (ή μπλοκ εντολών) ξεχωριστά και να δείτε τα αποτελέσματα. Lisp, Perl, Python, NodeJS, Ruby και JavaScript είναι παραδείγματα ερμηνευμένων γλωσσών που μπορούν να εκτελεστούν σε ένα REPL.

Οι διαδραστικές διεπαφές εντολών, όπως η Γραμμή εντολών και bash των Windows, μπορούν επίσης να χαρακτηριστούν ως ερμηνευμένες γλώσσες. Τα προγράμματα σε αυτές τις "γλώσσες" ονομάζονται αρχεία δέσμης ή δέσμες ενεργειών κελύφους.

Ειδικές περιπτώσεις χρήσης

Συχνά, οι γλώσσες είναι ιδιαίτερα καλές κατά τη σύνταξη συγκεκριμένων τύπων προγραμμάτων. Για παράδειγμα, το NodeJS έχει σχεδιαστεί για να γράφει εφαρμογές με ένα μόνο σπείρωμα για τον ιστό. Το μη-αποκλειστικό αρχείο I / O επιτρέπει στα προγράμματα να συνεχίσουν να λειτουργούν ("δεν αποκλείονται") ενώ περιμένουν να διαβιβαστούν τα απαιτούμενα δεδομένα.

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

Ευκολία του πρωτοτύπου

Ορισμένες γλώσσες επιτρέπουν την γρήγορη δημιουργία πρωτοτύπων: ο προγραμματιστής μπορεί να "ξεκινήσει απλά να γράψει" και να κατασκευάσει εξαρτήματα κατά τη διάρκεια της συνιστώσας μέχρι να διαμορφωθεί πλήρως το πρόγραμμα.

Για παράδειγμα, ο δικτυακός τόπος Reddit γράφτηκε αρχικά στο Lisp. Μετά την κυκλοφορία του Reddit, ολόκληρη η τοποθεσία ξαναγράφηκε στην Python για πολλούς λόγους, τόσο τεχνικούς όσο και υλικοτεχνικούς. Παρόλο που ο επαναπροσδιορισμός του κώδικα ήταν μια μεγάλη επιχείρηση, οι ιδιοκτήτες του site δεν εξέφρασαν καμία λύπη. Σε μια θέση blog του 2005, παρατήρησαν ότι η Lisp τους επέτρεψε να δημιουργήσουν κάτι χωρίς να ξέρουν ακριβώς τι θα γινόταν.

Διαθέσιμες βιβλιοθήκες

Συνήθως, όταν ξεκινάτε ένα νέο πρόγραμμα προγραμματισμού, δεν θέλετε να ανακαλύψετε ξανά τον τροχό. Δηλαδή, δεν θέλετε να γράφετε λειτουργίες για κοινές εργασίες, όπως τον υπολογισμό μιας τετραγωνικής ρίζας ή την εύρεση της πρώτης εμφάνισης ενός χαρακτήρα σε μια συμβολοσειρά. Για το λόγο αυτό, σχεδόν κάθε γλώσσα προγραμματισμού παρέχει ένα σύνολο τυπικών βιβλιοθηκών κοινών λειτουργιών. Οι προγραμματιστές προτιμούν μια γλώσσα λόγω των βιβλιοθηκών που παρέχει.

Για παράδειγμα, οι καθιερωμένες βιβλιοθήκες C παρέχουν εξαιρετικά αποτελεσματικές λειτουργίες για πολλές λειτουργίες συστήματος χαμηλού επιπέδου. Το Perl παρέχει πολλές αξιόπιστες βιβλιοθήκες, καθώς και το χώρο αποθήκευσης CPAN των μονάδων που θα ληφθούν και θα χρησιμοποιηθούν στο πρόγραμμά σας. Η Python παρέχει μια μεγάλη γκάμα ενσωματωμένων λειτουργιών και ενοτήτων για τα πάντα κάτω από τον ήλιο. Το Clojure, μια γλώσσα τύπου Lisp που τρέχει στο JVM, επωφελείται από την ικανότητά του να εκτελεί κώδικα από τις εκτεταμένες υπάρχουσες βιβλιοθήκες αντικειμένων και μεθόδων Java.

Ασφάλεια

Δεν είναι όλες οι γλώσσες ικανές να γράψουν ασφαλές κώδικα. Η γλώσσα προγραμματισμού C, για παράδειγμα, είναι πασίγνωστη επειδή έχει χαρακτηριστικά (ή έλλειψη) τα οποία μπορούν να οδηγήσουν σε καταστροφικές ευπάθειες, όπως μηδενική αντιστοίχιση δείκτη. Άλλες γλώσσες προσπαθούν να αντιμετωπίσουν αυτές τις ανησυχίες με αυστηρότερους κανόνες.

Για παράδειγμα, ορισμένες γλώσσες θέτουν περιορισμούς σε ποιες λειτουργίες μπορούν να εκτελεστούν σε διάφορους τύπους δεδομένων. Οι αυστηρότερες από αυτές τις γλώσσες καλούνται μερικές φορές "έντονα δακτυλογραφημένες", και μπορούν να προσφέρουν ειρήνη στο μυαλό στους προγραμματιστές που δίνουν προτεραιότητα στην ασφάλεια και τη σταθερότητα στην ανάπτυξη λογισμικού. Παραδείγματα ισχυρών δακτυλογραφημένων γλωσσών περιλαμβάνουν Rust, Nim, Ocaml και Haskell.

Οι γλώσσες μπορούν επίσης να θέτουν όρια στην "μεταβλητότητα", την ικανότητα ενός αντικειμένου δεδομένων να αλλάζει κατάσταση. Αντί αντικειμένων των οποίων οι τιμές αντικαθίστανται, αυτές οι γλώσσες ευνοούν τα "αμετάβλητα" αντικείμενα: τιμές στη μνήμη που δεν μπορούν να αλλάξουν χωρίς ρητή εξαίρεση. Τα αναλλοίωτα αντικείμενα έχουν προσελκύσει το ενδιαφέρον, καθώς οι επεξεργαστές πολλαπλών πυρήνων έχουν γίνει ευρέως διαδεδομένοι λόγω της τάσης τους να προάγουν την "ασφάλεια των νημάτων". Σε ένα πρόγραμμα που προστατεύει τα νήματα, περισσότεροι από ένας επεξεργαστές μπορούν να λειτουργούν σε ένα σύνολο δεδομένων με πολύ μειωμένο κίνδυνο σφάλματος. Γλώσσες που δίνουν προτεραιότητα στα αμετάβλητα αντικείμενα περιλαμβάνουν το Rust και το Clojure.

Κοινοτική στήριξη

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

Εκφραστικότητα

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