Αιωνία του η μνήμη.
monkgr έγραψε:Μήπως νὰ ξαναβλέπαμε τὸ θέμα «γλώσσα»;
Θα συμφωνήσω.
Ως ελάχιστο φόρο τιμής θα ήθελα να παραθέσω μια συνοπτική παρουσίαση της γλώσσας LISP. LISP σημαίνει LISt Processing, και είναι η δεύτερη σε παλαιότητα γλώσσα μετά τη FORTRAN. Αλλά ταυτόχρονα παραμένει η πιο πρωτοποριακή γλώσσα με δυνατότητες που πολλές γλώσσες ακόμη δεν έχουν. To 1960 ο John McCarthy δημοσίευσε ένα πρωτοποριακό άρθρο το οποίο έθεσε τα θεμέλια της γλώσσας LISP αλλά και του σύγχρονου προγραμματισμού. Αυτό που έκανε τη γλώσσα LISP πρωτοποριακή, σύμφωνα με τον P. Graham, είναι 9 χαρακτηριστικά που τώρα ίσως για πολλές γλώσσες να θεωρούνται αυτονόητα, αλλά το 1960 ήταν νέες ιδέες που έπρεπε να περάσουν χρόνια μέχρι να ενσωματωθούν από άλλες γλώσσες προγραμματισμού.
1. Η χρήση του if-then-else. Κάτι που σήμερα θεωρείται κοινός τόπος, το 1960 δεν υπήρχε. Η μόνη δυνατότητα για διακλάδωση της ροής του προγράμματος ήταν το goto. Σήμερα κανείς (θέλω να ελπίζω) δε χρησιμοποιεί goto.
2. O τύπος συνάρτησης. Στη Lisp οι συναρτήσεις είναι αντικείμενα πρώτης τάξης, όπως οι ακέραιοι, χαρακτήρες, κ.α. και μπορούν να αποθηκευτούν ως μεταβλητές. Σε πολλές γλώσσες σήμερα, πχ smalltalk, οι συναρτήσεις είναι αντικείμενα πρώτης τάξης.
3. Αναδρομή. Η αναδρομή προϋπήρχε ως μαθηματικό μοντέλο, αλλά η LISP είναι η πρώτη γλώσσα που την ενσωμάτωσε.
4. Στη LISP πρακτικά όλες οι μεταβλητές είναι δείκτες.
5. Garbage-collection. (@monkgr: επίτρεψέ μου αγγλικά. Συλλογή σκουπιδιών; Συλλογή απορριμάτων; Συλλογή αποβλήτων;) Και πάλι μόνο οι πλέον σύγχρονες γλώσσες έχουν garbage-collection.
6. Προγράμματα αποτελούμενα από εκφράσεις (expressions). Σε αντιδιαστολή με τη διαφοροποίηση στις FORTRAN-καταγόμενες γλώσσες όπου υπάρχουν statements και expressions. Αυτό δίνει τη δυνατότητα σε ένα πρόγραμμα LISP να μπορεί να αναπαρασταθεί ως ένα δέντρο εκφράσεων. Είναι απαραίτητο χαρακτηριστικό για την ύπαρξη του 8ου και 9ου χαρακτηριστικού.
7. Τύπος συμβόλου. Αυτό είναι που την έκανε γνωστή στον κόσμο της τεχνητής νοημοσύνης και συμβολικών μαθηματικών (Το maxima είναι γραμμένο σε LISP)
8. Σημειογραφία του κώδικα ως δένδρο συμβόλων. Δηλαδή ο κώδικας δεν είναι απλό κείμενο, αλλά μπορεί να αναπαρασταθεί ως ένα δενδρικό διάγραμμα, με χρήση πχ XML.
9. Τέλος, όλη η γλώσσα διαθέσιμη ανά πάσα στιγμή. Μπορεί να τροποποιηθεί κατά βούληση. Δεν υπάρχει διαφοροποίηση compile-runtime.
Τα χαρακτηριστικά 8, και 9 είναι που κάνουν τη γλώσσα LISP διαφορετική από όλες τις άλλες γλώσσες. Καμία (και δε μιλάω για τις γλώσσες scheme, clojure ή άλλες διαλέκτους της lisp) άλλη σύγχρονη γλώσσα δεν έχει αυτά τα χαρακτηριστικά. Αυτά είναι που δίνουν στη γλώσσα LISP τη δυνατότητα για macros (η σχέση με τις C macros είναι τελείως επιφανειακή). Πρακτικά οποιαδήποτε γλώσσα εφαρμόζει όλα αυτά τα χαρακτηριστικά θεωρείται διάλεκτος της LISP. Tι κάνουν οι Lisp macros; Επιτρέπουν το χειρισμό κώδικα σαν να ήταν δεδομένα. Επιτρέπουν τη δημιουργία προγραμμάτων που αυτοτροποποιούνται.
Αν και δεν είναι τόσο δημοφιλής γλώσσα είναι παντού παρούσα. Στον emacs βλεπε emacs-lisp, στο autocad βλέπε autolisp (ναι, στο γνωστό εμπορικό κλειστού κώδικα λογισμικό), στο maxima, στο audacity βλέπε nyquist, στο gimp βλέπε script-fu και σε πολλές άλλες εφαρμογές. Σύγχρονες διάλεκτοι της LISP είναι η Arc, Nu, Clojure, η οποία τρέχει στη java virtual machine, scheme, κ.α.