Figure out what to do with flexible array members
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 2.6k
- Forks
- 1.3k
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 69
Description
A number of C structures make use of a flexible array member:
struct sockaddr {
sa_family_t sa_family; /* Address family */
char sa_data[]; /* Socket address */
};
When mapped to Rust, most of these are a public field of type [T; 0]. We could instead map them to Rust unsized [c_char] fields.
The current pattern has a few advantages over using DSTs:
size_ofworks to get you the base size- You can
offset_ofthe field to get the start of the array if you need it - You can work with the type through references, they don't need to be constructed as fat pointers
- Rust's flexible array members aren't all that convenient to work with
I expect we'll probably want to stick with the current pattern, but it's worth double checking that there isn't something better for 1.0.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the existing Rust definitions that map C flexible array members to public [T; 0] fields, then compare that pattern with unsized [c_char] fields and the listed size_of, offset_of, and reference-use cases. Done means reaching and documenting a decision for the 1.0 representation, with its ABI and usability tradeoffs justified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, rust
- Domain
- operating-systems
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100