[R-pkg-devel] speeding up package code/build/test cycle
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Thu Jun 24 22:31:14 CEST 2021
On 24/06/2021 3:44 p.m., Gábor Csárdi wrote:
> On Thu, Jun 24, 2021 at 8:55 PM Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
> [...]
>> A disadvantage of the devtools method is that a regular build after
>> load_all() seems to do a full 75 sec build: load_all caches things for
>> itself, but doesn't put them in the same place as a regular build, so
>> make doesn't see the object files, and rebuilds all of them. Or at
>> least it did that last time I tried it, a few months ago.
>
> That is definitely not how load_all() should work, so this might be a
> bug. AFAIK it does not use a special cache or anything, just compiles
> the files inside the package tree, like a regular package install from
> a package tree. This is a regular install after load_all():
>
> ❯ system.time(devtools::load_all())
> ℹ Loading rgl
> This build of rgl does not include OpenGL functions. Use
> rglwidget() to display results, e.g. via options(rgl.printRglwidget = TRUE).
> user system elapsed
> 0.411 0.024 0.446
>
> ❯ q()
>
> ❯ time R CMD INSTALL .
> * installing to library ‘/Users/gaborcsardi/Library/R/4.0/library’
> [...]
> * DONE (rgl)
> R CMD INSTALL . 9.95s user 1.28s system 97% cpu 11.503 total
>
> So a load_all() that does not need to recompile anything, just reload
> the R code, takes less than half a second. After that a regular
> install from the command line takes about 12s, most of which is the
> byte compilation. If I turn byte compilation off, then it is less than
> 6s.
>
> But it is rare that you actually need to install the package while
> working on it, and you typically just use load_all() to iterate, or
> devtools::test() if you use testthat.
I'm working in RStudio on a Mac, in case that makes any difference.
I've just done the following:
1. devtools::load_all(".")
This does a full compile of the C++ source, so it's slow.
2. devtools::load_all(".")
No recompile, so really quick.
3. Click "Install and Restart" button
This does R CMD INSTALL --pre-clean .... so it's really slow.
4. Click "Install and Restart" button again
This is the fast build I was talking about: no recompiling.
5. devtools::load_all(".")
This does the full compile again, so it's slow.
So it appears that "Install and Restart" doesn't trust the object files
that load_all() produced, and load_all() doesn't trust the object files
that R CMD INSTALL produced.
This might be influenced by my choice not to "Use devtools package
functions" in the Build Tools menu. Probably the slow compile in step 3
is an RStudio issue, not a devtools issue: it used different command
line options. But the slow compile in step 5 looks like a devtools issue.
Your last paragraph is incorrect if "you" is taken to be me rather than
a generic developer: I *often* want to install the package while
working on it. I like the help system to work; I like to work on the
source code and help pages together. That may not be typical.
Certainly help pages seem to be a low priority in most tidyverse packages.
Duncan Murdoch
More information about the R-package-devel
mailing list