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

  • Anonymous
    July 07, 2008
    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?

  • Anonymous
    July 07, 2008
    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!

  • Anonymous
    July 09, 2008
    Facendo seguito al recente post su F# , vi segnalo il progetto VSLab , coordinato da Antonio Cisternino

  • Anonymous
    September 01, 2008
    Una piacevole novità ci attende al rientro dalle ferie (per chi ci è andato :-)): è stata