bevy/crates
PROMETHIA-27 c27a3cff6d Make Reflect safe to implement (#5010)
# Objective

Currently, `Reflect` is unsafe to implement because of a contract in which `any` and `any_mut` must return `self`, or `downcast` will cause UB. This PR makes `Reflect` safe, makes `downcast` not use unsafe, and eliminates this contract. 

## Solution

This PR adds a method to `Reflect`, `any`. It also renames the old `any` to `as_any`.
`any` now takes a `Box<Self>` and returns a `Box<dyn Any>`. 

---

## Changelog

### Added:
- `any()` method
- `represents()` method

### Changed:
- `Reflect` is now a safe trait
- `downcast()` is now safe
- The old `any` is now called `as_any`, and `any_mut` is now `as_mut_any`

## Migration Guide

- Reflect derives should not have to change anything
- Manual reflect impls will need to remove the `unsafe` keyword, add `any()` implementations, and rename the old `any` and `any_mut` to `as_any` and `as_mut_any`.
- Calls to `any`/`any_mut` must be changed to `as_any`/`as_mut_any`

## Points of discussion:

- Should renaming `any` be avoided and instead name the new method `any_box`?
- ~~Could there be a performance regression from avoiding the unsafe? I doubt it, but this change does seem to introduce redundant checks.~~
- ~~Could/should `is` and `type_id()` be implemented differently? For example, moving `is` onto `Reflect` as an `fn(&self, TypeId) -> bool`~~


Co-authored-by: PROMETHIA-27 <42193387+PROMETHIA-27@users.noreply.github.com>
2022-06-27 16:52:25 +00:00
..
bevy_animation Clippy improvements (#4665) 2022-05-31 01:38:07 +00:00
bevy_app Add global init and get accessors for all newtyped TaskPools (#2250) 2022-06-09 02:43:24 +00:00
bevy_asset Add reload_asset method to AssetServer. (#5106) 2022-06-26 21:45:04 +00:00
bevy_audio Clippy improvements (#4665) 2022-05-31 01:38:07 +00:00
bevy_core Add global init and get accessors for all newtyped TaskPools (#2250) 2022-06-09 02:43:24 +00:00
bevy_core_pipeline Allow unbatched render phases to use unstable sorts (#5049) 2022-06-23 10:52:49 +00:00
bevy_derive Decouple some dependencies (#3886) 2022-04-27 19:08:11 +00:00
bevy_diagnostic Cleanups in diagnostics (#3871) 2022-06-20 17:02:25 +00:00
bevy_dylib Bump Bevy to 0.8.0-dev (#4505) 2022-04-17 23:04:52 +00:00
bevy_dynamic_plugin Bump Bevy to 0.8.0-dev (#4505) 2022-04-17 23:04:52 +00:00
bevy_ecs Remove double blank line from component docs (#5102) 2022-06-26 14:24:04 +00:00
bevy_ecs_compile_fail_tests Replace ReadOnlyFetch with ReadOnlyWorldQuery (#4626) 2022-06-13 23:35:54 +00:00
bevy_encase_derive Migrate to encase from crevice (#4339) 2022-05-18 21:09:21 +00:00
bevy_gilrs Update gilrs to v0.9 (#4848) 2022-05-30 17:26:23 +00:00
bevy_gltf gltf: do not import IoTaskPool in wasm (#5038) 2022-06-20 10:32:44 +00:00
bevy_hierarchy add a SceneBundle to spawn a scene (#2424) 2022-06-09 20:34:09 +00:00
bevy_input Update MouseMotion and CursorMoved docs (#5090) 2022-06-26 13:40:43 +00:00
bevy_internal enable optional dependencies to stay optional (#5023) 2022-06-20 10:32:43 +00:00
bevy_log bevy_log: upgrade to tracing-tracy 0.10.0 (#4991) 2022-06-13 22:40:29 +00:00
bevy_macro_utils bevy_reflect_derive: Tidying up the code (#4712) 2022-05-12 19:43:23 +00:00
bevy_math Document bevy_math (#4591) 2022-04-26 18:23:29 +00:00
bevy_mikktspace Generate vertex tangents using mikktspace (#3872) 2022-05-31 22:53:54 +00:00
bevy_pbr Separate PBR and tone mapping into 2 functions (#5078) 2022-06-26 00:00:23 +00:00
bevy_ptr Clippy improvements (#4665) 2022-05-31 01:38:07 +00:00
bevy_reflect Make Reflect safe to implement (#5010) 2022-06-27 16:52:25 +00:00
bevy_render Default image sampler doc fix (#5047) 2022-06-26 02:26:29 +00:00
bevy_scene Fix ron deprecation (#5021) 2022-06-15 19:18:53 +00:00
bevy_sprite Add reusable shader functions for transforming position/normal/tangent (#4901) 2022-06-14 00:32:33 +00:00
bevy_tasks Miri can set thread names now (#5108) 2022-06-26 21:28:00 +00:00
bevy_text Camera Driven Rendering (#4745) 2022-06-02 00:12:17 +00:00
bevy_time Split time functionality into bevy_time (#4187) 2022-05-26 00:27:18 +00:00
bevy_transform change panicking test to not run on global task pool (#4998) 2022-06-20 17:35:55 +00:00
bevy_ui depend on dioxus(and bevy)-maintained fork of stretch (taffy) (#4716) 2022-06-21 22:57:59 +00:00
bevy_utils update hashbrown to 0.12 (#5035) 2022-06-17 22:34:58 +00:00
bevy_window Update MouseMotion and CursorMoved docs (#5090) 2022-06-26 13:40:43 +00:00
bevy_winit Fix wasm examples (#4967) 2022-06-11 20:10:13 +00:00