ML (linguaggio di programmazione)
ML è l'acronimo che identifica un linguaggio di programmazione funzionale general-purpose sviluppato dall'equipe di Robin Milner presso l'Università di Edimburgo alla fine degli anni 70, con una sintassi ispirata ad ISWIM. Storicamente, ML sta per MetaLinguaggio visto che era nato per la verifica formale attraverso il theorem prover LCF (il linguaggio di cui ML rappresentava il livello meta era pplambda, una combinazione di calcolo dei predicati del primo ordine e lambda-calcolo polimorfico debolmente tipizzato). Tra i linguaggi di programmazione funzionali è tra i più noti per il suo utilizzo dell'algoritmo di inferenza dei tipi di Hindley-Milner, che riesce ad inferire quasi tutti i tipi senza bisogno di dichiarazioni.
ML viene definito come linguaggio funzionale impuro, perché a differenza di altri linguggi funzionali, come ad es. Haskell, consente la programmazione imperativa, e pertanto anche effetti collaterali.
Le caratteristiche principali di ML sono le seguenti: valutazione delle espressioni con chiamata per valore, gestione automatica della memoria attraverso un meccanismo di garbage collection, polimorfismo parametrico, tipizzazione statica, inferenza dei tipi, tipi di dati algebrici, pattern matching e gestione delle eccezioni. La combinazione di tutte queste caratteristiche ha dato vita ad uno dei migliori compilatori disponibili [1].
A differenza di Haskell, ML non usa un meccanismo di valutazione rapido (cortocircuitato): tutte le sottoespressioni componenti una espressione complessa sono sempre valutate. Come conseguenza non si possono utilizzare liste infinite. Tuttavia, la valutazione rapida (lazy evaluation) può essere simulata, e quindi anche le liste infinite, attraverso l'utilizzo di funzioni anonime.
Sono nati diversi linguaggi a partire da ML; tra questi i più popolari sono SML (Standard ML, del 1990) e Ocaml (Objective Caml). ML ha anche influenzato molti altri linguaggi, soprattutto quelli sviluppati in ambito accademico (ad es. F#, Cyclone e Nemerle).
ML è particolarmente adatto alle applicazioni teoriche come il progetto e lo sviluppo di linguaggi (compilatori, analizzatori, dimostratori di teoremi) ma ha trovato applicazione anche in ambito di bioinformatica, analisi finanziarie, ecc.
Collegamenti esterni
- (EN) Confronto dell'efficienza dei compilatori in vari linguaggi
- (EN) Introduzione a ML
- (EN) Moscow ML, una implementazione di Standard ML