All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
- updates in exception handling
- updated tech.datatype, tech.ml.dataset dependency versions with some small code adaptation (#64)
- notespace is no longer a dependency
- rsymbolintroduced
- moved to lein-tools-depsand all deps are defined indeps.ednnow
- new forms added: if,do,forandwhile
- more binary operators: %%,%/%,**and%in%
- sequences beginning with command as backticked string are now callable (eg. '("^" 2 4))
- vector starting with :!codeis callable
- JVM shutdown hook is registered to clean all R processes which are run when closing java process
bra,brabra,bra<-,brabra<-can acceptnilasempty-symbolnow.
- datafunction introduced (to load data from package)
- removed empty-symbol(usenilin brackets) andna(use just 'NA)
- picking a random free port as the default Rserve port
- updating notespace dep version
- updating tech.ml.dataset dep version
- changed logging to clojure/tools.logging
- major breaking change: a new set of code-generation rules
- bugfix for plotting (to draw a chart printshould be called instead ofplot)
- tech.ml libraries bumped
- deps updated
- bugfix: recognizing S4 functions ("standardGeneric")
- bugfix: handling session-args carefully on r->clj data conversion
- Clojure working directory is now set on R side
- print-loop bound to session (#42)
- RConnection locking revisited (#40)
- GC rewritten (#25)
- More careful session management (all atoms are now defonce,closed?depends on processes state)
- fixed rmarkdown bug (wrong usage of gc)
- require-r:
- :arglists tag added for required R functions
- warning when package is not found
 
- bugfix for problems when dynamically loading renjin jar:
- using pomegranate directly, rather than alembic (to suppoert Java newer than Java 8)
- handling classloaders carefully
 
- a new API for data visualization, with more rendering options
- bugfix of a problem with using Alembic (making sure https is used)
- change in the setup API of backends: requiring the main namesapce of a backend (renjin/rserve) sets default session-type, if no other default has been set yet;
- require-rcan- :refer :allnow
- REXPList, REXPNull are supported in data conversion
- changed the API for setting up and switching backends ("session-types")
- also fixed #27 by loading the renjin Jar on-the-fly with the proper repository into
The main changes on the user side are the fact that R functions are Clojure functions, and the initial suppoort for a Renjin backend. Details below:
- performance improvement: using an R environment rather than an R list for session memory
- some refactoring to allow other kinds of R backends, in particular exending the Session protocol to take care of details such as printing and package in spection
- more careful id management of sessions
- checking the object class on creation of R objects
- being careful when printing objects of lost sessions
- R objects now extend the IFn inerface, so that R functions are Clojure functions
- bugfix in regreshing objects across sessions
- simplified the implementation of require-r-- functions can now be handled as regular objects
- handling of strange symbols/keywords: refactored a bit, added some filtering
- initial support of a Renjin (pure-JVM R) backend
- handling failures in require-r
- changes in logging
- handling unhandled cases in java->naive-clj conversion
- loading data, not only functions, at require-r
- require-roptimization: all underlying robjects are created once, then bound to namespaces
- more careful handling of data conversion of list names: names with reader special characters are not converted to keywords
- added '$ as binary operator
- performance bugfix: using native double array and type hint when conferting integer R vectors with missing values to clj
- recognizing reticulate python functions as functions
- bugfix in overriding default session args
Initial v1 version.
Main developments since earlier versions:
- code generation
- changes in error handling, printing, etc.
- requiring of R packages inspired by the python interop story (though less sophisticated)
- function call syntax a bit different (no detailed function signatures yet)
- documentation and tests using notespace
Initial draft version