Programmazione imperativa e funzionale

L’avvento di .NET 3.5 porterà ai linguaggi che usiamo di più (C# e VB) una serie di novità che sono principalmente destinate a supportare LINQ. Gli interventi sui linguaggi, però, hanno una portata più vasta di quello che sembra destinato a soddisfare le esigenze sintattiche di una particolare estensione “verticale” (come potrebbe essere l’integrazione delle query sui dati in un linguaggio – in realtà LINQ è qualcosa di più ma questo sarebbe argomento per un altro post).

Un tema che emerge è l’introduzione di elementi di programmazione funzionale nei linguaggi. Quando dovetti imparare il Lisp, pensavo che i linguaggi più funzionali avessero un ruolo marginale e irrilevante, credendo che fossero desitnati a estinguersi. Molti di noi sono probabilmente più abituati alla programmazione imperativa: io sono cresciuto con Pascal e C, poi C++, Delphi (quindi programmazione a oggetti), fino ad arrivare a C#. Chi è passato da VB o Clipper ha comunque una formazione analoga.

Si sa, l’esperienza porta fa acquisire nuovi punti di vista e le novità introdotte in C# 3.0 porteranno a un’evoluzione che va verso i linguaggi funzionali più che ai linguaggi dinamici, come erroneamente anche io ho avuto modo di pensare.

Perché questi aspetti sono rilevanti? Uno dei motivi è che i linguaggi funzionali consentono più facilmente di delegare al compilatore attività di parallelizzazione delle operazioni, in particolare quando si opera su dei valori (tipi value) piuttosto che su degli oggetti (tipi reference). Un altro è che la programmazione funzionale consente un approccio top-down piuttosto che bottom-up, il che ha i suoi pro (vedi Expression-based programming) e contro.

Se volete saperne di più e sentire cosa ne pensano i principali progettisti in Microsoft, non perdete questa tavola rotonda in cui potete sentire Anders Hejlsberg, Herb Sutter, Erik Meijer e Brian Beckman discutere di questi temi in maniera estremamente più competente di quanto potrebbe fare il sottoscritto.