Linguaggi funzionali: cosa sono, dove stanno andando

Anche se alcuni sostengono esattamente cosa sia, la programmazione funzionale continua ad attrarre sviluppatori. E tre dei linguaggi funzionali più popolari - Clojure, F # e Scala - sono disponibili per miglioramenti.

La programmazione funzionale ha un fascino fondamentale per alcuni sviluppatori, afferma il fondatore di Scala Martin Odersky: "I programmatori in quel segmento amano la programmazione funzionale perché rende il codice più chiaro, meglio strutturato e previene molte classi di errori". Ma alcuni sostengono che la programmazione funzionale porti a un software meno efficiente.

La programmazione funzionale richiede anche di pensare alla programmazione in un modo nuovo, afferma David Stephens, program manager di Microsoft per .Net e portavoce di F #. Le astrazioni possono essere un problema: "Quando rendi il codice più astratto, quando ti allontani dalla manipolazione dei bit e dai cicli espliciti, può essere necessario più tempo per comprendere queste astrazioni".

Cos'è esattamente un linguaggio funzionale?

Nei suoi termini più elementari, la programmazione funzionale riguarda il trattamento del calcolo come funzioni matematiche. Oltre ai linguaggi fatturati come funzionali dall'inizio, Java e C # sono diventati più funzionali aggiungendo il supporto per le espressioni lambda.

Ma una definizione precisa di programmazione funzionale può essere difficile da definire. Il blog di Clojurefun cita diverse definizioni che ritiene non corrette, inclusa la definizione della programmazione funzionale come abilitazione di uno stile funzionale con funzioni di ordine superiore o di un linguaggio che supporta lambda. Dice che la definizione corretta è un linguaggio che enfatizza funzioni e dati immutabili.

Ma la definizione preferita del blog Clojure non è necessariamente corretta, dicono altri. "L'autore ne sceglie uno, che incidentalmente si adatta meglio a Clojure - non c'è da stupirsi, questo è un blog di Clojure", dice Odersky di Scala. "Ho un'interpretazione che è vicina alla sua, ma non la stessa."

Una funzione, dice Odersky, è un pezzo di codice che mappa gli input sugli output e non ha altri effetti oltre a questo. "È la definizione matematica di funzione che stiamo usando qui. A volte queste funzioni sono chiamate 'pure', per distinguerle, diciamo, da funzioni in C." Un linguaggio funzionale si concentra sulla programmazione con funzioni pure, che lo rendono facile e potente farlo, afferma Odersky, che ha fondato Typesafe, il fornitore della piattaforma di sviluppo di applicazioni JVM Typesafe.

La programmazione funzionale può essere combinata con altri paradigmi, osserva. "Ad esempio, funzionale va molto bene con orientato agli oggetti. Scala è un linguaggio funzionale in questo senso. Sono d'accordo che il solo fatto di avere lambda non rende funzionale un linguaggio; è necessario ma non sufficiente."

Lo sviluppatore di Clojure Rich Hickey, che è anche CTO presso lo sviluppatore di sistemi Cognitect, concorda con una tesi principale del blog Clojure. "L'articolo sottolinea correttamente che le funzioni di prima classe o di ordine superiore non sono ciò che riguarda la programmazione funzionale. La programmazione funzionale consiste nel rendere la programmazione più simile alla matematica", afferma. Detto questo, rimane ancora uno spettro di definizioni per la programmazione funzionale, afferma Hickey.

Stephens di Microsoft vede le capacità funzionali che vanno oltre le sole lingue. "Il linguaggio di programmazione funzionale più popolare al mondo è Excel", afferma. Un semplice foglio di lavoro Excel potrebbe contenere una colonna con una serie di valori, come A1 X 2. "Questa è una funzione pura su A1 e A1 non cambia, quindi stai calcolando i valori da quei dati esistenti".

La tecnologia Linq (Language-Integrated Query) di Microsoft fornisce anche la programmazione funzionale, afferma. "Quasi tutti i linguaggi di programmazione ora stanno adottando funzionalità dai linguaggi funzionali."

Stephens cita i dati immutabili come critici per la programmazione funzionale. Anche la concorrenza, ovvero programmi con più thread che operano sui dati contemporaneamente, beneficia di dati immutabili, osserva. "Chiamiamo [F #] un linguaggio funzionale perché proviene da un'eredità di altri linguaggi". Supporta anche la programmazione orientata agli oggetti e funziona con C # e Visual Basic, afferma.

Hickey di Clojure vede l'adozione di linguaggi funzionali come una risposta alla crescente pressione che devono affrontare gli sviluppatori, che devono affrontare problemi più grandi in questi giorni. "Per fare ciò, devono ridurre la complessità incidentale dei loro programmi. È ormai ampiamente riconosciuto che lo stato pervasivo e gli effetti collaterali sono una fonte primaria di complessità e bug nei programmi", afferma Hickey. "Sebbene sia possibile ridurre la quantità di stato nei programmi scritti in linguaggi non funzionali, è notevolmente più facile e veloce farlo in un linguaggio che rende la programmazione funzionale idiomatica e predefinita".

Quali sono le prospettive per i tre principali linguaggi funzionali

Il tredicenne Scala è un linguaggio primario nella scienza dei dati, afferma il fondatore di Scala Odersky. Supportato sulla JVM, ha una stima di 400.000-500.000 utenti. I piani a breve termine richiedono che sia ottimizzato per Java 8, in cui le istruzioni bytecode dall'ultimo aggiornamento standard di Java consentirebbero a Scala di generare codice più efficiente.

A lungo termine, Scala avrà un sistema di tipi ripulito, macro più sicure e più supporto per la piattaforma, con un back-end del compilatore LLVM in considerazione. Sono previsti ulteriori miglioramenti per migliorare l'usabilità di Scala.js, per la compilazione di Scala in JavaScript.

Il nove anni Clojure, anch'esso basato sulla JVM, è stato utilizzato in finanza, vendita al dettaglio, software e intrattenimento, afferma Hickey. "È stato applicato in diverse aree di applicazione come elaborazione e analisi delle transazioni, big data, operazioni di rete, analisi predittiva, ricerca, sicurezza e offerte per i consumatori".

L'undicenne F # è stato fondato da Microsoft Research di Don Syme ed è supervisionato dalla F # Foundation. Viene utilizzato in un'ampia gamma di applicazioni e funziona su Linux, OS X, Android, iOS, Windows e browser. "Quello su cui stiamo lavorando ora è farlo funzionare con .Net Core," una versione modulare open source e multipiattaforma di .Net Framework, afferma Stephens. L'interpolazione delle stringhe, che semplifica la scrittura delle stringhe, è sul tavolo da disegno.