| ▲ | monkeyelite 2 days ago |
| Every part of rust is undefined because there is no spec. It’s whatever their compiler does. |
|
| ▲ | CryZe 2 days ago | parent | next [-] |
| Ferrocene has donated their specification to the project, so there absolutely is a specification now. What you can argue is that the memory model isn‘t fully defined, but it‘s almost certainly going to land somewhere around stacked borrows or tree borrows. Arguably C doesn‘t fare much better in that regard though as it doesn‘t even properly define its pointer provenance model either and Rust is much closer to defining its. |
| |
| ▲ | monkeyelite 2 days ago | parent [-] | | Oh something has changed in the last 6 months? glad they are making progress on the spec. |
|
|
| ▲ | Yoric 2 days ago | parent | prev [-] |
| Note that, in compiler lingo, unspecified and undefined are two different things. C++ is specified to death, but full of undefined behavior (and also some unspecified behavior). Rust is largely not specified, but aims to have no undefined behavior (outside of unsafe blocks). |
| |
| ▲ | monkeyelite 2 days ago | parent [-] | | I am aware but without a spec we don’t know which is which. You can’t say it has no undefined behavior because what happens is you try to specify it and find gaps or challenges. In C undefined is used primarily when there is not a reliable and efficient mechanism for detecting a problem is happening. For example a C implementation may check every single invalid pointer deref, but more realistically it only detects only extreme out of range. So it’s undefined what happens. | | |
| ▲ | aw1621107 18 hours ago | parent | next [-] | | > I am aware but without a spec we don’t know which is which. I don't think I fully agree with this. A more accurate statement might be that "without a spec we don't always know which is which". You obviously don't need a spec to pin down at least some of a language's behavior, and even then the presence of a spec doesn't necessarily mean that you can answer arbitrary questions about what behavior is intended (c.f., various defect reports in the C/C++ spec asking clarifying questions, pointing out holes/deficiencies, or even admitting that certain behavior is not intended but being unsure about how to forbid it) | |
| ▲ | Yoric 20 hours ago | parent | prev [-] | | Good point. That being said, at least in C++, undefined has been used largely as a joker for compiler optimizations. In Rust, if my memory serves, having the same code produce different results depending on the optimization level would be considered a pretty serious bug. In C++, it's par for the course. |
|
|