-
Notifications
You must be signed in to change notification settings - Fork 146
Someday Maybe #1120
Copy link
Copy link
Open
Description
This issue tracks ideas which we might want to tackle some day, but which don't have enough detail to warrant their own separate issues.
Feature additions
- Track all parser ideas somewhere in the zerocopy repo, including this prototype; also link to Support mid-level byte slice and buffer operations #1315
- If two slice DSTs have the same slice offset, element size, and alignment, then we can support
transmute_ref!andtransmute_mut!for these types - just need to figure out how to encode all of these in the type system (e.g. associated types onKnownLayout) - As part of a broader trend towards teaching zerocopy to express more powerful transmutations, could we add
trait AsInitialized<T>? We could use it to replace the existingSrc: IntoBytesbound intransmute!,try_transmute!, etc - Look at the nolife crate's API for inspiration
- Look at the binary_layout crate's API for inspiration
- Add method to
Refto change the type parameter (ie, perform a transmutation); we could use this to makenew_sizeda thin wrapper aroundnew - Support stdlib's new generic
NonZero<T>- Add a trait that marks
Tfor whichsize_of::<T>() == size_of::<Option<T>>()(see Support generic NonZero<T> #2255)
- Add a trait that marks
- Support transmuting
TtoMaybeUninit<T>(or maybe evenMaybeUninit<U>) even whenT: ?IntoBytes - Once
generic_const_exprsandassociated_const_equalityare stabilized, we can useKnownLayout::LAYOUTto guarantee layout equality, supporting both size equality and slice DST equality (e.g.,T: KnownLayout, U: KnownLayout<LAYOUT = {T::LAYOUT}>); see playground example - Add
Unalign::replaceorswap(which returns the original) and maybe deprecateUnalign::set. Strictly more powerful.
Safety
- Audit for
&slice[0] as *constper rust-lang/unsafe-code-guidelines#134 - Audit for
&mut as *constper rust-lang/rust#56604 - see also rust-lang/clippy#12791 - In
Ptr's internal invariants, do we need to separately say that the pointer is derived from a valid allocation and that it has provenance for that allocation? Is the latter alone sufficient? - Use Rudra in CI?
Performance
- When deriving
TryFromBytes, if we're deriving it thanks to#[derive(FromBytes)], emit an emptyis_bit_validimpl; this will be more optimizable, and should cut down on compile times - cargo-llvm-lines
Developer experience
- Only generate roll PRs (for pinned stable and nightly toolchains) on week days
- Consider using
cargo nextestto speed up CI execution times - Cargo docs published to google.github.io/zerocopy could include link to the commit that generated it
- One idea for how to do this: programmatically edit the crate-root doc comment with a link
- Maybe publish each commit's docs in a subdirectory named for that commit's hash so we have a historical record of all documentation?
- Publish cargo docs to google.github.io/zerocopy for every PR (see this StackOverflow question)
- Looks like GitHub might eventually support this natively
- Feature request: Partial upload/deploy actions/deploy-pages#349
- Here's a suggestion for working around the current issue
- Consider using
cargo release - Consider using larger GitHub Actions runners
- In CI, confirm that MSRV is lower than any version we use for version detection. This will naturally trigger us to clean up the codebase when we bump MSRV.
- Allow setting repository-wide "vacation mode" that causes rollers to pause
Documentation
- Use permalinks when quoting Rust documentation; e.g., "https://doc.rust-lang.org/1.54.0/std/" instead of "https://doc.rust-lang.org/stable/std/"
- Write documentation post on zerocopy's values
- Be consistent about our use of "interpret" vs "reinterpret" in doc comments
- Compile for multiple targets on docs.rs using the
package.metadata.docs.rs.targetsCargo.tomlkey (see e.g. usage in syn)? - Make zerocopy-derive docs link to zerocopy traits
Testing
- Use
kani::cover!(e.g. to more thoroughly test Derive trivialis_bit_validwhen possible #1303) - Test our tests using mutagen
Community engagement and outside contributions
- Post research projects on edu Zulip
Miscellaneous
- Check for missing copyright header comments in CI
- Use invariant lifetimes to achieve a sort of dependent typing? E.g., here's a function where the returned byte array is guaranteed to be
nbytes long:fn take_bytes<'a>(&mut self, n: Usize<'a>) -> Option<Bytes<'a>>
- Put lints in
Cargo.tomlonce that's stable on our MSRV: Tracking Issue for[lints]table RFC 3389 rust-lang/cargo#12115 - Use
freezeAPI once it lands/stabilizes: RFC: Addfreezeintrinsic and related library functions rust-lang/rfcs#3605 - Use inline
constin zerocopy? Stabilise inline_const rust-lang/rust#104087 - Any use for return-position impl trait in traits (RPITT) in zerocopy or downstream libraries like packet?
- Any use for variadic generics?
- Any use for
slice_flatten?
Done
- Add GitHub Action - to be triggered manually - that submits a PR that releases a new zerocopy version
- Publish cargo docs (with private/hidden items documented) for
mainat google.github.io/zerocopy
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels