This blog is updated daily.
A general description is here.
The byte code evaluator now uses less C stack space for recursive calls to byte-compiled functions. It also makes more of an effort to avoid allocations for scalar return values.
If the ‘libdeflate’ library and headers are available, ‘libdeflate’ rather than ‘libz’ is used to (de)compress R objects in lazy-load databases. Typically tasks spend up to 5% of their time on such operations, although creating lazy-data databases is one of the exceptions.
This can be suppressed if the library is available by the ‘configure’ option ‘--without-libdeflate-compression’.
No default C++ compiler is set if no C++17 compiler is detected: there is no longer an automatic fallback to C++14 or C++11.
Compilers from the last five years should have sufficient support: for others macros ‘CXX’ and ‘CXXSTD’ can be set in file ‘config.site’ to provide a fallback if needed.
The Objective-C++ compiler now by default uses the standard selected by R for C++ (currently C++17) rather than the default standard for the C++ compiler (which on macOS is still C++98).
‘mkCharLenCE’ was incorrectly documented to take a ‘size_t’ length but was implemented with ‘int’ (and character strings in R are limited to 2^31 - 1 bytes).
‘R CMD check --as-cran’ now runs \donttest examples (which are run by ‘example()’) instead of instructing the tester to do so. This can be temporarily circumvented during development by setting environment variable ‘_R_CHECK_DONTTEST_EXAMPLES_’ to a false value.