Yep, I wrote that as my first project in rust and it was used for a lot of the Piston project repos. Unfortunately I stopped updating that in December because breaking changes were happening too frequently for me to keep up.
I'll probably revisit it soon now that 1.0 is fairly imminent, but prs are welcome of course!
I'll take the downvote as a request for elaboration. In C, you dereference a pointer. This typically translates to machine code that loads memory at an address. The translation is so direct that we tend to think of them as identical, i.e. dereferencing a pointer is loading memory at an address. But this is not so; first of all, nothing says pointers have to be implemented as memory addresses in the first place, and even if you do implement them that way (as virtually every C implementation does), not every pointer dereference has to generate a load instruction. That's not just the case for optimizing out NULL dereferences. Optimizations mean that in general, an expression p can have the memory load optimized away if the value at that location is already known from a previous computation (say, because you just assigned a value there, or you read the value a bit earlier and it's still available in a register).
In C, you deference a pointer. In assembly or machine code, you load memory at an address. The two don't have to happen at the same time, though, and just because you don't end up loading memory at an address doesn't mean you didn't dereference a pointer.
In short:
*(char *)NULL
This always dereferences NULL, even if the compiler optimizes out the statement entirely.
You can upgrade every package on the system simply by running `pkg_add -u`. This has been the case since they were rewritten by Marc Espie for the 3.5 release in 2004.