
With a friendly Canadian hand wave from vacation in Beautiful British
Columbia, and speaking on behalf of the Rcpp Core Team, I am excited to
shared that the (regularly scheduled bi-annual) update to
Rcpp just brought version 1.1.0 to
CRAN.
Debian builds haven been prepared and
uploaded, Windows and macOS builds should appear at CRAN in the next few
days, as will builds in different Linux distribution and of course
r2u should catch up
tomorrow as well.
The key highlight of this release is the switch to C++11 as minimum
standard.
R itself did so in
release 4.0.0 more than half a decade ago; if someone is really tied to
an older version of R
and an equally old compiler then using an
older
Rcpp with it has to be
acceptable. Our own tests (using continuous integration at
GitHub) still go back all the way to R
3.5.* and work fine (with a new-enough compiler).
In the
previous release post, we commented that we had only reverse
dependency (falsely) come up in the tests by
CRAN, this time there was none
among the well over 3000 packages using
Rcpp at
CRAN. Which really is quite
amazing, and possibly also a testament to our rigorous continued testing
of our development and snapshot releases on the key branch.
This release continues with the six-months January-July cycle started
with
release
1.0.5 in July 2020. As just mentioned, we do of course make interim
snapshot dev or rc releases available. While we not longer regularly
update the
Rcpp drat
repo, the
r-universe
page and repo now really fill this role admirably (and with many
more builds besides just source). We continue to strongly encourage
their use and testing I run my systems with these versions which tend to
work just as well, and are of course also fully tested against all
reverse-dependencies.
Rcpp has long established itself
as
the most popular way of enhancing
R with C or C++ code. Right now,
3038 packages on
CRAN depend on
Rcpp for making analytical code go
faster and further. On CRAN, 13.6% of all packages depend (directly) on
Rcpp, and 61.3% of all compiled
packages do. From the cloud mirror of CRAN (which is but a subset of all
CRAN downloads),
Rcpp has been
downloaded 100.8 million times. The two published papers (also included
in the package as preprint vignettes) have, respectively, 2023 (
JSS, 2011) and 380 (
TAS, 2018)
citations, while the the
book (Springer useR!,
2013) has another 695.
As mentioned, this release switches to C++11 as the minimum standard.
The
diffstat display in the
CRANberries
comparison to the previous release shows how several (generated)
sources files with C++98 boilerplate have now been removed; we also
flattened a number of
if/
else sections we no
longer need to cater to older compilers (see below for details). We also
managed more accommodation for the demands of tighter use of the C API
of R by removing
DATAPTR and
CLOENV use. A
number of other changes are detailed below.
The full list below details all changes, their respective PRs and, if
applicable, issue tickets. Big thanks from all of us to all
contributors!
Changes in
Rcpp release version 1.1.0 (2025-07-01)
- Changes in Rcpp API:
- C++11 is now the required minimal C++ standard
- The
std::string_view type is now covered by
wrap() (Lev Kandel in #1356 as discussed
in #1357)
- A last remaining
DATAPTR use has been converted to
DATAPTR_RO (Dirk in #1359)
- Under R 4.5.0 or later,
R_ClosureEnv is used instead
of CLOENV (Dirk in #1361 fixing #1360)
- Use of
lsInternal switched to
lsInternal3 (Dirk in #1362)
- Removed compiler detection macro in a header cleanup setting
C++11 as the minunum (Dirk in #1364 closing #1363)
- Variadic templates are now used onconditionally given C++11 (Dirk
in #1367
closing #1366)
- Remove
RCPP_USING_CXX11 as a #define as
C++11 is now a given (Dirk in #1369)
- Additional cleanup for
__cplusplus checks (I aki in
#1371 fixing #1370)
- Unordered set construction no longer needs a macro for the
pre-C++11 case (I aki in #1372)
- Lambdas are supported in a Rcpp Sugar functions (I aki in #1373)
- The Date(time)Vector classes now have default ctor (Dirk in #1385 closing #1384)
- Fixed an issue where Rcpp::Language would duplicate its arguments
(Kevin in #1388, fixing #1386)
- Changes in Rcpp Attributes:
- The C++26 standard now has plugin support (Dirk in #1381 closing #1380)
- Changes in Rcpp Documentation:
- Several typos were correct in the NEWS file (Ben Bolker in #1354)
- The Rcpp Libraries vignette mentions
PACKAGE_types.h
to declare types used in RcppExports.cpp (Dirk in #1355)
- The vignettes bibliography file was updated to current package
versions, and now uses doi references (Dirk in #1389)
- Changes in Rcpp Deployment:
Rcpp.package.skeleton() creates URL and
BugReports if given a GitHub username (Dirk in #1358)
- R 4.4.* has been added to the CI matrix (Dirk in #1376)
- Tests involving NA propagation are skipped under linux-arm64 as
they are under macos-arm (Dirk in #1379 closing #1378)
Thanks to my
CRANberries, you
can also look at a
diff
to the previous release Questions, comments etc should go to the
rcpp-devel
mailing list off the
R-Forge page.
Bugs reports are welcome at the
GitHub issue tracker as
well (where one can also search among open or closed issues).
This post by Dirk
Eddelbuettel originated on his Thinking inside the box
blog. If you like this or other open-source work I do, you can sponsor me at
GitHub.