Час від часу я стикаюся з думкою, що R має семантику копіювання та модифікації , наприклад, у вікі devtools Хадлі .
Більшість об'єктів R мають семантику copy-on-modify, тому зміна аргументу функції не змінює вихідне значення
Я можу простежити цей термін до списку розсилки R-Help. Наприклад, Пітер Далгаард писав у липні 2003 року :
R - функціональна мова, з лінивою оцінкою та слабким динамічним набором тексту (змінна може змінювати тип за бажанням: a <- 1; a <- "a" допускається). Семантично все копіюється на модифікується, хоча при реалізації використовуються деякі прийоми оптимізації, щоб уникнути найгіршої неефективності.
Подібним чином Пітер Далгаард писав у січні 2004 року :
R має семантику копіювання-модифікації (в принципі, а іноді і на практиці), тому, коли частина об'єкта змінюється, можливо, доведеться шукати в нових місцях все, що містило його, включаючи, можливо, сам об'єкт.
Ще далі, у лютому 2000 року Росс Іхака сказав:
Ми доклали досить багато роботи, щоб це відбулося. Я б охарактеризував семантику як "копіювати при зміні (якщо потрібно)". Копіювання виконується лише тоді, коли об'єкти модифікуються. Частина (за необхідності) означає, що якщо ми можемо довести, що модифікація не може змінити будь-які нелокальні змінні, ми просто продовжуємо і модифікуємо без копіювання.
Цього немає в посібнику
Скільки б я не шукав, я не можу знайти посилання на "copy-on-modify" в посібниках R , ні у визначенні мови R, ні в R Internals
Питання
Моє запитання складається з двох частин:
- Де це офіційно задокументовано?
- Як працює копіювання на зміну?
Наприклад, чи правильно говорити про "передачу-посилання", оскільки обіцянка передається функції?