How about we simply follow the Rust way? In Nim this could mean: `addr`, `ptr`, etc get an unsafe effect, everything else is implicitly `.notTags: {Unsafe}` and we need to put a `.cast` block around the code using `addr` etc. to make it safe (we could create a macro called `unsafe` which is just sugar for the `cast`).
That way we get the benefit that Rust gets: it's clear what code performs unsafe memory operations.