← Back to all sparks
R

rlang

DEVOPS
Velocity0.0

Low-level API for programming with R

rlang moved tidyeval off R's private internals and onto official C API.

tidyversemetaprogrammingc-apitidyevalr-language
Current state
rlang is at 1.3.0, which rewrote hash() to walk objects itself rather than lean on R's serialiser — fixing stability against bytecode and shrinkable vectors, at the cost of invalidating every existing hash value. The release before it closed a multi-year effort: rlang and tidyeval are now fully backed by official C APIs of R, work the notes credit to collaboration with R core.
Where it's heading
The through-line across this whole window is one migration. Release after release retires something that depended on private R internals — env_browse(), env_unlock(), ns_registry_env(), the SEXP iterator now behind a compile flag — and replaces it with sanctioned API. The hash() rewrite in 1.3.0 is the same instinct applied to the serialiser: own the behaviour rather than inherit it.
Prediction
With the C API migration declared complete in 1.2.0, the next releases are likely to be ordinary maintenance and type-checking additions rather than further defunct markings.

Recent moves

  1. 1mo ago

    hash() rewritten; all existing hash values change

    hash() now walks objects with its own strategy instead of relying on R's serialiser, fixing instability with function bytecode and shrinkable vectors on R 4.6.0. Every existing hash value changes as a result, and the notes warn that future versions may invalidate hashes again.

    View source ↗
  2. 4mo ago

    rlang and tidyeval now fully backed by R's official C API

    ⚡ SPARK

    The release that completes the migration the rest of this window was building toward: rlang and tidyeval stand entirely on sanctioned R C API. Six type-checking functions graduate from a standalone file to exported functions in the same version.

    View source ↗
  3. 7mo ago

    R 4.0 floor, new %&&% operator, C API progress

    More groundwork toward C API conformance, with R 4.0.0 now the floor. Adds a %&&% operator returning the right-hand side when the left is non-NULL, speeds up list2(), and tightens is_syntactic_literal() around attributes and negative numbers.

    View source ↗
  4. 1y ago

    env_unlock() and env_browse() defunct as private API disappears

    env_browse(), env_is_browsed() and env_unlock() become defunct because the API they needed is gone, and the C SEXP iterator moves behind a compile flag. Users must be on pkgload 1.4.0 or later after this.

    View source ↗
  5. 1y ago

    Full backtraces reported during knitting

    A one-line release reporting full backtraces during knitting. Useful when debugging a document, and nothing more.

    View source ↗
  6. 2y ago

    Missing C utilities and modern last_trace() hyperlinks

    Adds two missing C-level push-back utilities, modernises last_trace() hyperlinks and clears CRAN checks. Housekeeping.

    View source ↗