Git Product home page Git Product logo

Comments (13)

zakarumych avatar zakarumych commented on June 28, 2024

As a simple use-case, this will enable us to reinterpret structures with bool as bytes.

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

When the 1.0 of this crate was being developed, no one considered the ability to view a &bool as a &u8 very valuable, so this particular trait split was skipped on.

I think this would be a breaking change to fit in to the existing crate.

Because of the safe transmute project, any work on a 2.0 is being held off until that project is done and stabilized. However, at that time we might be able to split up the traits like this.

from bytemuck.

zakarumych avatar zakarumych commented on June 28, 2024

Would it be a breaking change though?
Relaxing requirements on functions doesn't seem to break anything.

If we add blanket impls like this

instead of the other way around then all existing implementation would still work.

The downside of blanket impls in this direction is that implementing both NoPadding and AnyBitPattern won't make type a Pod automagically.

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

I admit I'm not a trait expert, so with careful design it might be done I suppose.

I'll point some of the trait folks I know at this topic and maybe they can weigh in.

from bytemuck.

zakarumych avatar zakarumych commented on June 28, 2024

Once again I'd really like this feature, as I want to cast bytes to other types which can have padding but accept any bit pattern.

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

We could have a NoPadding trait that lets you turn &A into &[u8], and just have it as a separate thing from Pod. That wouldn't be a breaking change.

from bytemuck.

zakarumych avatar zakarumych commented on June 28, 2024

And currently I need the reverse. Turning &[u8] into A: AnyBitPattern.
Although NoPadding has its use cases as well.
Do you still think proposed solution above may be a breaking change?

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

Yeah. No one I spoke to thought that it was possible to insert and extra trait into the trait tree.

from bytemuck.

zakarumych avatar zakarumych commented on June 28, 2024

I'm curious. Did they provide a counterexample?

BTW. This change below is not even required.

trait Pod: NoPadding + AnyBitPattern {}

Pod may stay separate. Only functions bounds should be relaxed.
Given impls for any Pod type, generic code with T: Pod bound should be able to call function that would require T: AnyBitPattern or T: NoPadding.

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

No one showed that it couldn't be done, but no one definitely showed it can be done with absolutely no chance of breaks.

I'd rather just have a separate trait, which is assured to not break any existing code.

from bytemuck.

zakarumych avatar zakarumych commented on June 28, 2024

Do you mean that you want separate functions as well?

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

Yes, we should add this as just a separate group of traits and functions. No breakage that way.

from bytemuck.

Lokathor avatar Lokathor commented on June 28, 2024

This has been done as much as will happen in version 1.

Version 2 of the crate will be largely defined by how the safe-transmute project works out, so it's hard to say precisely, but this is expected to be possible at that time.

For now I'm gonna close it.

from bytemuck.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.