787
STOP WRITING C (lemmy.world)
submitted 9 months ago by Maven@lemmy.world to c/programmerhumor@lemmy.ml
you are viewing a single comment's thread
view the rest of the comments
[-] uis@lemmy.world 2 points 9 months ago

Strict aliasing exists not for optimization, but for type alignment. You may need more space on stack to save uint32_t than uint8_t[5] because former has 32-bit alignment.

[-] Jordan_U@lemmy.ml 2 points 9 months ago

Either way, this is a rule that you as a human are required to follow, and if you fail the compiler is allowed to do anything, including killing your cat.

It's not a rule that the compiler enforces by failing to build code with undefined behavior.

That is a fundamental, and extremely important, difference between C and rust.

Also, C compilers do make optimization decisions by assuming that you as a human programmer have followed these strict aliasing rules.

https://gist.github.com/shafik/848ae25ee209f698763cffee272a58f8

Has a few examples where code runs "properly" without optimizations but "improperly" with optimizations.

I put "improperly" in quotes because the C spec says that a compiler can do whatever it wants if you as a human invoke undefined behavior. Safe rust does not have undefined behavior, because if you write code which would invoke UB, rustc will refuse to build it.

this post was submitted on 21 Jan 2024
787 points (93.4% liked)

Programmer Humor

32361 readers
1566 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS