-
Notifications
You must be signed in to change notification settings - Fork 59
add a stucts-and-tuples chapter #31
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
Merged
avadacatavra
merged 19 commits into
rust-lang:master
from
nikomatsakis:structs-and-tuples
Oct 25, 2018
Merged
Changes from 1 commit
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
c3a54f9
add a stucts-and-tuples chapter
nikomatsakis 08062bd
add nits from eddyb
nikomatsakis eb951c2
correct typo
nikomatsakis d5a144b
strengthen to "subject to change between compilations"
nikomatsakis 569338b
add note that packed adjusts alignment of the struct as a whole
nikomatsakis d96723f
`[T; 3]` and `(T, (T, T))` would have the same memory layout.
nikomatsakis 4974192
rename ABI compatibility to "function call ABI compatibility"
nikomatsakis 89a8a70
rework to call out details *not* relevant to layout
nikomatsakis c7d728e
make it clear that C17 etc are the "normative" spec for `#[repr(C)]`
nikomatsakis 65f65f9
extract controversial unresolved questions
nikomatsakis fbafc2d
clarify wording
nikomatsakis fbf35bf
assign issues
nikomatsakis 97622bc
generalize "input program" to "input to compiler"
nikomatsakis b0c86ea
be clearer about when reordering fields would be a breaking change
nikomatsakis f146fc4
rephrase "any" struct for clarity
nikomatsakis 72f5db3
rework "default layout" to guarantee nothing for now
nikomatsakis 17dab33
document zero-sized struct behavior
nikomatsakis a9223e2
say more about zero-sized things
nikomatsakis ece91f5
fix typo
nikomatsakis File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we should just go one step further here and just state that the "most recent" C specification applies. It would be a pain to have to update this every N years, history has shown that the newer C specs are backwards compatible with the old ones (e.g. the C99, C11, and C17 specs have never introduced breaking changes here - they just have defined behavior that was undefined before), and we probably want to be as compatible as possible with C anyways which means we have to follow the latest spec.
This kinds of ties Rust with the C spec, but this is already pretty much the case, not only for platform support, but some newer C proposals like N2289 - Zero overhead failure should definetely allow using Rust's
Option
andResult
properly as error handling mechanisms in C FFI. So whether we like it or not, Rust is already a stakeholder in the C standardization process, and we should be sending someone to their meetings to represent Rust's interests in the ISO C standard evolution, and that would include layout guarantees forrepr(C)
types. We don't want any changes to the C language to make it impossible for Rust to target C via FFI.