Programmazione funzionale: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
|||
Riga 62:
* i linguaggi non funzionali guadagnavano velocità, almeno in parte, nel lasciare al programmatore alcuni compiti di livello più basso.
Questi compiti di basso livello erano il [[w:bound checking|bound-checking]], ovvero controllare i valori assunti dagli indici dei [[w:buffer|buffer]] per evitare [[w:overflow
Proprio per la necessità del mondo informatico moderno di sviluppare programmi velocemente e esenti da bug, anche a scapito di un po' di efficienza, anche i linguaggi imperativi moderni stanno includendo queste tecniche di gestione automatica dei compiti di basso livello. Ciò fa sì che oggi le performance dei linguaggi funzionali e dei linguaggi imperativi convergano. Per programmi che passano la maggior parte del tempo facendo computazioni numeriche, alcuni linguaggi funzionali (come l'[[w:Objective Caml|Ocaml]] e il [[w:Clean (linguaggio di programmazione)|Clean]]) possono avvicinarsi alla velocità del C, mentre per programmi che gestiscono grandi [[w:Matrice (matematica)|matrici]] e [[w:Database|basi di dati]] multidimensionali, i linguaggi funzionali [[w:Programmazione ad array|ad array]] (come il [[w:J (linguaggio di programmazione)|J]] e il [[w:K (linguaggio di programmazione)|K]]) sono solitamente più veloci dei programmi C non ottimizzati. Comunque, i linguaggi puramente funzionali possono diventare considerevolmente più lenti di quelli imperativi quando manipolano grandi strutture dati, per via dell'utilizzo della memoria meno efficiente.
|