On Thu, Mar 23, 2023 at 4:57 PM Gabriel Becker <gabembec...@gmail.com> wrote:
> Thanks for being interested in making R better. Its great to see engagement 
> from a new "virtual face", so to speak. That said, without speaking for 
> R-core, my experience is that the R-project and R-core team place a very high 
> premium on backwards compatibility.

Yes, this is something I value in the software I use: backwards
compatibility should be of utmost importance.

However, there's a difference between being extremely dutiful with
backwards-incompatible changes, and making them taboo. There's such a
thing as too much inflexibleness. And you must make
backwards-incompatible changes at some point. Otherwise your software
eventually becomes stale and obsolete.

> They will make breaking changes, on occasion, but its rare and extreme for 
> them to do so.

As it should be. But rare doesn't mean non-existent.

> I personally  don't think the amount of convenience/modern conceptual best 
> practices adherence we're talking about here rises to the level of justifying 
> a breaking change put in quickly.

Let me put it this way: I work with several dozens of projects on my
Linux system, and R is the *only* one that creates a directory
directly on top of my home directory, it has been the only one doing
so for at least the past 10 years, if not *ever*.

Most projects with poor considerations towards the user's home
directory at least have the decency to start the name of the directory
with a dot: e.g. ~/.R (as opposed to ~/R).

But I'm a programmer, R is just one of the many projects I dabble
with. If on the other hand R is the main project *you* work with (if
not the only one), then I can imagine how *you* don't see a problem.
But that doesn't mean there isn't one.

I bet many casual users of R are annoyed by precisely the same thing,
but they aren't going to bother investigating and contacting you like
I did.

> As for why I'm calling this a breaking change, see inline:
>
> On Thu, Mar 23, 2023 at 12:49 PM Felipe Contreras 
> <felipe.contre...@gmail.com> wrote:
>>
>> > Just expand %U to both:
>> >
>> >             paste(c(
>> >             file.path(home, ".local", "lib", "r", x.y),
>> >             file.path(home, "R", paste0(R.version$platform, "-library"), 
>> > x.y)
>> >             ), collapse = ":")
>> >
>> > Then R would install packages to the new location in new installations
>> > by default, but still use packages from the old location if present.
>>
>> This would work, would it not?
>
>
> So off the top of my head, this would mean that people who have versions of R 
> from before and after that change installed simultaneously would, by default 
> have package libraries that live in completely different places on the drive.
>
> Does that preclude a change like this from ever being made? No, but it does 
> seem more like a major version change than a minor version change to me.
>
> For an example of why this could be a breaking change, i'd be willing to bet 
> there are shell scripts out there which assume the user directories live at 
> ~user/R/<os>/<version> and detect them as such. Do I think its common? No. Do 
> I think its the right way to do whatever that shell script is doing? No, but 
> I'd be surprised if there wasn't code that does it somewhere. And that code 
> will/would break under your proposed change.

Yes, bad code breaks. That is the nature of using bad code.

But that's why good software doesn't rely on hard-coded paths, and
instead relies on methods to fetch them automatically. If I wrote a
software that somehow needed a path to check for Ruby gems, I wouldn't
use a hardcoded path such as `$HOME/.local/share/gem/ruby/3.0.0`, I
would use the output of `ruby -e 'puts Gem.user_dir'`.

Instead of hardcoding a path, why don't you provide a functionality
similar to `ruby -e 'puts Gem.user_dir'` so that scripts can use that
instead?

That being said, I don't even buy this hypothetical scenario, because
the location where R packages are installed isn't even
`~user/R/<os>/<version>`, the <os> is always the same, what is
different is the *platform*, and it's not even <version>, it's
`major.minor`.

How is this hypothetical shell script supposed to figure out this
directory in reality? What is the actual command?

* Ruby: find $(ruby -e 'puts Gem.user_dir')
* R: find $(????)

>> > Moreover, this location is going to change the next time the minor
>> > version is bumped anyway.
>>
>> Or just change it for the next version of R.
>
>
> All of the above said, I do actually agree that it would be nice to change 
> the default in the long term (including for mac builds from source). Perhaps 
> this could be put on the list of possible changes for R 5.0, to be bundled 
> with other as-yet undecided breaking changes, members of R-core feel the same 
> way.

I'm perfectly fine with this change being part of the next major
release (as long as it actually happens at some point), but wasn't
this *already* changed?

Here's a link to a git mirror (because the last time I used svn was in 2005):

https://github.com/wch/r-source/commit/9196047eea

Isn't this a change for the default location? Not in 4.0, not in 5.0,
but in 4.2. So there's nothing that should prevent this from happening
for Linux in 4.3. Is there?

Cheers.

-- 
Felipe Contreras

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

Reply via email to