ML (linguaggio di programmazione): differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: (ri)aggiungo asterisco prima del template {{Collegamenti esterni}} (come da manuale)
Approfondimento sul meccanismo di valutazione delle espressioni di ML.
 
Riga 23: Riga 23:
La combinazione di tutte queste caratteristiche ha dato vita ad uno dei migliori compilatori disponibili [https://web.archive.org/web/20120831065317/http://shootout.alioth.debian.org/].
La combinazione di tutte queste caratteristiche ha dato vita ad uno dei migliori compilatori disponibili [https://web.archive.org/web/20120831065317/http://shootout.alioth.debian.org/].


A differenza di Haskell, ML usa un meccanismo di valutazione rapido (immediato): tutte le sottoespressioni che formano un'espressione sono sempre valutate (ad eccezione delle espressioni condizionali). Come conseguenza non si possono creare liste infinite.
A differenza di Haskell, ML implementa un meccanismo di valutazione immediato ([[Valutazione eager|eager evalutation]]): vengono sempre valutati tutti gli operandi e poi applicati gli operatori (ad eccezione delle espressioni condizionali che utilizzano sempre la [[valutazione pigra]]). Come conseguenza non si possono creare liste infinite.
Tuttavia, la [[valutazione pigra]] (lazy evaluation) può essere simulata, e quindi anche la creazione di liste infinite, attraverso l'utilizzo di funzioni anonime.
Tuttavia, la [[valutazione pigra]] (lazy evaluation) può essere simulata su ogni espressione attraverso l'utilizzo di funzioni anonime, e quindi consentendo anche la creazione di liste infinite.


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 Sharp|F#]], [[Cyclone (linguaggio di programmazione)|Cyclone]] e [[Nemerle]]).
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 Sharp|F#]], [[Cyclone (linguaggio di programmazione)|Cyclone]] e [[Nemerle]]).

Versione attuale delle 10:07, 6 mag 2024

ML
linguaggio di programmazione
AutoreRobin Milner
Data di origine1973
Paradigmiprogrammazione procedurale, programmazione funzionale e programmazione imperativa
Influenzato daISWIM

ML è un linguaggio di programmazione funzionale general purpose sviluppato dall'équipe di Robin Milner presso l'Università di Edimburgo alla fine degli anni 70, con una sintassi ispirata ad ISWIM. Storicamente, ML sta per MetaLanguage (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 inserire quasi tutti i tipi senza bisogno di dichiarazioni.

ML viene definito come linguaggio funzionale impuro, perché a differenza di altri linguaggi 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 implementa un meccanismo di valutazione immediato (eager evalutation): vengono sempre valutati tutti gli operandi e poi applicati gli operatori (ad eccezione delle espressioni condizionali che utilizzano sempre la valutazione pigra). Come conseguenza non si possono creare liste infinite. Tuttavia, la valutazione pigra (lazy evaluation) può essere simulata su ogni espressione attraverso l'utilizzo di funzioni anonime, e quindi consentendo anche la creazione di liste infinite.

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

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh87004533 · J9U (ENHE987007541665305171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica