Skip to content

feat: Rewrite the multitude crate#471

Open
geeknoid wants to merge 1 commit into
mainfrom
multitwo
Open

feat: Rewrite the multitude crate#471
geeknoid wants to merge 1 commit into
mainfrom
multitwo

Conversation

@geeknoid
Copy link
Copy Markdown
Member

@geeknoid geeknoid commented Jun 4, 2026

  • Makes Arena Send (was !Send).
  • Removes the Rc family of smart pointers
  • Slight performance increase in certain cases

Production-code unsafe surface:

Category Before After Delta
unsafe fn 112 71 -41
unsafe { ... } 677 185 -492
unsafe impl 23 9 -14

Copilot AI review requested due to automatic review settings June 4, 2026 06:25
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 4, 2026

⚠️ Breaking Changes Detected


--- failure inherent_method_const_removed: pub method is no longer const ---

Description:
A publicly-visible method or associated fn is no longer `const` and can no longer be used in a `const` context.
        ref: https://doc.rust-lang.org/reference/const_eval.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/inherent_method_const_removed.ron

Failed in:
  Utf16String::clear in /home/runner/work/oxidizer/oxidizer/crates/multitude/src/strings/utf16_string.rs:384
  String::clear in /home/runner/work/oxidizer/oxidizer/crates/multitude/src/strings/string.rs:408

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/inherent_method_missing.ron

Failed in:
  Utf16String::into_arena_utf16_str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/strings/utf16_string.rs:467
  String::into_arena_str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/strings/string.rs:490
  Vec::into_arena_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/vec/freeze.rs:44
  BoxStr::into_rc_str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/strings/box_str.rs:89
  ZerocopyView::alloc_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/zerocopy.rs:30
  ZerocopyView::try_alloc_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/zerocopy.rs:30
  ZerocopyView::alloc_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/zerocopy.rs:30
  ZerocopyView::try_alloc_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/zerocopy.rs:30
  Arena::alloc_slice_copy_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:21
  Arena::try_alloc_slice_copy_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:38
  Arena::alloc_slice_clone_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:56
  Arena::try_alloc_slice_clone_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:80
  Arena::alloc_slice_fill_with_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:99
  Arena::try_alloc_slice_fill_with_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:116
  Arena::alloc_slice_fill_iter_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:134
  Arena::try_alloc_slice_fill_iter_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:159
  Arena::alloc_slice_fill_with_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:181
  Arena::try_alloc_slice_fill_with_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_slice_rc.rs:194
  Arena::alloc_str_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_str.rs:65
  Arena::try_alloc_str_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_str.rs:388
  Arena::alloc_uninit_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:130
  Arena::try_alloc_uninit_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:150
  Arena::alloc_zeroed_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:169
  Arena::try_alloc_zeroed_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:186
  Arena::alloc_uninit_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:335
  Arena::try_alloc_uninit_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:346
  Arena::alloc_zeroed_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:364
  Arena::try_alloc_zeroed_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:375
  Arena::alloc_uninit_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:604
  Arena::try_alloc_uninit_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:617
  Arena::alloc_zeroed_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:631
  Arena::try_alloc_zeroed_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_uninit.rs:644
  Arena::alloc_dst_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_unsized.rs:517
  Arena::try_alloc_dst_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_unsized.rs:541
  Arena::alloc_dst_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_unsized.rs:834
  Arena::try_alloc_dst_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_unsized.rs:858
  Arena::alloc_utf16_str_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_utf16.rs:86
  Arena::try_alloc_utf16_str_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_utf16.rs:98
  Arena::alloc_utf16_str_rc_from_str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_utf16.rs:152
  Arena::try_alloc_utf16_str_rc_from_str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_utf16.rs:164
  Arena::alloc_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:36
  Arena::try_alloc_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:52
  Arena::alloc_rc_with, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:78
  Arena::try_alloc_rc_with, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:100
  Arena::alloc_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:346
  Arena::try_alloc_rc_pin, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:361
  Arena::alloc_rc_pin_with, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:378
  Arena::try_alloc_rc_pin_with, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/arena/alloc_value.rs:392
  BytemuckView::alloc_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/bytemuck.rs:33
  BytemuckView::try_alloc_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/bytemuck.rs:33
  BytemuckView::alloc_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/bytemuck.rs:33
  BytemuckView::try_alloc_slice_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/bytemuck.rs:33
  BoxUtf16Str::into_rc_utf16_str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/strings/box_utf16_str.rs:92
  Box::into_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/box.rs:164
  Box::into_rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/box.rs:295

--- failure repr_c_removed: repr(C) removed ---

Description:
repr(C) was removed from a type. This can cause its memory layout to change, breaking FFI use cases.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#repr-c-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/repr_c_removed.ron

Failed in:
  struct Arena in /home/runner/work/oxidizer/oxidizer/crates/multitude/src/arena/mod.rs:63

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/struct_missing.ron

Failed in:
  struct multitude::Rc, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/rc.rs:60
  struct multitude::strings::RcUtf16Str, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/strings/rc_utf16_str.rs:40
  struct multitude::strings::RcStr, previously in file /home/runner/work/oxidizer/oxidizer/target/semver-checks/git-origin_main/81f5ccae65721f2f441fd09696a8a8b249d73da9/crates/multitude/src/strings/rc_str.rs:37

If the breaking changes are intentional then everything is fine - this message is merely informative.

Remember to apply a version number bump with the correct severity when publishing a version with breaking changes (1.x.x -> 2.x.x or 0.1.x -> 0.2.x).

Comment thread crates/multitude/src/box.rs Outdated
Comment thread crates/multitude/src/box.rs Outdated
@ralfbiedert
Copy link
Copy Markdown
Collaborator

Maybe this is still WIP, but for now Arena is still !Send:

image

@geeknoid geeknoid changed the title Rewrite the multitude crate feat: Rewrite the multitude crate Jun 4, 2026
@geeknoid geeknoid force-pushed the multitwo branch 2 times, most recently from eb05907 to 1ecd7ea Compare June 5, 2026 04:39
Copilot AI review requested due to automatic review settings June 5, 2026 04:39
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

- Makes Arena Send (was !Send).
- Removes the Rc family of smart pointers.
- Slight performance increase in certain cases.

Public types removed: Rc, RcStr, RcUtf16Str, ArcStr, BoxStr.

Production-code unsafe surface (`src/`, excluding `#[cfg(test)]`
modules and doc comments):

| Category       | Before | After | Delta |
|----------------|-------:|------:|------:|
| unsafe fn      |    160 |    91 |   -69 |
| unsafe { ... } |    681 |   223 |  -458 |
| unsafe impl    |     23 |    16 |    -7 |
Copilot AI review requested due to automatic review settings June 6, 2026 00:39
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants