Valutazione rigorosa

La valutazione rigorosa, nota anche come valutazione desiderosa, è la strategia di valutazione utilizzata dalla maggior parte dei linguaggi di programmazione funzionale in cui un'espressione viene valutata non appena è associata a una variabile. La valutazione rigorosa è in diretta opposizione alla valutazione pigra, in cui la valutazione di un'espressione viene ritardata fino a quando non è necessario il suo valore. Haskell è il linguaggio di programmazione più popolare che utilizza la valutazione pigra. La maggior parte dei linguaggi di programmazione utilizza una valutazione rigorosa per gli argomenti delle funzioni (a volte denominati parametri) come Java, Scheme (un linguaggio Lisp) e JavaScript.

L'utilizzo di una valutazione rigorosa produce codice facilmente comprensibile in termini di ordine di esecuzione, un processo di debug più semplice rispetto ad altre strategie di valutazione e la responsabilità per le prestazioni del codice viene trasferita al programmatore, il che significa che è richiesto un attento processo di ottimizzazione del codice.


Strategie di valutazione nella programmazione

Le strategie di valutazione vengono utilizzate nei linguaggi di programmazione per determinare quando valutare gli argomenti di una chiamata di funzione e che tipo di valore passare alla funzione. Esistono molte strategie di valutazione, ma la maggior parte rientra in una delle due categorie principali: valutazione rigorosa e lazy.

Strategie di valutazione rigorose

  • Call-by-value: La strategia di valutazione più comune che consiste nel copiare il contenuto dei parametri effettivi nei parametri formali. Se la funzione è in grado di assegnare valori ai suoi parametri, viene assegnata solo la sua variabile locale, il che significa che tutto ciò che viene passato in una chiamata di funzione rimane invariato. Call-by-value non è una singola strategia di valutazione, ma piuttosto una famiglia in cui gli argomenti di una funzione vengono valutati prima di essere passati alla funzione. I linguaggi di programmazione come C, Eiffel e Common Lisp utilizzano una strategia call-by-value.
  • Call-by-reference: Un'altra strategia comune. Mentre la strategia call-by-value copia il contenuto del parametro effettivo nel parametro formale, una strategia call-by-reference copia l'indirizzo del parametro effettivo in quello formale. Una funzione riceve un riferimento implicito a una variabile utilizzata come argomento piuttosto che una copia del suo valore. C ++ utilizza la strategia di chiamata per riferimento.

Strategie di valutazione pigre

  • Ordine normale: Un'espressione viene valutata valutando ripetutamente prima l'espressione riducibile più a sinistra, più esterna.
  • Call-by-name: Il parametro effettivo viene valutato solo se utilizzato all'interno della funzione. Se un parametro non viene utilizzato nel corpo della funzione, non viene mai valutato. Se viene utilizzato più volte, viene rivalutato ogni volta che appare.
  • Call-by-macro-espansione: Simile al call-by-name ma evita la sostituzione. Fornisce agli sviluppatori un meccanismo per aggiungere nuova sintassi alla grammatica linguistica di base nota come macro. Le macro vengono espanse in codice da un preprocessore di macro.
  • Call-by-need: Un parametro viene valutato solo se utilizzato. Una volta eseguita la prima valutazione, il risultato viene memorizzato nella cache, quindi ulteriori utilizzi del parametro non richiedono una nuova valutazione.


Lascia un commento