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.