F#, nuovo linguaggio di programmazione del .NET framework

Con l’imminente rilascio della versione 4.0 del framework .NET e della versione 2010 di VisualStudio, Microsoft introdurrà un nuovo linguaggio in grado di sfruttare a pieno tutte le funzionalità del framework .NET. Tale linguaggio prende il nome di F#.

Al contrario del linguaggio di programmazione C#, che è un linguaggio di programmazione imperativo, F# è un linguaggio di programmazione funzionale, che a parità di C# è basato sul framework .NET. Inoltre F# e C# sono in grado di interoperare tra di loro direttamente. Questo sta a significare che F# è in grado di accedere direttamente alle API del framework .NET, come per esempio LINQ, WPF ecc.., ed inoltre eventuali librerie scritte in F# possono essere richiamate tramite altri linguaggi .NET.

F# è un linguaggio fortemente tipizzato con l’abilità di dedurre in maniera automatica il tipo di un valore. Questo consente al programmatore di non dichiarare in maniera esplicita i tipi di dati, i quali saranno ricavati dal compilatore durante la fase di compilazione del programma. F# offre comunque la possibilità di dichiarare esplicitamente i tipi di dati.

Il nuovo linguaggio non solo supporta tutti i tipi e oggetti del framework .NET, ma li estende e li categorizza come tipi immutabili (sono quelli di default e utilizzati per la programmazione funzionale) o mutabili (utilizzati per la programmazione imperativa). Per la programmazione funzionale, F# mette a disposizione del programmatore diversi construtti e un insieme di tipi immutabili come tuple, liste, record e unioni. Per la programmazione imperativa, F# supporta i cicli for e while, gli array e la creazione di tipi di Oggetti ( classi .NET).

Per vedere la differenza nell'utilizzo di un linguaggio di programmazione funzionale come F#, e di un linguaggio di programmazione imperativo come C#, osserviamo il seguente esempio per la creazione di un array con i primi 10 numeri pari:

1
2
3

int[] even = new int[10];
for (int i = 0; i < even.Length; i++)
even[i] = i * 2;

F# mette invece a disposizione dei moduli funzionali per la manipolazione di array monodimensionali, bidimensionali, tridimensionali ecc… (Array, Array2, Array3, ecc..). Utilizzando nel nostro caso il modulo Array, possiamo tradurre il precedente codice C# in codice F# nel seguente modo:

1

let even = Array.init 10 (fun i -> i * 2)

La keyword “let” viene utilizzata da F# per il binding tra i tipi di valore e i nomi di variabili. Come si vede dall’esempio, non è stato dichiarato il tipo di dati dell’array, in quanto è il compilatore che in base alla funzione di inizializzazione capisce che sarà un array di int. Attraverso questa sintassi si va a specificare la creazione di un array di 10 elementi, e l'utilizzo di una funzione di inizializzazione per ogni elemento dell’array.

Dal mio punto di vista trovo F# un linguaggio di programmazione estremamente interessante, in quanto basta specificare nella sintassi ciò che si vuole ottenere e non esattamente i singoli passi su come ottenerlo. Avremo cmq modo di vedere nei prossimi anni come tale linguaggio verrà adottato dai programmatori .NET.