Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor FunctionSystem to use a single Option #16514

Merged
merged 5 commits into from
Dec 1, 2024

Conversation

ItsDoot
Copy link
Contributor

@ItsDoot ItsDoot commented Nov 26, 2024

Objective

Combine the Option<_> state in FunctionSystem into a single Option to provide clarity and save space.

Solution

Simplifies FunctionSystem's layout by using a single Option<FunctionSystemState> for state that must be initialized before running, and saves a byte by removing the need to store an enum tag. Additionally, calling System::run on an uninitialized System will now give a more descriptive message prior to verifying the WorldId.

Testing

Ran CI checks locally.

@ItsDoot ItsDoot added A-ECS Entities, components, systems, and events C-Code-Quality A section of code that is hard to understand or change D-Straightforward Simple bug fixes and API improvements, docs, test and examples S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels Nov 26, 2024
pub(crate) system_meta: SystemMeta,
world_id: Option<WorldId>,
state: Option<FunctionSystemState<Marker, F>>,
system_meta: SystemMeta,
archetype_generation: ArchetypeGeneration,
// NOTE: PhantomData<fn()-> T> gives this safe Send/Sync impls
marker: PhantomData<fn() -> Marker>,
Copy link
Contributor

@benfrankel benfrankel Nov 26, 2024

Choose a reason for hiding this comment

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

Is this PhantomData still needed with Marker now appearing in FunctionSystemState<Marker, F>?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It no longer appears in FunctionSystemState, so I'm assuming it still needs to exist.

crates/bevy_ecs/src/system/function_system.rs Outdated Show resolved Hide resolved
crates/bevy_ecs/src/system/function_system.rs Outdated Show resolved Hide resolved
crates/bevy_ecs/src/system/function_system.rs Outdated Show resolved Hide resolved
@ItsDoot ItsDoot changed the title Refactor FunctionSystem to use a single Option Refactor FunctionSystem to use a single Option Nov 26, 2024
Copy link
Contributor

@benfrankel benfrankel left a comment

Choose a reason for hiding this comment

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

I don't know the potential implications of this change, but I've reviewed the diff and it makes sense to me. Option<FunctionSystemState> makes the uninitialized vs initialized semantics for function systems more obvious.

@chescock chescock added S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it and removed S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels Nov 27, 2024
@alice-i-cecile alice-i-cecile added this to the 0.16 milestone Nov 27, 2024
@mockersf mockersf added this pull request to the merge queue Dec 1, 2024
Merged via the queue into bevyengine:main with commit 6fe4b14 Dec 1, 2024
29 checks passed
ecoskey pushed a commit to ecoskey/bevy that referenced this pull request Dec 2, 2024
# Objective

Combine the `Option<_>` state in `FunctionSystem` into a single `Option`
to provide clarity and save space.

## Solution

Simplifies `FunctionSystem`'s layout by using a single
`Option<FunctionSystemState>` for state that must be initialized before
running, and saves a byte by removing the need to store an enum tag.
Additionally, calling `System::run` on an uninitialized `System` will
now give a more descriptive message prior to verifying the `WorldId`.

## Testing

Ran CI checks locally.
@ItsDoot ItsDoot deleted the function-system-layout branch December 2, 2024 21:50
ecoskey pushed a commit to ecoskey/bevy that referenced this pull request Jan 6, 2025
# Objective

Combine the `Option<_>` state in `FunctionSystem` into a single `Option`
to provide clarity and save space.

## Solution

Simplifies `FunctionSystem`'s layout by using a single
`Option<FunctionSystemState>` for state that must be initialized before
running, and saves a byte by removing the need to store an enum tag.
Additionally, calling `System::run` on an uninitialized `System` will
now give a more descriptive message prior to verifying the `WorldId`.

## Testing

Ran CI checks locally.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-ECS Entities, components, systems, and events C-Code-Quality A section of code that is hard to understand or change D-Straightforward Simple bug fixes and API improvements, docs, test and examples S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants