R中的copy-on-modify语义到底是什么,以及规范源在哪里?

R中的copy-on-modify语义到底是什么,以及规范源在哪里?

每隔一段时间我就会遇到R具有复制修改语义的概念,例如在Hadley的devtools wiki中

大多数R对象具有复制修改语义,因此修改函数参数不会更改原始值

我可以将这个术语追溯到R-Help邮件列表。例如,Peter Dalgaard在20037月写道:

R是一种函数式语言,具有惰性求值和弱动态类型(变量可以随意更改类型:a < - 1; a < - “a”是允许的)。从语义上讲,一切都是复制修改,尽管在实现中使用了一些优化技巧来避免最严重的低效率。

同样,Peter Dalgaard在20041月写道:

R具有复制修改语义(原则上,有时在实践中),因此一旦对象的一部分发生变化,您可能必须在新的位置查找包含它的任何内容,包括可能的对象本身。

更进一步,20002月, Ross Ihaka说:

我们付出了相当多的努力来实现这一目标。我会将语义描述为“复制修改(如有必要)”。仅在修改对象时才进行复制。(如果需要)部分意味着如果我们可以证明修改不能改变任何非局部变量,那么我们就可以继续修改而不需要复制。

它不在手册中

无论我搜索多么努力,我都无法在R手册中找到“复制修改”的参考,无论是在R语言定义还是在R Internals中

我的问题有两个部分:

  1. 这在哪里正式记录?

  2. 复制修改如何工作?

例如,谈论“传递引用”是否合适,因为承诺传递给函数?


呼啦一阵风
浏览 649回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP