Время от времени я сталкиваюсь с понятием, что R имеет семантику copy-on-modify, например, в Hadley devtools вики.
Большинство объектов R имеют семантику copy-on-modify, поэтому изменение функции аргумент не изменяет исходное значение
Я могу проследить этот термин обратно в список рассылки R-Help. Например, Питер Далгаард писал в июль 2003 г.:
R - функциональный язык с ленивой оценкой и слабой динамикой (переменная может изменять тип по желанию: a < - 1; a < - "a" - позволил). Семантически все копируется на модификацию, хотя некоторые оптимизационные трюки используются в реализации, чтобы избежать худшего Неэффективность.
Аналогично, Питер Далгаард писал в Jan 2004:
R имеет семантику copy-on-modify (в принципе, а иногда и в практика), поэтому, когда часть объекта меняется, вам, возможно, придется посмотреть новые места для всего, что содержало это, включая, возможно, самого объекта.
Еще дальше, в февраль 2000 Росс Ихака сказал:
Мы приложили немало усилий, чтобы это произошло. Я бы описал семантика как "копировать при изменении (если необходимо)". Копирование выполнено только когда объекты изменены. Часть (если необходимо) означает, что если мы можем доказать, что модификация не может изменить любые нелокальные переменные, то мы просто продолжаем и модифицируем без копирования.
Это не в руководстве
Независимо от того, насколько сильно я искал, я не могу найти ссылку на "copy-on-modify" в руководствах R, ни в R Определение языка, ни в R Internals
Вопрос
Мой вопрос состоит из двух частей:
- Где это официально зарегистрировано?
- Как работает копирование в режиме редактирования?
Например, правильно ли говорить о "pass-by-reference", поскольку обещание передается функции?