wdunlap at tibco.com
Tue Mar 6 17:44:49 CET 2012
S (and its derivatives and successors) promises that functions
will not change their arguments, so in an expression like
val <- func(arg)
you know that arg will not be changed. You can
do that by having func copy arg before doing anything,
but that uses space and time that you want to conserve.
If arg is not a named item in any environment then it
should be fine to write over the original because there
is no way the caller can detect that shortcut. E.g., in
cx <- cos(runif(n))
the cos function does not need to allocate new space for
its output, it can just write over its input because, without
a name attached to it, the caller has no way of looking
at what runif(n) returned. If you did
x <- runif(n)
cx <- cos(x)
then cos would have to allocate new space for its output
because overwriting its input would affect a subsequent
I suppose that end-users and function-writers could learn
to live with having to decide when to copy, but not having
to make that decision makes S more pleasant (and safer) to use.
I think that is a major reason that people are able to
share S code so easily.
Spotfire, TIBCO Software
> -----Original Message-----
> From: oliver [mailto:oliver at first.in-berlin.de]
> Sent: Tuesday, March 06, 2012 1:12 AM
> To: William Dunlap
> Cc: Hervé Pagès; R-devel
> Subject: Re: [Rd] Julia
> On Tue, Mar 06, 2012 at 12:35:32AM +0000, William Dunlap wrote:
> > I find R's (& S+'s & S's) copy-on-write-if-not-copying-would-be-discoverable-
> > by-the-uer machanism for giving the allusion of pass-by-value a good way
> > to structure the contract between the function writer and the function user.
> Can you elaborate more on this,
> especially on the ...-...-...-if-not-copying-would-be-discoverable-by-the-uer
> What do you mean with discoverability of not-copying?
More information about the R-devel