The fifteenth release in the 0.12.* series of Rcpp landed on CRAN today after just a few days of gestation in incoming/.
This release follows the 0.12.0 release from July 2016, the 0.12.1 release in September 2016, the 0.12.2 release in November 2016, the 0.12.3 release in January 2017, the 0.12.4 release in March 2016, the 0.12.5 release in May 2016, the 0.12.6 release in July 2016, the 0.12.7 release in September 2016, the 0.12.8 release in November 2016, the 0.12.9 release in January 2017, the 0.12.10.release in March 2017, the 0.12.11.release in May 2017, the 0.12.12 release in July 2017, the 0.12.13.release in late September 2017, and the 0.12.14.release in November 2017 making it the nineteenth release at the steady and predictable bi-montly release frequency.
Rcpp has become the most popular way of enhancing GNU R with C or C++ code. As of today, 1288 packages on CRAN depend on Rcpp for making analytical code go faster and further, along with another 91 in BioConductor.
This release contains a pretty large number of pull requests by a wide variety of authors. Most of these pull requests are very focused on a particular issue at hand. One was larger and ambitious with some forward-looking code for R 3.5.0; however this backfired a little on Windows and is currently &quot;parked&quot; behind a #define. Full details are below.
Changes in Rcpp version 0.12.15 (2018-01-16)
Changes in Rcpp API:
Calls from exception handling to Rf_warning() now correctly set an initial format string (Dirk in #777 fixing #776).
The 'new' Date and Datetime vectors now have is_na methods too. (Dirk in #783 fixing #781).
Protect more temporary SEXP objects produced by wrap (Kevin in #784).
Use public R APIs for new_env (Kevin in #785).
Evaluation of R code is now safer when compiled against R 3.5 (you also need to explicitly define RCPP_PROTECTED_EVAL before including Rcpp.h). Longjumps of all kinds (condition catching, returns, restarts, debugger exit) are appropriately detected and handled, e.g. the C++ stack unwinds correctly (Lionel in #789). [ Committed but subsequently disabled in release 0.12.15 ]
The new function Rcpp_fast_eval() can be used for performance-sensitive evaluation of R code. Unlike Rcpp_eval(), it does not try to catch errors with tryEval in order to avoid the catching overhead. While this is safe thanks to the stack unwinding protection, this also means that R errors are not transformed to an Rcpp::exception. If you are relying on error rethrowing, you have to use the slower Rcpp_eval(). On old R versions Rcpp_fast_eval() falls back to Rcpp_eval() so it is safe to use against any versions of R (Lionel in #789). [ Committed but subsequently disabled in release 0.12.15 ]
Overly-clever checks for NA have been removed (Kevin in #790).
The included tinyformat has been updated to the current version, Rcpp-specific changes are now more isolated (Kirill in #791).
Overly picky fall-through warnings by gcc-7 regarding switch statements are now pre-empted (Kirill in #792).
Permit compilation on ANDROID (Kenny Bell in #796).
Improve support for NVCC, the CUDA compiler (Iñaki Ucar in #798 addressing #797).
Speed up tests for NA and NaN (Kirill and Dirk in #799 and #800).
Rearrange stack unwind test code, keep test disabled for now (Lionel in #801).
Further condition away protect unwind behind #define (Dirk in #802).
Changes in Rcpp Attributes:
Addressed a missing Rcpp namespace prefix when generating a C++ interface (James Balamuta in #779).
Changes in Rcpp Documentation:
The Rcpp FAQ now shows Rcpp::Rcpp.plugin.maker() and not the outdated ::: use applicable non-exported functions.
Thanks to CRANberries, you can also look at a diff to the previous release. As always, details are on the Rcpp Changelog page and the Rcpp page which also leads to the downloads page, the browseable doxygen docs and zip files of doxygen output for the standard formats. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.