savvy 0.8.0 をリリースしました。

「savvy とは?」という資料をそもそも日本語で書いてないことに気づいたんですが、とりあえず宣伝にリリースのブログを書きます。 savvy は、R のパッケージの中で Rust を使うためのフレームワークです。

新機能

anyhow みたいな感じで ? でエラーが自動変換できる。

savvy では、 #[savvy] マクロで Rust の関数を R の関数に変換できますが、この関数は return 値を savvy::Result<T> にする必要があります。 エラーを投げられるのはいいところなんですが、エラーの型を合わせる必要があり、こんな感じで .map_err() で変換しないといけませんでした。

#[savvy]
fn no_such_file() -> savvy::Result<()> {
    let _ = std::fs::read_to_string("no_such_file")
        .map_err(|e| e.to_string().into())?;
    Ok(())
}

これが、v0.8.0 では map_err() なしで書けるようになりました。 anyhow と同じく、std::error::Error trait を実装している型ならなんでも ? で変換できます。

#[savvy]
fn no_such_file() -> savvy::Result<()> {
    let _ = std::fs::read_to_string("no_such_file")?;
    Ok(())
}

(実装方法については rust-jp の zulip で教えてもらいました。ありがとうございました)