THE FUNCTIONAL PROGRAMMING

{ LA PROGRAMMAZIONE FUNZIONALE }


Tateo~Blog >  Learning >  Information Technology >  Programming >  Functional > 
Particolare della copertina del testo “Structure and Interpretation of Computer Programs” (SICP) utilizzato al MIT dal 1985
The advent of new hardware technologies requires a change in our programming style. Let's see what are the reasons that are driving the "imperative" era in favor of the "functional" era. We will briefly mention the main features of functional programming languages and we will mention the names of the main ones that are currently in circulation.
{ L’avvento delle nuove tecnologie hardware richiede un cambiamento del nostro stile di programmazione. Vediamo quali sono i motivi che stanno facendo tramontare l’era “imperativa” a favore di quella “funzionale”. Accenneremo brevemente alle caratteristiche principali dei linguaggi di programmazione funzionale e citeremo i nomi dei principali che sono attualmente in circolazione. }


———————————————————————————————————————————————————
Interdisciplinary Lifelong Learning and Web-based Knowledge Sharing about the following topics:
 Artificial Intelligence ~ Augmented / Virtual Reality ~ Automation ~ Electronics ~ Literature ~ Information Technology ~ Mobile Devices ~ Problem Management ~ Social Media ~ Simulation ~ Artificial Vision ~ Work Skills 
———————————————————————————————————————————————————

#TateoBlog #informationTechnology #computerScience #functionalProgramming #parallelProgramming

La fine dell’era “imperativa”. L’approccio che noi sviluppatori software siamo tradizionalmente abituati a seguire si ispira ad un paradigma ben preciso. Molti di noi sono nati con questa metodologia e forse neanche sospettiamo l’esistenza di alternative. Forse molti come me che sto scrivendo sanno che il paradigma che usualmente utilizziamo si chiama “imperativo”. Nessuno ha mai sentito l’esigenza di mettere in discussione questa metodologia in quanto le performance che si ottengono in termini di risorse impiegate e di tempi di processing non hanno sollevato l’esigenza di prendere in considerazione altre tecniche.

Le risorse hardware non sono più critiche. Oggi, però, sul mercato si affacciano sempre più prepotentemente tecnologie hardware multi-core che rendono più abbordabile l’elaborazione parallela. La memoria non rappresenta più una risorsa critica per l’elaborazione. Si osservi a titolo di esempio che il mio primo PC aveva 64K di RAM, mentre il computer da cui sto scrivendo ha 8GB di RAM : ben 130’000 volte di più!. Il mio mitico Commodore 64, inoltre, lavorava ad una frequenza di 1 MHz, mentre oggi lavoro con un processore multi-core da 3.4 GHz : ben 3’400 volte più veloce! Quindi, non dovendo più preservare il tempo di elaborazione e l’occupazione di memoria, lo stile della nostra programmazione può essere orientato alla ottimizzazione di altri aspetti che fino ad ora erano tenuti in secondo piano.

La programmazione parallela richiede uno stile differente. La tendenza a dedicarsi a nuove tecniche di ottimizzazione del codice non è una moda del momento e non è nata per soddisfare una voglia di rinnovamento. In realtà essa è figlia delle stesse innovazioni tecnologiche introdotte dall'hardware. Affinché l’architettura multi-core possa effettivamente produrre i suoi benefici è necessario che l’esecuzione del codice possa essere suddiviso in gruppi di istruzioni eseguibili contemporaneamente, ossia in parallelo. Ma ovviamente affinché il codice possa essere smistato su più processori contemporaneamente deve offrire delle garanzie maggiori in termini di condivisione e gestione della memoria, di stabilità degli algoritmi, di assenza di effetti collaterali (side-effect in lingua inglese) e di trasparenza referenziale.

La Programmazione Funzionale scende in campo. Esiste un paradigma di programmazione dei calcolatori elettronici, noto col nome di “programmazione funzionale”, che sembrerebbe essere particolarmente adatto alla tecnologia corrente caratterizzato da multi-core e calcolo parallelo. Il paradigma funzionale fino ad oggi è rimasto confinato esclusivamente all’interno di centri di ricerca e campus universitari. 

Fig. 1 : Particolare della copertina del testo “Structure and Interpretation of Computer Programs” (SICP) utilizzato al MIT dal 1985

Il mondo industriale e dello sviluppo non ha mai ben visto di buon occhio questa tecnica di programmazione in quanto ritenuta mangia-risorse e molto lenta nella gestione di grosse basi di dati. Fino a poco tempo fa non si poteva di certo dare torto. Ma oggi, grazie alla disponibilità di memorie di dimensioni sempre maggiori, all’avvento di processori veloci e multi-core, l’adozione del paradigma funzionale è diventato più abbordabile. Gli svantaggi che in passato hanno dissuaso i più dall’utilizzo di questo paradigma si sono notevolmente ridimensionati, rendendo possibile oggi di godere anche dei suoi punti di forza a cui si era rinunciato e che consistono in una maggiore stabilità delle applicazioni, nella maggiore ottimizzazione e manutenibilità del codice che può essere definito appositamente per essere eseguito in modo parallelo.

Fig. 2 : Differenze generali tra l’approccio “imperativo” e quello “funzionale”

I pregi della programmazione funzionale possono essere riassunti dai seguenti aspetti: 
• assenza di effetti collaterali
• trasparenza referenziale
• ricorsione
• thread-safe

Linguaggi di programmazione funzionali. Se in futuro, vogliamo continuare a produrre software efficiente, non possiamo prescindere dalla adozione di questo paradigma. Esistono linguaggi di programmazione orientati a questo stile, come per esempio Clojure, F# e Scala; ed altri invece utilizzabili in stile esclusivamente funzionale, come per esempio Ruby, Python e Perl.I linguaggi di programmazione sono detti funzionali quando la tecnica fondamentale per strutturare i programmi è quella di utilizzare le funzioni. L'aspetto interessante della programmazione funzionale è la capacità di costruire definizioni. Lo scopo di una definizione è quello di introdurre un legame (binding) tra un nome ed un valore. La definizione più semplice è quella che per mezzo del solo simbolo di uguaglianza associa un valore, per esempio numerico, ad un simbolo oppure ad un nome:
  #let lato = 12 ;;
Le definizioni si complicano man mano che si utilizzano espressioni matematiche più articolate.
  #let square x = x * X ;;
  #let area = square lato ;;
Un insieme di legami (bindings) è chiamato ambiente o contesto di valutazione. Il valutatore è un programma che usa le definizioni per semplificare (o alternativamente ridurre o valutare) le espressioni. Esistono delle regole di semplificazione, dette primitive, che sono definite nel valutatore stesso. Le espressioni che contengono operazioni primitive non hanno bisogno del contesto per essere valutate. L'utente interagisce col sistema sottoponendo delle espressioni che il valutatore semplifica utilizzando il contesto e/o le primitive.

Riferimenti. Per approfondire gli argomenti che ho trattato in questa pagina del mio diario potrebbero essere utili le seguenti note, riferimenti a siti internet, libri, riviste, filmati o persone:
[1] “Programmazione imperativa”, Wikipedia
[2] “La programmazione funzionale”, di Alan Gauld e traduzione di Luca Fini
[3] “Linguaggi imperativi e linguaggi funzionali”, Ok, panico
[4] “Differenze tra programmazione funzionale e programmazione imperativa (C#)”, Microsoft
[5] Note di Programmazione Funzionale, Appunti ad uso degli studenti di Programmazione, Corsi di Studio in Informatica, Università degli Studi di Pisa, Anno accademico 1998/99, Giuseppe Manco

Dello stesso argomento. La Programmazione Funzionale è un aspetto aspetto molto importante dell’Informatica moderna, soprattutto in virtù della vasta diffusione delle nuove tecnologie di calcolo parallelo, tuttavia non dimentichiamo gli altri innumerevoli aspetti della tecnologia informatica. Ti invito a proseguire la consultazione del mio diario con la lettura della seguente pagina che contiene una descrizione generale della tecnologia Informatica, ed i collegamenti alle altre pagine del mio blog che ne sviscerano gli aspetti più interessanti:


Let's keep in touch
{ Teniamoci in contatto }
I hope you enjoyed this post that belongs to the Web posting (>) section of Tateo~Blog (>), and that the notes and observations I gathered within it have met your interest. If my work has stimulated your interest, I invite you to follow the last blog updates on the following social media pages:
{ Mi auguro che tu abbia apprezzato questo post che appartiene alla sezione Web posting (>) di Tateo~Blog (>), e che le note e le osservazioni che ho raccolto al suo interno abbiano incontrato il tuo interesse. Se il mio elaborato ha stimolato il tuo interesse ti invito a seguire gli ultimi aggiornamenti del blog sulle seguenti pagine dei social media: }
  • Tateo~Blog on LinkedIn (>)
  • Tateo~Blog on Facebook (>)
or, if you prefer, you can follow and contact me directly via one of the following personal references:
  • Tateo Giovanni Battista on e-mail: tateogb@libero.it (>)
  • Tateo Giovanni Battista on mobile phone & WhatsApp : 388 8419726
  • Tateo Giovanni Battista on LinkedIn (>)
  • Tateo Giovanni Battista on Facebook (>)
  • Tateo Giovanni Battista on Twitter (>)
  • Tateo Giovanni Battista on Instagram (>)
  • Tateo Giovanni Battista on Pinterest (>)
  • Tateo Giovanni Battista on Skype : giovannibattistatateo




Something about the Tateo~Blog author  
{ Qualcosa sull'autore di Tateo~Blog }
Battista is an IT technician and also an electronic engineer specializing in industrial automation, he is keen on artificial intelligence and is an expert in artificial vision. For over three years he has been a proposal engineer at Mer Mec S.p.A. Previously, for the same company and for a duration of twelve years, he held the position of designer of artificial vision systems. He is a supporter of lifelong learning, social networking and knowledge sharing through the web. He is the author of the interdisciplinary blog Tateo~Blog. Go to the ABOUT ME page ( >>> ) for more info

{ Battista è un perito tecnico informatico ed anche un ingegnere elettronico con specializzazione in automazione industriale, è appassionato di intelligenza artificiale ed è un esperto di visione artificiale. Da oltre tre anni ricopre il ruolo di proposal engineer presso Mer Mec S.p.A. Precedentemente, per la stessa azienda e per una durata di dodici anni, ha ricoperto il ruolo di progettista di sistemi di visione artificiale. E' sostenitore del lifelong learning, del social networking e della condivisione della conoscenza per mezzo del web. Egli è l'autore del blog interdisciplinare Tateo~Blog. Vai alla pagina ABOUT ME ( >>> ) per ulteriori informazioni. }


Tateo~Blog © 27 May 2020

Nessun commento:

Posta un commento

Translate

🔌 Wearable Technologies (WT) conference

♾️ 🏠  Home    >   📝  TateoBlog     >    🔌 Wearable Technologies (WT) conference  👈 Sei qui #events #electronics #wearable­ # digi...

Most popular posts in the last week.