The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The RcppSpdlog repository (and CRAN package) provides access to the wonderful spdlog library along with the fmt library.
This permits use in C++ extensions for R by offering the spdlog (header-only) library
along with the (header-only) fmt library (by using
LinkingTo
as described in Section
1.1.3 of WRE). More recently, RcppSpdlog was
extended so that it provides a set of key functions directly for use by
other R functions (as described in Section
5.4.3 of WRE).
However, now the use of, say, a debug logging message from C++ looks like
// in C++
::debug("Text with {} text {} which is {}", "auto", "expansion", 42); spdlog
whereas in R, given the RcppSpdlog
package and
namespace, it looks like this (if we use sprintf()
to
assemble the message)
# in R
::log_debug(sprintf("Text with %s text %s which is %s", "auto", "expansion", 42L) RcppSpdlog
and that irked us. Enter this package! By owning the
spld
namespace (in R) and an easily overlayed namespace in
C++ of the same name we can do
// in C++
::debug("Text with {} text {} which is {}", "auto", "expansion", 42); spdl
as well as (still using sprintf()
)
# in R
::debug(sprintf("Text with %s text %s which is %s", "auto", "expansion", 42L)) spdl
which is much better as it avoids context switching. Better still, with the internal formatter we can write the same format string as in C++ and not worry about format details:
# in R
::debug("Text with {} text {} which is {}", "auto", "expansion", 42L) spdl
We use a simple mechanism in which all R arguments are passed through
format()
by default to render strings, and then pass a
single vector of strings argument through the restrictive C language
Foreign Function Interface to RcppSpdlog where
it can be passed to the C++ layer available there.
This also means we use the fmt library in both languages
as the formatter. We prefer this is over other string-interpolating
libraries in R which are similar but subtly different. Should their use
be desired, they can of course be used: the default call to any of the
loggers is just a single-argument call with a text variable so users are
free to expand strings as they please. Anything starting from
paste
and sprintf
works.
As of release 0.0.2, we also expose helpers spdl::fmt()
(to format) and spdl::cat()
(to display).
Note that because the package uses functions names also present in
the base R packages (namely cat
, debug
,
drop
, trace
) we do not recommend
loading the package. Instead, call it with the explicit prefix as
e.g. spdl::debug("Some message {}", foo)
. As a
selective importFrom
one can always do
importFrom("spdl", "setup")
combined with the explicit
pre-fix use.
Dirk Eddelbuettel
spdl is released under the GNU GPL, version 2 or later, just like R itself.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.