| ▲ | newpavlov 7 hours ago |
| For a system programming language the right solution is to properly track aliasing information in the type system as done in Rust. Aliasing issues is just yet another instance of C/C++ inferiority holding the industry back. C could've learnt from Fortran, but we ended up with the language we have... |
|
| ▲ | cv5005 an hour ago | parent [-] |
| For systems programming the correct way is to have explicit annotations so you can tell the compiler things like: void foo(void *a, void *b, int n) {
assume_aligned(a, 16);
assume_stride(a, 16);
assume_distinct(a, b);
... go and vectorize!
}
|
| |
| ▲ | newpavlov an hour ago | parent [-] | | LOL, nope. Those annotations must be part of the type system (e.g. `&mut T` in Rust) and must be checked by the compiler (the borrow checker). The language can provide escape hatches like `unsafe`, but they should be rarely used. Without it you get a fragile footgunny mess. Just look at the utter failure of `restrict`. It was so rarely used in C that it took several years of constant nagging from Rust developers to iron out various bugs in compilers caused by it. |
|