Da LINQ a F#


Il titolo di questo post dovrebbe in effetti vedere invertiti i due linguaggi che ho indicato; considerato però che LINQ è già presente su tutte le nostre macchine che hanno installato Visual Studio 2008 (e in alcuni casi anche la versione 2005), mentre F# si deve scaricare a parte, credo che all’esterno del mondo accademico gli sviluppatori che si avvicinano a F# siano in buona parte attratti dall’interesse di mantenere ed estendere i benefici offerti da LINQ al di fuori degli scenari dove finora lo hanno finora utilizzato.

Chi utilizza o ha anche solo assistito a qualche presentazione su LINQ , avrà percepito infatti i vantaggi di utilizzare un linguaggio funzionale che permette di passare da un tipo di programmazione imperativo ad uno dichiarativo; come dico a volte nei miei seminari, questa è un po’ la differenza che passa fra salire su un taxi e dire al guidatore "giri a destra, avanti dritto, poi a sinistra etc" invece che semplicemente "mi porti all’aeroporto"; in teoria, se siete esperti della materia, forse con le vostre indicazioni riuscireste a guadagnare qualche minuto sull’arrivo, ma a costo di uno sforzo molto maggiore e rinunciando ad un risultato che era comunque garantito e mediamente efficiente.

Scopo di questo post non è comunque parlare di LINQ, di cui trovate risorse tecniche in abbondanza -chi è interessato può guardare per esempio le mie presentazioni e relativi laboratori che utilizzo nei seminari in Università- bensì di utilizzare i suoi concetti per comprendere come stanno evolvendo i linguaggi di programmazione -in particolare quelli legati al framework .NET- per coprire nuove esigenze legate all’era dello sviluppo concorrente e dello sviluppo a componenti.

LINQ fornisce infatti un assaggio di questi vantaggi; in particolare, integrato in C# e VB.NET permette manipolazione e trasformazione di dati di vario genere (XML, SQL, Flicker, Active Directory, SharePoint, …), ma in ogni caso esposti in forma tabellare (riga/colonna, proprietà/valore, campo/record etc.).

F# mantiene ed estende le caratteristiche di LINQ come la combinazione di generics, programmazione funzionale, type inference, creazione di modelli dati a partire da modelli astratti (operazione chiamata in gergo expression reification) ed extension methods, ma in generale può essere utilizzato come linguaggio di sviluppo completo grazie a carattestiche quali efficienza (con prestazioni paragonabili a quelle di C# e C++), strong typing, scripting e piena integrazione con framework .NET e Visual Studio 2008. Diversamente dai linguaggi statici, esso supporta numerose tecniche tipiche dei linguaggi dinamici come reflection e property discovery ma al pari di C# può utilizzare funzioni imperative: non a caso, lo stesso autore lo definisce un linguaggio funzionale-imperativo.

La curva di apprendimento può essere un po’ ripida e non troppo breve, ma si identificano poi alcune aree applicative in cui l’accoppiata F# / .NET si esprime al meglio; in particolare, grazie al fatto che F# deriva da CAML -con cui è quasi totalmente compatibile- e in generale dalla famiglia di linguaggi ML (il cui paradigma prevede alla base di tutto la valutazione di funzioni matematiche) e al tempo stesso sfrutta il modello a oggetti delle librerie .NET, risulta estremamente potente per realizzare applicazioni scientifico-matematiche e in generale algoritmi rivolti alla verifica di espressioni, calcolo parallelo, ottimizzazioni, verifiche hardware e software, analisi simboliche:

 vfsi-prototype

 

Vi lascio con un saluto a tema: scaricate e installate il compilatore (è del 19/05/08 la versione 1.9.4.17), create un nuovo progetto vuoto, scrivete queste righe e compilatele:

let () = System.Console.Write "Inserisci il tuo nome: "
let nome = "Ciao " + System.Console.ReadLine()
let () = System.Console.WriteLine nome

 

Mauro

 

Riferimenti:


Comments (4)

  1. Ciao Mauro,

    vedo con piacere che F# sta attirando sempre più persone!

    Faccio un pò di spam visto che è gestito da me, ma ti volevo segnalare il blog FSharp.it (www.fsharp.it) per trovare degli esempi pratici di applicazione di questo nuovo linguaggio.

    I contenuti sono scritti in inglese, ma questo non dovrebbe essere un problema per chi si occupa di informatica, soprattutto se vuole restare al passo con la tecnologia, non credi?

  2. europemauromi says:

    Ciao Claudio,

    certamente hai ragione, sia sull’interesse crescente in questo avvincente linguaggio funzionale che sul fatto che l’inglese è un must per noi informatici.

    Grazie per il riferimento al tuo blog. Aggiungo anche il link ad una serie di tutorial curati da Giuseppe Maggiore, uno dei nostri brillanti Student Partner: http://vs85team.spaces.live.com/blog/cns!B49FFA0EB319A219!387.entry.

    Mi fa piacere che il post sia piaciuto, se riesco ne pubblicherò un altro in giornata su un progetto F# molto interessante curato dall’Universtià di Pisa.  

    STAY TUNED!

  3. Facendo seguito al recente post su F# , vi segnalo il progetto VSLab , coordinato da Antonio Cisternino

  4. Una piacevole novità ci attende al rientro dalle ferie (per chi ci è andato :-)): è stata