Hin und wieder stoße ich auf die Vorstellung, dass R eine Semantik zum Kopieren und Ändern hat , zum Beispiel in Hadleys Devtools-Wiki .
Die meisten R-Objekte verfügen über eine Semantik zum Kopieren und Ändern, sodass durch Ändern eines Funktionsarguments der ursprüngliche Wert nicht geändert wird
Ich kann diesen Begriff auf die R-Help-Mailingliste zurückführen. Zum Beispiel schrieb Peter Dalgaard im Juli 2003 :
R ist eine funktionale Sprache mit verzögerter Auswertung und schwacher dynamischer Typisierung (eine Variable kann den Typ nach Belieben ändern: a <- 1; a <- "a" ist zulässig). Semantisch ist alles Copy-on-Modify, obwohl bei der Implementierung einige Optimierungstricks verwendet werden, um die schlimmsten Ineffizienzen zu vermeiden.
Ebenso schrieb Peter Dalgaard im Januar 2004 :
R verfügt über eine Semantik zum Kopieren und Ändern (im Prinzip und manchmal in der Praxis). Sobald sich ein Teil eines Objekts ändert, müssen Sie möglicherweise an neuen Stellen nach allem suchen, was es enthält, einschließlich möglicherweise des Objekts selbst.
Noch weiter zurück, im Februar 2000, sagte Ross Ihaka:
Wir haben viel Arbeit investiert, um dies zu erreichen. Ich würde die Semantik als "Kopie beim Ändern (falls erforderlich)" beschreiben. Das Kopieren erfolgt nur, wenn Objekte geändert werden. Der (falls erforderlich) Teil bedeutet, dass wir, wenn wir nachweisen können, dass die Änderung keine nicht lokalen Variablen ändern kann, einfach ohne Kopieren Änderungen vornehmen.
Es ist nicht im Handbuch
Egal wie intensiv ich gesucht habe, ich kann in den R-Handbüchern weder in der R-Sprachdefinition noch in den R -Interna einen Verweis auf "Copy-on-Modify" finden
Frage
Meine Frage besteht aus zwei Teilen:
- Wo ist das formal dokumentiert?
- Wie funktioniert Copy-on-Modify?
Ist es zum Beispiel richtig, von "Pass-by-Reference" zu sprechen, da ein Versprechen an die Funktion weitergegeben wird?