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

Encode expected/actual info in ShapeError #962

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft

Conversation

bluss
Copy link
Member

@bluss bluss commented Mar 29, 2021

Add a (limited) way to add specific information to a ShapeError

Admittedly wonky, but maybe worthwhile.

Result<(), ShapeError> used to be 1 byte, and with this change it
expands to 16 bytes (2 usize on 64-bit).

The remaining 15 bytes are used for optimistically packing as much of
extra info into the error message as possible.

For example we can store expected/actual index for errors (for example
index out of bounds or axis out of bounds, these are not so commonly
handled with ShapeError).

With this change it is supported:

  • Expected/actual index with 7 bytes per index
  • Expected/actual shape with 7-14 bytes per shape
    supports storing shapes with one or two bytes (< 256²) per dimension,
    with limited ndim.

Add a (limited) way to add specific information to a ShapeError

Admittedly wonky, but space efficient.

Result<(), ShapeError> used to be 1 byte, and with this change it
expands to 16 bytes (2 usize on 64-bit).

The remaining 15 bytes are used for optimistically packing as much of
extra info into the error message as possible.

For example we can store expected/actual index for errors (for example
index out of bounds or axis out of bounds, these are not so commonly
handled with ShapeError).

With this change it is supported:

- Expected/actual index with 7 bytes per index
- Expected/actual shape with 7 bytes per shape
  supports storing shapes with one or two bytes (< 256²) per dimension,
  with limited ndim.
Where possible, add expected/actual information to the ShapeError.

In many places it is identified new places where more specific
ErrorKinds and error messages are needed. These are not updated here - a
comment is inserted - this will be updated in a future version, when we
can accept breaking changes.
@bluss bluss changed the title Shape info in error Encode expected/actual info in ShapeError Mar 29, 2021
@bluss
Copy link
Member Author

bluss commented Apr 5, 2021

I guess I needed to experiment with this no-alloc approach. This is a good starting point for also experimenting with an error in a Box, which also does fine on microbenchmarks. Maybe it can be optional.

@bluss
Copy link
Member Author

bluss commented Apr 17, 2021

After exploring this, I'm ready to try adding something like ShapeError(Box<ErrorDetails>) to pack in more information. Thoughts? What I don't like is the code bloat that results from cleanup pads (code to drop the extra box in various places). It could even be made optional, to have such error details.

@bluss bluss added this to the 0.16.0 milestone May 18, 2021
@bluss bluss modified the milestones: 0.16.0, 0.17.0 Apr 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant