First, thank you to Tomas for writing his recent post[0] on the R developer blog. It raised important issues in interfacing R's C API and C++ code.
However I do _not_ think the conclusion reached in the post is helpful > don’t use C++ to interface with R There are now more than 1,600 packages on CRAN using C++, the time is long past when that type of warning is going to be useful to the R community. These same issues will also occur with any newer language (such as Rust or Julia[1]) which uses RAII to manage resources and tries to interface with R. It doesn't seem a productive way forward for R to say it can't interface with these languages without first doing expensive copies into an intermediate heap. The advice to avoid C++ is also antithetical to John Chambers vision of first S and R as a interface language (from Extending R [2]) > The *interface* principle has always been central to R and to S before. An interface to subroutines was _the_ way to extend the first version of S. Subroutine interfaces have continued to be central to R. The book also has extensive sections on both C++ (via Rcpp) and Julia, so clearly John thinks these are legitimate ways to extend R. So if 'don't use C++' is not realistic and the current R API does not allow safe use of C++ exceptions what are the alternatives? One thing we could do is look how this is handled in other languages written in C which also use longjmp for errors. Lua is one example, they provide an alternative interface; lua_pcall[3] and lua_cpcall[4] which wrap a normal lua call and return an error code rather long jumping. These interfaces can then be safely wrapped by RAII - exception based languages. This alternative error code interface is not just useful for C++, but also for resource cleanup in C, it is currently non-trivial to handle cleanup in all the possible cases a longjmp can occur (interrupts, warnings, custom conditions, timeouts any allocation etc.) even with R finalizers. It is past time for R to consider a non-jumpy C interface, so it can continue to be used as an effective interface to programming routines in the years to come. [0]: https://developer.r-project.org/Blog/public/2019/03/28/use-of-c---in-packages/ [1]: https://github.com/JuliaLang/julia/issues/28606 [2]: https://doi.org/10.1201/9781315381305 [3]: http://www.lua.org/manual/5.1/manual.html#lua_pcall [4]: http://www.lua.org/manual/5.1/manual.html#lua_cpcall ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel