Overhauled the args code system in lua_func() for richer capabilities. This breaks compatibility with previous versions of luajr.
Added new vignettes on benchmarks and the R.lua module and reorganised vignettes.
Overhauled representation of atomic vectors and lists within luajr. There is no longer a separate type for vectors passed by reference (but passing by reference is still supported).
Removed lua_parallel(), replacing it with a new
parallel processing system that runs entirely within Lua.
Added native support for R functions, environments, and generic SEXP variables in Lua.
Added a new ‘R’ module which can be used in Lua code to access R’s API.
luajr is now officially compatible (and tested) with R versions 4.0.0 and up.
Improved efficiency of calls into Lua functions from R.
Fixed some bugs in running long Lua strings and when passing / returning certain LuaJIT cdata types.
luajr’s profiler has been overhauled to capture more complete profiling data in a data.frame. As a result, the format of the object returned by lua_profile() has changed.
luajr now supports long vectors (i.e. vectors with 2^31 elements
or more). You should pass these into Lua using the 'r' arg
code for efficiency. Further details may be found in
vignette("objects"). This addresses issue #5. Thanks
to @waynelapierre for asking about long
vectors!
Added support for Lua modules using lua_module() and
lua_import(). This simplifies the process of adding Lua
code to your R package, which is now explained in a new vignette. This
addresses issue #4. Thanks
to @al-obrien for
asking about this!
Added a speed comparison for luajr / Lua versus Rcpp / C++.
lua_func() can now accept an external pointer to a
Lua function.
Added debugging and profiling for Lua code. The debugger is Scott
Lembcke’s debugger.lua, and the profiler is LuaJIT’s built-in sampling
profiler. Also added the option of turning off JIT compilation. This is
all accessed through a new function, lua_mode().
Added further code to ensure that LuaJIT never calls
exit() directly and never tries to read from or write to
standard input or output streams, instead redirecting this to the R
console.
The Lua “io” library is now capable of getting input from the R
console (e.g. with io.read()) – previously, trying this
would cause R to hang (at least from RStudio).
The Lua os.exit() function now ends Lua execution
without crashing RStudio.
lua_shell() now stores commands in the R console
history.
The luajr build process now skips making libluajit.so and the luajit executable, as these are not needed for luajr.
Corrected an oversight in the documentation for
lua_shell(); this fixes issue #3. Thanks
to @SugarRayLua
for bringing my attention to this!
Addressed some further issues turned up by CRAN checks.
Added support for passing the R type “raw” to Lua, as a string potentially with embedded nulls, and for returning strings with embedded nulls from Lua, which become “raw”s in R.
Replaced calls to Rf_allocVector3 with calls to
Rf_allocVector, as the former is apparently not part of the
API allowed in CRAN packages, as requested by CRAN.
@TimTaylor improved the R version of the “logistic map” example and benchmark in the main luajr vignette, so that now the R version is only 10x slower than the Lua version, not 2,500x slower. This fixes issue #2. Thanks Tim!
Removed a compiler flag, -Wformat, that was causing
errors with some standard R environments, most notably the
rocker/r-base Docker environment. This fixes issue #1. Thanks
@jonocarroll for
reporting and helping to fix luajr’s first official bug! :-)
luajr.NULL, to allow working with NULL in
Lua.luajr Lua module.lua_parallel() for basic multithreading.