а правильно ли я понимаю, что вот тут
https://ru.wikipedia.org/wiki/Стратегия_вычисления#.D0.92.D1.8B.D0.B7.D0.BE.D...
написана чушь?
Там утверждается, что *как правило* каждый раз происходит копирование
обычно посредством копирования этого значения в новую область памяти). При этом, если язык разрешает функциям присваивать значения своим параметрам, то изменения будут касаться лишь этих локальных копий, но видимые в месте вызова функции значения останутся неизменными по возвращении.
Версия для любителей плеваться на рупедию
Call-by-value evaluation is the most common evaluation strategy, used in languages as different as C and Scheme. In call-by-value, the argument expression is evaluated, and the resulting value is bound to the corresponding variable in the function (frequently by copying the value into a new memory region).
разберем на примере scheme, который приведен там в качестве примера, пошагово
(define (tst x) (write x) (set! x b) (write x))
(define a 1)
(define b 2)
(tst a)
;out: 12
1 (tst a)
— вычисляем a; связываем значение a (1) с идентификатором x
2.(write x)
— вычисляем x; выводим вычисленное значение x (1)
3. (set! x b)
— вычисляем b; связываем значение (2) c идентификатором x.
4 Повторяем шаг 2
Какое копирование они тут увидели? ЕМНИП, копирования по-дефолту вообще никогда не происходит
Все то же самое и в других языках, с которыми я знаком.
Там действительно чушь написана, или я что-то не так понял? Какой вообще смысл может быть в копировании, в данном случае? Оно ведь ничего не даст, кроме оверхед по памяти, и дополнительной путаницы в коде.