← Back to all sparks
S

S7

ANALYTICS
Velocity0.0

S7: a new OO system for R. Contribute to RConsortium/S7 development by creating an account on GitHub.

S7 has stopped adding surface and started proving it holds up against R itself.

object-systemr-languageapi-stabilitybackward-compatibilityvalidation
Current state
S7 is R's third-generation object system, built to unify the S3 and S4 lineages rather than add a fourth. The design work landed in 0.2.0, which reworked the default constructor, extended base-class coverage, and added a backward-compatibility shim so `@` property access works on R older than 4.3. Everything since has been maintenance: property setters gained a `check` escape hatch, and two consecutive releases exist mainly to keep the package compiling against R-devel 4.6.
Where it's heading
The changelog is thinning by design — 0.1.0 was a months-long feature dump, 0.2.0 a coordinated architectural revision, 0.2.2 a single line about internal R-devel support. That shape usually means an API the maintainers consider settled, where the remaining work is tracking the host language rather than extending the system. The one recurring theme is validation cost: repeated releases have made validation less frequent, more targeted, or skippable outright.
Prediction
Expect continued small releases pinned to R-devel changes rather than new class-system features, with any further movement most likely in the validation and property-setter path that the last two feature changes both touched.

Recent moves

  1. 3mo ago

    Internal fixes for R-devel 4.6 compatibility

    A four-PR maintenance release with no user-facing change — purely internal adjustments so S7 keeps working against R-devel 4.6. The second release in a row whose only content is tracking the host language.

    View source ↗
  2. 9mo ago

    Property setters gain an opt-out from validation

    `props<-()` and `set_props()` pick up `check`/`.check` arguments so callers can set properties without triggering `validate()`. A small but real escape hatch for code that sets several properties in sequence and only wants the object checked once at the end.

    View source ↗
  3. 1y ago

    Constructor rework and pre-4.3 support for @ access

    ⚡ SPARK

    The release where S7's shape was settled: the default constructor was rewritten to handle lazy property defaults and dynamic properties, base-class coverage widened, and a compatibility mechanism made `@` usable on older R. Everything after it has been maintenance, which marks this as the end of the design phase.

    View source ↗
  4. 2y ago

    Per-property validators and better S3 method registration

    Consolidation ahead of the 0.2.0 rework: `new_property()` gains a `validator` argument, S3 methods register correctly for S7 objects in packages, and validation now runs after custom setters rather than before. Mostly correctness work on the property and validation path that later releases kept refining.

    View source ↗
  5. 2y ago

    First release: unions, set_props, and S4 virtual dispatch

    The initial public release, written as a running log across roughly eighteen months of pre-1.0 development. Establishes the fundamentals later releases refine — class unions via `|`, `set_props()`, single-pass validation per hierarchy level, and correct dispatch on S4 virtual classes.

    View source ↗