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

Λειτουργικές γλώσσες: Τι είναι, πού πηγαίνουν

Ακόμα και καθώς ορισμένοι υποστηρίζουν ακριβώς τι είναι, ο λειτουργικός προγραμματισμός προσελκύει προγραμματιστές. Και τρεις από τις πιο δημοφιλείς λειτουργικές γλώσσες - Clojure, F # και Scala - είναι έτοιμες για βελτιώσεις.

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

Ο λειτουργικός προγραμματισμός απαιτεί επίσης να σκεφτούμε τον προγραμματισμό με νέο τρόπο, λέει ο David Stephens, διευθυντής προγράμματος της Microsoft για το .Net και εκπρόσωπος του F #. Οι αφαιρέσεις μπορεί να είναι ένα ζήτημα: "Όταν κάνετε τον κώδικα πιο αφηρημένο, όταν απομακρύνεστε περισσότερο από το χειρισμό bit και ξεφεύγετε ρητά από βρόχους, μπορεί να χρειαστεί περισσότερος χρόνος για να κατανοήσετε αυτές τις αφαιρέσεις."

Τι είναι μια λειτουργική γλώσσα, ακριβώς;

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

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

Αλλά ο προτιμώμενος ορισμός του blog Clojure δεν είναι απαραίτητα σωστός, λένε άλλοι. "Ο συγγραφέας επιλέγει ένα, το οποίο τυχαία ταιριάζει καλύτερα με το Clojure - δεν είναι περίεργο, αυτό είναι ένα blog Clojure", λέει ο Odersky της Scala. "Έχω μια ερμηνεία που είναι κοντά του, αλλά όχι η ίδια."

Μια συνάρτηση, λέει ο Odersky, είναι ένα κομμάτι κώδικα που χαρτογραφεί τις εισόδους στις εξόδους και δεν έχει άλλα εφέ πέρα ​​από αυτό. «Είναι ο μαθηματικός ορισμός της συνάρτησης που χρησιμοποιούμε εδώ. Μερικές φορές αυτές οι συναρτήσεις ονομάζονται« καθαρές », για να τις διακρίνουμε από, ας πούμε, τις συναρτήσεις στο C.» Μια λειτουργική γλώσσα επικεντρώνεται στον προγραμματισμό με καθαρές λειτουργίες, καθιστώντας το εύκολο και ισχυρό να το κάνει, λέει ο Odersky, ο οποίος ίδρυσε την Typesafe, τον πάροχο της πλατφόρμας ανάπτυξης εφαρμογών Typesafe JVM.

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

Ο προγραμματιστής Clojure, Rich Hickey, ο οποίος είναι επίσης CTO στον προγραμματιστή συστημάτων Cognitect, συμφωνεί με μια κύρια διαμάχη του blog Clojure. "Το άρθρο επισημαίνει σωστά ότι οι λειτουργίες πρώτης τάξεως ή υψηλότερης τάξης δεν είναι ο λειτουργικός προγραμματισμός. Ο λειτουργικός προγραμματισμός είναι να κάνει τον προγραμματισμό περισσότερο σαν μαθηματικά", λέει. Αυτό σημαίνει ότι, εξακολουθεί να υπάρχει ένα φάσμα ορισμών για λειτουργικό προγραμματισμό, λέει ο Hickey.

Η Stephens της Microsoft βλέπει λειτουργικές δυνατότητες που εκτείνονται πέρα ​​από τις γλώσσες μόνο. «Η πιο δημοφιλής γλώσσα λειτουργικού προγραμματισμού στον κόσμο είναι το Excel», λέει. Ένα απλό φύλλο εργασίας του Excel μπορεί να έχει μια στήλη με μια δέσμη τιμών σε αυτό, όπως το A1 X 2. "Αυτή είναι μια καθαρή συνάρτηση στο A1 και το A1 δεν αλλάζει, οπότε υπολογίζετε τιμές από αυτά τα υπάρχοντα δεδομένα."

Η τεχνολογία της Microsoft-Language-Integrated Query (Linq) παρέχει επίσης λειτουργικό προγραμματισμό, λέει. "Σχεδόν κάθε γλώσσα προγραμματισμού υιοθετεί χαρακτηριστικά από λειτουργικές γλώσσες."

Ο Stephens αναφέρει αμετάβλητα δεδομένα ως κρίσιμα για τον λειτουργικό προγραμματισμό. Ταυτόχρονα - προγράμματα με πολλαπλά νήματα που λειτουργούν ταυτόχρονα σε δεδομένα - επωφελούνται επίσης από αμετάβλητα δεδομένα, σημειώνει. "Καλούμε [F #] μια λειτουργική πρώτη γλώσσα επειδή προέρχεται από μια κληρονομιά άλλων γλωσσών." Υποστηρίζει επίσης αντικειμενοστρεφή προγραμματισμό και λειτουργεί με C # και Visual Basic, λέει.

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

Τι ακολουθεί για τις τρεις κορυφαίες λειτουργικές γλώσσες

Η 13χρονη Scala είναι μια πρωταρχική γλώσσα στην επιστήμη των δεδομένων, λέει ο ιδρυτής της Scala Odersky. Υποστηρίζεται στο JVM, έχει περίπου 400.000 έως 500.000 χρήστες. Σχέδια βραχυπρόθεσμα απαιτούν βελτιστοποίηση για το Java 8, στο οποίο οι οδηγίες bytecode από την πιο πρόσφατη τυπική αναβάθμιση Java θα επέτρεπαν στη Scala να δημιουργήσει αποδοτικότερο κώδικα.

Μακροπρόθεσμα, η Scala θα αποκτήσει ένα σύστημα τύπου καθαρισμού, ασφαλέστερες μακροεντολές και περισσότερη υποστήριξη πλατφόρμας, με ένα back-compiler LLVM υπό εξέταση. Περαιτέρω βελτιώσεις προγραμματίζονται για τη βελτίωση της χρηστικότητας του Scala.js, για τη σύνταξη του Scala σε JavaScript.

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

Το 11χρονο F # ιδρύθηκε από τη Microsoft Research από τον Don Syme και επιβλέπεται από το F # Foundation. Χρησιμοποιείται σε ένα ευρύ φάσμα εφαρμογών και εκτελείται σε Linux, OS X, Android, iOS, Windows και προγράμματα περιήγησης. "Αυτό που δουλεύουμε τώρα είναι να το κάνουμε να λειτουργεί με το .Net Core", μια ανοιχτή πηγή, διαμορφωμένη πλατφόρμα modular έκδοση του .Net Framework, λέει ο Stephens. Η συμβολοσειρά παρεμβολή, που διευκολύνει την εγγραφή χορδών, βρίσκεται στον πίνακα σχεδίασης.