Releases: yutannihilation/savvy
v0.6.8 (2024-09-17)
Release Notes
Minor Improvements
savvy init
now generates- slightly better
configure
script that checks ifcargo
command is available cleanup
script to remove the generatedMakevars
after compilationconfigure.win
andcleanup.win
src/Makevars.win.in
instead ofsrc/Makevars.win
for consistency with Unix-alikes
- slightly better
Install savvy-cli 0.6.8
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https:/yutannihilation/savvy/releases/download/v0.6.8/savvy-cli-installer.sh | sh
Download savvy-cli 0.6.8
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.7 (2024-09-05)
Release Notes
Minor Improvements
-
Remove the use of non-API call
Rf_findVarInFrame
. -
Now the GitHub release includes an installation script to install the savvy
CLI into$CARGO_HOME/bin
, thanks to cargo-dist. This should make it easier
to usesavvy-cli
on CI.curl --proto '=https' --tlsv1.2 -LsSf https:/yutannihilation/savvy/releases/download/v0.6.7/savvy-cli-installer.sh | sh
- Improve handling of raw identifiers (e.g.
r#struct
) more.
Install savvy-cli 0.6.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https:/yutannihilation/savvy/releases/download/v0.6.7/savvy-cli-installer.sh | sh
Download savvy-cli 0.6.7
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Version 0.6.7-beta.1
Release Notes
Install savvy-cli 0.6.7-beta.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https:/yutannihilation/savvy/releases/download/v0.6.7-beta.1/savvy-cli-installer.sh | sh
Download savvy-cli 0.6.7-beta.1
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.6 (2024-09-04)
Release Notes
Bug fixes
-
Fix inappropriate use of
PROTECT
. Thanks @t-kalinowski! -
Handle raw identifiers (e.g.
r#struct
) correctly.
Download savvy-cli 0.6.6
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.5 (2024-07-02)
Release Notes
New features
- Add support for raw, including ALTRAW.
Please be aware that, while this support was added for consistency, I bet it's
really rare that a raw vector is actually needed; if you want to deal with a
binary data on Rust's side, your primary option should be to store it in an
external pointer (of a struct you define) rather than an R's raw vector.
Minor Improvements
-
Wrapper environment of a Rust struct or enum now cannot be modified by users.
-
Remove the use of the following non-API calls:
Rf_findVarInFrame3
STRING_PTR
DATAPTR
Download savvy-cli 0.6.5
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.4 (2024-05-25)
Release Notes
New features
-
New function
r_warn()
safely show a warning. Note that, a warning can raise
error whenoptions(warn = 2)
, so you should not ignore the error from
r_warn()
. The error should be propagated to the R session. -
Savvy now translates
Option<T>
as an optional argument, i.e., an argument
with the default value ofNULL
.Example:
#[savvy] fn default_value_vec(x: Option<IntegerSexp>) -> savvy::Result<Sexp> { if let Some(x) = x { x.iter().sum::<i32>().try_into() } else { (-1).try_into() } }
default_value_vec(1:10) #> [1] 55 default_value_vec() #> [1] -1
Bug fixes
r_print!()
andr_eprint!()
now can print strings containing%
.
Breaking Change
- The notation for
savvy-cli test
is now changed to#[cfg(feature = "savvy-test")]
from#[cfg(savvy_test)]
. This is to avoid the upcoming
change in Cargo (ref).
Download savvy-cli 0.6.4
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.3 (2024-05-05)
Release Notes
New features
-
New types
NumericSexp
andNumericScalar
are added to handle both integer
and double. You can get a slice viaas_slice_*()
or an iterator via
iter_*()
.#[savvy] fn times_two(x: NumericSexp) -> savvy::Result<Sexp> { let mut out = OwnedIntegerSexp::new(x.len())?; for (i, v) in x.iter_i32().enumerate() { let v = v?; // The item of iter_i32() is Result because the conversion can fail. if v.is_na() { out[i] = i32::na(); } else { out[i] = v * 2; } } out.into() }
You can also use
.into_typed()
to handle integer and double differently.#[savvy] fn times_two(x: NumericSexp) -> savvy::Result<savvy::Sexp> { match x.into_typed() { NumericTypedSexp::Integer(i) => times_two_int(i), NumericTypedSexp::Real(r) => times_two_real(r), } }
-
Savvy now provides
r_stdout()
andr_stderr()
to be used with interfaces
that requirestd::io::Write
. Also, you can usesavvy::log::env_logger()
to
output logs to R's stderr. Here's an example usage:use savvy::savvy_init; use savvy_ffi::DllInfo; #[savvy_init] fn init_logger(dll_info: *mut DllInfo) -> savvy::Result<()> { savvy::log::env_logger().init(); Ok(()) }
Breaking changes
-
AltList
now losesnames
argument ininto_altrep()
for consistency.
Please useset_names()
on the resultedSexp
object.let mut out = v.into_altrep()?; out.set_names(["one", "two"])?; Ok(out)
Download savvy-cli 0.6.3
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.2 (2024-05-04)
Release Notes
New features
-
New macro
#[savvy_init]
makes the function executed when the DLL is loaded
by R. This is useful for initializaing resources. See the guide for more details.Example:
use std::sync::OnceLock; static GLOBAL_FOO: OnceLock<Foo> = OnceLock::new(); #[savvy_init] fn init_global_foo(dll_info: *mut DllInfo) -> savvy::Result<()> { GLOBAL_FOO.get_or_init(|| Foo::new()); Ok(()) }
-
Savvy now experimentally supports ALTREP. See the guide for more details.
Example:
struct MyAltInt(Vec<i32>); impl MyAltInt { fn new(x: Vec<i32>) -> Self { Self(x) } } impl savvy::IntoExtPtrSexp for MyAltInt {} impl AltInteger for MyAltInt { const CLASS_NAME: &'static str = "MyAltInt"; const PACKAGE_NAME: &'static str = "TestPackage"; fn length(&mut self) -> usize { self.0.len() } fn elt(&mut self, i: usize) -> i32 { self.0[i] } }
Download savvy-cli 0.6.2
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.1 (2024-04-26)
Release Notes
Minor improvements
- Now savvy no longer uses
SETLENGTH
, which is a so-called "non-API" thing.
Download savvy-cli 0.6.1
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v0.6.0 (2024-04-20)
Release Notes
Breaking changes
-
savvy-cli test
now parses test modules marked with#[cfg(savvy_test)]
instead of#[cfg(test)]
. The purpose of this change is to letcargo test
run for the tests unrelated to a real R sessions. -
Savvy now generates different names of Rust functions and C functions;
previously, the original function name is used for the FFI functions, but now
it'ssavvy_{original}_ffi
. This change shouldn't affect ordinary users.This change was necessary to let
#[savvy]
preserve the original function so
that we can write unit tests on the function easily. One modification is that
the function is made public. For more details, please read the Testing section
in the guide. -
The generated R wrapper file is now named as
000-wrappers.R
instead of
wrappers.R
. This makes the file is loaded first so that you can override
some of the R functions (e.g., aprint()
method for an enum) in another R
file. The old wrapper filewrappers.R
is automatically deleted bysavvy-cli update
New features
-
Added a function
eval_parse_text()
, which is an equivalent to R's idiom
eval(parse(text = ))
. This is mainly for testing purposes. -
Added a function
is_r_identical()
, which is an equivalent to R's
identical()
. This is mainly for testing purposes. -
Added a function
assert_eq_r_code()
if the first argument has the same data
as the result of the R code of the second argument.Example:
let mut x = savvy::OwnedRealSexp::new(3)?; x[1] = 1.0; x[2] = 2.0; assert_eq_r_code(x, "c(0.0, 1.0, 2.0)");
-
savvy-cli test
now picks[dev-dependencies]
from the crate'sCargo.toml
as the dependencies to be used for testing. -
savvy-cli test
got--features
argument to add features to be used for
testing.
Download savvy-cli 0.6.0
File | Platform | Checksum |
---|---|---|
savvy-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
savvy-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
savvy-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
savvy-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
savvy-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |