Ho sempre pensato che passare per valore è un retaggio delle prime lingue, perché i designer non avevano mai visto nient'altro . Ma dopo aver visto i nuovi linguaggi come Go adattare lo stesso principio mi ha confuso.
L'unico vantaggio a cui riesco a pensare è che ti assicuri che il valore che stai passando non venga modificato. Ma ogni volta che devi passare una grande struttura a una funzione, devi passare il puntatore (o riferimento) per impedire la copia, se la lingua lo consente.
Per impedire la modifica dei parametri, potrebbe essere introdotto un meccanismo const
ness invece di far passare l'intera lingua per valore.
Ho fatto il codice per anni e raramente ho dovuto passare per valore. Quasi sempre, non ho bisogno che il mio valore / oggetto venga copiato in una chiamata di funzione; e spesso non ho bisogno che sia modificato all'interno della funzione *.
Qual è la motivazione alla base del passaggio delle lingue moderne per valore? Ci sono dei vantaggi di cui non sono a conoscenza?
Modifica: quando dico passare per valore, non intendo le primitive. Sono facili ed economici per passare di valore. Il mio obiettivo principale sono gli oggetti o le strutture che consistono in più di 1 primitivo e quindi costoso da copiare.
*: ho chiesto in giro e altri hanno riportato qualcosa di simile con il loro uso dei parametri.