bevy/crates
Joshua Holmes 8d9f948684
Create new NonSendMarker (#18301)
# Objective

Create new `NonSendMarker` that does not depend on `NonSend`.

Required, in order to accomplish #17682. In that issue, we are trying to
replace `!Send` resources with `thread_local!` in order to unblock the
resources-as-components effort. However, when we remove all the `!Send`
resources from a system, that allows the system to run on a thread other
than the main thread, which is against the design of the system. So this
marker gives us the control to require a system to run on the main
thread without depending on `!Send` resources.

## Solution

Create a new `NonSendMarker` to replace the existing one that does not
depend on `NonSend`.

## Testing

Other than running tests, I ran a few examples:
- `window_resizing`
- `wireframe`
- `volumetric_fog` (looks so cool)
- `rotation`
- `button`

There is a Mac/iOS-specific change and I do not have a Mac or iOS device
to test it. I am doubtful that it would cause any problems for 2
reasons:
1. The change is the same as the non-wasm change which I did test
2. The Pixel Eagle tests run Mac tests

But it wouldn't hurt if someone wanted to spin up an example that
utilizes the `bevy_render` crate, which is where the Mac/iSO change was.

## Migration Guide

If `NonSendMarker` is being used from `bevy_app::prelude::*`, replace it
with `bevy_ecs::system::NonSendMarker` or use it from
`bevy_ecs::prelude::*`. In addition to that, `NonSendMarker` does not
need to be wrapped like so:
```rust
fn my_system(_non_send_marker: Option<NonSend<NonSendMarker>>) {
    ...
}
```

Instead, it can be used without any wrappers:
```rust
fn my_system(_non_send_marker: NonSendMarker) {
    ...
}
```

---------

Co-authored-by: Chris Russell <8494645+chescock@users.noreply.github.com>
2025-03-23 21:37:40 +00:00
..
bevy_a11y Remove bevy_input_focus from bevy_a11y (#18483) 2025-03-22 12:37:42 +00:00
bevy_animation bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_anti_aliasing Ensure dds enables bevy_core_pipeline/dds in bevy_anti_aliasing (#18484) 2025-03-22 12:27:14 +00:00
bevy_app Create new NonSendMarker (#18301) 2025-03-23 21:37:40 +00:00
bevy_asset bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_audio bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_color bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_core_pipeline Add bevy_anti_aliasing (#18323) 2025-03-19 18:40:32 +00:00
bevy_derive Link iOS example with rustc, and avoid C trampoline (#14780) 2025-03-17 21:14:07 +00:00
bevy_dev_tools Generic system config (#17962) 2025-03-12 00:12:30 +00:00
bevy_diagnostic Add process cpu/memory usage to SystemInformationDiagnosticsPlugin (#18279) 2025-03-16 21:14:46 +00:00
bevy_dylib enable std when building bevy_dylib (#18405) 2025-03-19 00:49:26 +00:00
bevy_ecs Create new NonSendMarker (#18301) 2025-03-23 21:37:40 +00:00
bevy_encase_derive Internalize BevyManifest logic. Switch to RwLock (#18263) 2025-03-12 00:46:01 +00:00
bevy_gilrs Replace some !Send resources with thread_local! (#17730) 2025-03-04 07:48:02 +00:00
bevy_gizmos Extract sprites into a Vec (#17619) 2025-03-18 00:48:33 +00:00
bevy_gltf Gltf handle missing bindposes (#18419) 2025-03-19 21:45:05 +00:00
bevy_image Ensure dds enables bevy_core_pipeline/dds in bevy_anti_aliasing (#18484) 2025-03-22 12:27:14 +00:00
bevy_input bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_input_focus bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_internal Remove bevy_input_focus from bevy_a11y (#18483) 2025-03-22 12:37:42 +00:00
bevy_log Add print_stdout and print_stderr lints (#17446) (#18233) 2025-03-11 19:35:48 +00:00
bevy_macro_utils Switch to ImDocument in BevyManifest (#18272) 2025-03-12 20:15:39 +00:00
bevy_math bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_mesh bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_mikktspace Add print_stdout and print_stderr lints (#17446) (#18233) 2025-03-11 19:35:48 +00:00
bevy_pbr Add bevy_anti_aliasing (#18323) 2025-03-19 18:40:32 +00:00
bevy_picking Unify picking backends (#17348) 2025-03-18 19:24:43 +00:00
bevy_platform_support Address lints in bevy_platform_support (#18477) 2025-03-22 11:21:18 +00:00
bevy_ptr moved Debug from derive to impl_ptr in bevy_ptr (#18042) 2025-02-28 02:54:46 +00:00
bevy_reflect Fixed Reflect derive macro on empty enums (#18277) (#18298) 2025-03-17 18:13:55 +00:00
bevy_remote Properly gate functionality on http in bevy_remote (#18478) 2025-03-22 11:26:36 +00:00
bevy_render Create new NonSendMarker (#18301) 2025-03-23 21:37:40 +00:00
bevy_scene Properly gate imports in bevy_scene (#18482) 2025-03-22 12:22:20 +00:00
bevy_sprite Newtype Anchor (#18439) 2025-03-21 22:27:11 +00:00
bevy_state bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
bevy_tasks Fix clippy warning about unnecessary return in single_threaded_taks_pool.rs (#18472) 2025-03-22 09:03:29 +00:00
bevy_text Newtype Anchor (#18439) 2025-03-21 22:27:11 +00:00
bevy_time Fix clippy::unnecessary-literal-unwrap in bevy_time (#18485) 2025-03-22 13:27:37 +00:00
bevy_transform Revert "Transform Propagation Optimization: Static Subtree Marking (#18094)" (#18363) 2025-03-17 20:01:29 +00:00
bevy_ui Skip camera look ups in queue uinodes (#17668) 2025-03-23 09:42:44 +00:00
bevy_utils Address clippy::let_and_return in bevy_utils (#18480) 2025-03-22 11:44:49 +00:00
bevy_window Replace VisitEntities with MapEntities (#18432) 2025-03-21 00:18:10 +00:00
bevy_winit bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00