PDA

View Full Version : La programmazione funzionale: un'opportunità, secondo openmind


Redazione di Hardware Upg
05-11-2019, 11:01
Link alla notizia: https://edge9.hwupgrade.it/news/innovazione/la-programmazione-funzionale-un-opportunita-secondo-openmind_85315.html

Michele Riva dell'italiana openmind ha parlato di programmazione funzionale a Codemotion Milano, descrivendo i vantaggi prnicipali derivanti dall'uso di questo paradigma per limitare la complessità e facilitare il lavoro degli sviluppatori

Click sul link per visualizzare la notizia.

cignox1
05-11-2019, 11:12
Posso capire la loro utilitá. Ma devo dire che, per quel pochissimo che ho usato Ocaml (o uno simile, é passato tanto tempo) l'ho trovato sia come sintassi che come utilizzo molto meno divertenti dei linguaggi derivati come sintassi dal C.

Ammetto peró che alcune proprietá (come l'assenza di side-effects) siano davvero interessanti. In C/C++ c'é il const, ma molti altri linguaggi non hanno neppure quello...

pabloski
05-11-2019, 11:47
Posso capire la loro utilitá. Ma devo dire che, per quel pochissimo che ho usato Ocaml (o uno simile, é passato tanto tempo) l'ho trovato sia come sintassi che come utilizzo molto meno divertenti dei linguaggi derivati come sintassi dal C.

Ammetto peró che alcune proprietá (come l'assenza di side-effects) siano davvero interessanti. In C/C++ c'é il const, ma molti altri linguaggi non hanno neppure quello...

Il problema è che il const non t'impedisce di manipolare strutture dati globali e nemmeno d'implementare funzioni impure.

La programmazione funzionale va molto oltre e, nel farlo, garantisce pure la thread safety.

Ed è quest'ultima la ragione per cui TUTTI i linguaggi stanno implementando costrutti funzionali.

phmk
05-11-2019, 12:59
Ci passano Windows ed Office ...:D

LukeIlBello
05-11-2019, 13:22
boh ma che è sta roba.. io mi ricordo del LISP come linguaggio funzionale, ma sta roba qui mai sentita.. "costrutti funzionali"... traducendo? :confused:

mirkonorroz
05-11-2019, 18:06
La prima volta che ho sentito di Erlang era perche' Wings 3D era (ed e') scritto in tale linguaggio. :)

frank8085
05-11-2019, 18:08
il punto è capire se un linguaggio lazy ci serva davvero per quello che stiamo facendo,
e se davvero ci serve poter definire funzioni al volo senza una definizione formale come nei linguaggi imperativi (java ha copiato il concetto di lambda espressione nella versione 8)
altre importanti vantaggi da aggiungere? io trovo che quando il codice deve leggerlo qualcun altro una definizione 'classica' di un metodo sia sempre più comprensibile
p.s io sono fermo ad Haskell quindi non so se introduce novità importanti l'Erlang

zappy
06-11-2019, 18:23
articolo incomprensibile per chi già non è un programmatore esperto.

Slater91
07-11-2019, 13:13
articolo incomprensibile per chi già non è un programmatore esperto.

Oddio, ho fatto di tutto per semplificare la cosa: non ho parlato di thread safety, di assenza di effetti collaterali, di funzioni lambda e così via, che sono in realtà la parte più caratterizzante dei linguaggi funzionali. L'unica parte che magari non è immediatamente comprensibile a chi non abbia programmato è "il concetto di utilizzo delle funzioni come argomento e come risultato di altre funzioni, come avviene nel lambda calcolo", ma basta cercare cos'è una funzione per capire questo concetto di base. Semplificare più di così non è possibile (e non è certo una cosa da programmatori esperti, dato che io stesso non lo sono).
È ovvio che per comprendere un articolo sulla programmazione in una testata specialistica bisogna avere un minimo di basi della materia specifica, così come per leggere un articolo su Le Scienze bisogna avere almeno un'infarinatura delle principali materie scientifiche o per leggere un articolo di commento a una nuova architettura di CPU bisogna avere delle basi di conoscenza sui principali elementi (clock, cache, core, controller di vario genere sono solo alcuni dei concetti minimi che si dà per scontato che chi legge un articolo del genere conosca). Non è possibile spiegare tutto da zero ogni volta: un po' di sforzo devono farlo anche i lettori, che magari possono imparare qualcosa di nuovo facendo delle ricerche in proprio.

pabloski
07-11-2019, 16:02
non so se introduce novità importanti l'Erlang

il modello di programmazione concorrente basato su attori

del resto Erlang nasce principalmente per quello

recoil
07-11-2019, 16:06
Oddio, ho fatto di tutto per semplificare la cosa: non ho parlato di thread safety, di assenza di effetti collaterali, di funzioni lambda e così via, che sono in realtà la parte più caratterizzante dei linguaggi funzionali. L'unica parte che magari non è immediatamente comprensibile a chi non abbia programmato è "il concetto di utilizzo delle funzioni come argomento e come risultato di altre funzioni, come avviene nel lambda calcolo", ma basta cercare cos'è una funzione per capire questo concetto di base. Semplificare più di così non è possibile (e non è certo una cosa da programmatori esperti, dato che io stesso non lo sono).
È ovvio che per comprendere un articolo sulla programmazione in una testata specialistica bisogna avere un minimo di basi della materia specifica, così come per leggere un articolo su Le Scienze bisogna avere almeno un'infarinatura delle principali materie scientifiche o per leggere un articolo di commento a una nuova architettura di CPU bisogna avere delle basi di conoscenza sui principali elementi (clock, cache, core, controller di vario genere sono solo alcuni dei concetti minimi che si dà per scontato che chi legge un articolo del genere conosca). Non è possibile spiegare tutto da zero ogni volta: un po' di sforzo devono farlo anche i lettori, che magari possono imparare qualcosa di nuovo facendo delle ricerche in proprio.

questo sicuramente e per quanto mi riguarda qualche articolo come questo ci sta, poi non so se il target medio del sito è interessato a questo genere di argomenti ma immagino che un'idea ce l'abbiate voi

niente Codemotion per me quest'anno quindi mi sono perso il talk ma è un argomento che ogni tanto salta fuori e che mi interessa anche se devo ammettere che nella mia code base non ne faccio largo uso, per ora

zappy
07-11-2019, 22:04
Oddio, ho fatto di tutto per semplificare la cosa: ...

beh, un'infarinatura ce l'ho, probabilmente scarsa,, ma lostesso non ho capito in cosa si differenziano questi linguaggi dagli altri :)

Nui_Mg
07-11-2019, 22:39
boh ma che è sta roba.. io mi ricordo del LISP come linguaggio funzionale, ma sta roba qui mai sentita.. "costrutti funzionali"... traducendo? :confused:
Se non ricordo male avevi detto che avevi fatto all'uni un corso di DB relazionali, allora probabilmente capirai subito questo, da quel che teoricamente ricordo:

1) Vedi l'algebra relazionale come un linguaggio di tipo Procedurale per interrogare le basi di dati relazionali.

2) Vedi il calcolo relazionale come un linguaggio di tipo Dichiarativo.

3) L'sql ha degli aspetti sia procedurali che dichiarativi.


I linguaggi Dichiarativi specificano le proprietà del risultato, cioè non si occupano tanto di specificare come fare una certa operazione ma piuttosto definiscono qual'è il risultato che si vuole ottenere.

Ecco, i linguaggi Funzionali (Lisp, Datalog, ecc.) sono di tipo Dichiarativo.

Vanno incontro al programmatore (leggibilità, debug, ecc.) ma, per quanto mi riguarda a proposito di javascript (multi-paradigma, quindi anche funzionale), non va affatto d'accordo con la mia solita ricerca dell'ottimizzazione prestazionale (quando possibile e tempo permettendo vado di vanilla javascript, no a nessun framework, ormai mi sono fatto una libreria di snippet performanti).

LukeIlBello
08-11-2019, 13:26
Se non ricordo male avevi detto che avevi fatto all'uni un corso di DB relazionali, allora probabilmente capirai subito questo, da quel che teoricamente ricordo:

1) Vedi l'algebra relazionale come un linguaggio di tipo Procedurale per interrogare le basi di dati relazionali.

2) Vedi il calcolo relazionale come un linguaggio di tipo Dichiarativo.

3) L'sql ha degli aspetti sia procedurali che dichiarativi.


I linguaggi Dichiarativi specificano le proprietà del risultato, cioè non si occupano tanto di specificare come fare una certa operazione ma piuttosto definiscono qual'è il risultato che si vuole ottenere.

Ecco, i linguaggi Funzionali (Lisp, Datalog, ecc.) sono di tipo Dichiarativo.

Vanno incontro al programmatore (leggibilità, debug, ecc.) ma, per quanto mi riguarda a proposito di javascript (multi-paradigma, quindi anche funzionale), non va affatto d'accordo con la mia solita ricerca dell'ottimizzazione prestazionale (quando possibile e tempo permettendo vado di vanilla javascript, no a nessun framework, ormai mi sono fatto una libreria di snippet performanti).

Si, ricordi bene ed è tutto chiaro l'esempio, non ho capito però COME un linguaggio dichiarativo possa performare meglio di un equivalente scritto in C :fagiano:

Nui_Mg
08-11-2019, 17:17
non ho capito però COME un linguaggio dichiarativo possa performare meglio di un equivalente scritto in C :fagiano:
Non mi sembra che qualcuno abbia mai parlato di paragoni con il C e sue performance.

LukeIlBello
09-11-2019, 14:16
Non mi sembra che qualcuno abbia mai parlato di paragoni con il C e sue performance.

eh si ho riletto l'articolo e in effetti mi ero fatto un film tutto mio :asd:
grazie per le spiegazioni comunque :D