Some languages that recognized early design mistakes introduced a
strict mode, which applies to a local context, and enforces a safer,
more consistent API. This is a pragmatic solution, as it does not
require any changes to existing code, but still allows writing better
code in the future.

Implementing a context restricted strict mode is probably not trivial,
considering the flexibility of the language, but maybe it is worth
some thinking.

Gábor
On Tue, Sep 18, 2018 at 2:00 PM peter dalgaard <pda...@gmail.com> wrote:
>
> Yes, both are rooted in age-old design infelicities (in which, basically, 
> interactive expedience has taken precedence over consistency and generality).
>
> Unfortunately, they are quite difficult to rectify, because there are bound 
> to be countless uses of, say, diag(5) as a 5x5 identity matrix which would 
> break if it suddenly meant the 1x1 matrix(5) instead.
>
> We'd need a very carefully orchestrated warn-deprecate-defunct-newBehaviour 
> sequence, with a time scale of years, most likely. It is, in principle, 
> doable (I think), but we don't really have the mechanisms to follow through 
> on it.  Almost all developers have main job responsibilities, and it is very 
> easy to get sidetracked at the wrong moment, so most changes get done on a 
> now-or-never basis.
>
> I have toyed with the idea of setting up for version-dependent code where 
> code sections could be coded up front and then activated when the relevant 
> version is reached. Then I got swamped again...
>
> -pd
>
> > On 17 Sep 2018, at 20:08 , Barry Rowlingson <b.rowling...@lancaster.ac.uk> 
> > wrote:
> >
> > On Mon, Sep 17, 2018 at 5:22 PM, Gábor Csárdi <csardi.ga...@gmail.com>
> > wrote:
> >
> >> I would say it is a mis-feature. If the 'x' argument of diag() is a
> >> vector of length 1, then it creates an identity matrix of that size,
> >> instead of creating a 1x1 matrix with the given value:
> >>
> >> ❯ diag(3)
> >>     [,1] [,2] [,3]
> >> [1,]    1    0    0
> >> [2,]    0    1    0
> >> [3,]    0    0    1
> >>
> >> Of course this makes it cumbersome to use diag() in a package, when
> >> you are not sure if the input vector is longer than 1. This seems to
> >> be a good workaround:
> >>
> >> ❯ diag(-1, nrow = 1)
> >>     [,1]
> >> [1,]   -1
> >>
> >> Or, in general if you have vector v:
> >>
> >> ❯ v <- -1
> >> ❯ diag(v, nrow = length(v))
> >>     [,1]
> >> [1,]   -1
> >>>
> >>
> >
> > Anyone else getting deja-vu with the `sample` function?
> >
> >> sample(5:3)
> > [1] 3 5 4
> >
> > ok...
> >
> >> sample(5:4)
> > [1] 4 5
> >
> > fine...
> >
> >> sample(5:5)
> > [1] 3 1 5 2 4
> >
> > uh oh. Documented, of course.
> >
> > B
> >
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> --
> Peter Dalgaard, Professor,
> Center for Statistics, Copenhagen Business School
> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> Phone: (+45)38153501
> Office: A 4.23
> Email: pd....@cbs.dk  Priv: pda...@gmail.com
>
>
>
>
>
>
>
>
>

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to