ML (γλώσσα προγραμματισμού)
Η ML είναι μια συναρτησιακή γλώσσα προγραμματισμού γενικής χρήσης, που αναπτύχθηκε από τον Ρόμπερτ Μίλνερ και άλλους στο τέλος της δεκαετίας του 1970 στο πανεπιστήμιο του Εδιμβούργου.
Η σύνταξη της ML είναι εμπνευσμένη από την ISWIM.
Τα αρχικά ML σημαίνουν Meta-Language (μετα-γλώσσα), μιας και ο σκοπός της ήταν η ανάπτυξη τακτικών για αποδείξεις (proof tactics) στο σύστημα αποδείξεων LCF.
Η γλώσσα pplambda του LCF είναι συνδυασμός του πρωτοβάθμιου προτασιακού λογισμού (first-order predicate calculus) και του πολυμορφικού λογισμού λάμδα με απλούς τύπους (simply-typed polymorphic lambda-calculus), και χρησιμοποιούσε την ML ως μετα-γλώσσα.
Η ML είναι γνωστή για τη χρήση του αλγόριθμου Χίντλεϋ-Μίλνερ για την εξαγωγή τύπων (type inference), που μπορεί να συνάγει αυτόματα τους τύπους των περισσοτέρων εκφράσεων της γλώσσας, χωρίς να χρειάζεται σαφείς προσδιορισμούς τύπων από τον προγραμματιστή.
Περιγραφή
Η ML συχνά αναφέρεται ως ακάθαρτη συναρτησιακή γλώσσα, επειδή επιτρέπει παρενέργειες, και επομένως διαδικαστικό προγραμματισμό, σε αντίθεση με αμιγώς συναρτησιακές γλώσσες όπως η Haskell.
Για αυτό το λόγο λέγεται και γλώσσα προγραμματισμού μικτού προτύπου.
Χαρακτηριστικά της ML περιλαμβάνουν την στρατηγική υπολογισμού της κλήσης κατά τιμή (call-by-value), συναρτήσεις πρώτης τάξης, αυτόματη διαχείριση μνήμης με συλλογή απορριμάτων, παραμετρικό πολυμορφισμό, στατικούς τύπους, εξαγωγή τύπων (type inference), αλγεβρικούς τύπους δεδομένων (algebraic datatypes), ταίριασμα προτύπων (pattern matching) και εξαιρέσεις.
Αντίθετα με τη Haskell, η ML χρησιμοποιεί πρόθυμη αποτίμηση (eager evaluation), που σημαίνει ότι όλες οι υπο-εκφράσεις μιας έκφρασης αποτιμώνται.
Αποτέλεσμα είναι ότι δεν μπορούν να χρησιμοποιηθούν άπειρες λίστες ως έχει.
Παρόλα αυτά, η οκνηρή αποτίμηση (lazy evaluation) και επομένως και οι άπειρες δομές, μπορούν να προσομοιωθούν με τη χρήση ανώνυμων συναρτήσεων.
Σήμερα υπάρχουν αρκετές γλώσσες στην οικογένεια της ML.
Οι δύο κύριες διάλεκτοι είναι η Standard ML και η Caml, αλλά υπάρχουν και άλλες, όπως η F#.
Ιδέες από την ML έχουν επηρεάσει πολυάριθμες άλλες γλώσσες όπως τη Haskell, τη Cyclone και τη Nemerle.
Τα δυνατά σημεία της ML συγκεντρώνονται συνήθως στο σχεδιασμό και χειρισμό γλωσσών (μεταγλωττιστές, αναλυτές, αποδείκτες θεωρημάτων, κλπ), αλλά είναι γλώσσα γενικής χρήσης, και χρησιμοποιείται επίσης στη βιοπληροφορική (bioinformatics), σε οικονομικά συστήματα, και άλλες εφαρμογές.
