link to sloonz's script
[web.git] / personal / _posts / 2022-09-26-cargo-careful.md
index fbc49ca6d09127a55caca3951b135f5a47a6e19c..28a85c9b6547b2640ccb4c52987d902f150fa0b9 100644 (file)
@@ -5,14 +5,14 @@ reddit: /rust/comments/xogayv/cargo_careful_run_your_rust_code_with_extra/
 ---
 
 Did you know that the standard library is full of useful checks that users never get to see?
 ---
 
 Did you know that the standard library is full of useful checks that users never get to see?
-There are plenty of debug assertions in the standard library that will do things like check that `char::from_u32_unchecked` is called on a valid `char`, that `CStr::from_bytes_with_nul_unchecked` does not have internal nul bytes, or that pointer functions such as `read`, `copy`, or `copy_nonoverlapping` are called on suitably aligned non-null (and non-overlapping) pointers.
+There are plenty of debug assertions in the standard library that will do things like check that `char::from_u32_unchecked` is called on a valid `char`, that `CStr::from_bytes_with_nul_unchecked` does not have internal nul bytes, or that pointer functions such as `copy` or `copy_nonoverlapping` are called on suitably aligned non-null (and non-overlapping) pointers.
 However, the regular standard library that is distributed by rustup is compiled without debug assertions, so there is no easy way for users to benefit from all this extra checking.
 
 <!-- MORE -->
 
 [`cargo careful`](https://github.com/RalfJung/cargo-careful) is here to close this gap:
 when invoked the first time, it builds a standard library with debug assertions from source, and then runs your program or test suite with that standard library.
 However, the regular standard library that is distributed by rustup is compiled without debug assertions, so there is no easy way for users to benefit from all this extra checking.
 
 <!-- MORE -->
 
 [`cargo careful`](https://github.com/RalfJung/cargo-careful) is here to close this gap:
 when invoked the first time, it builds a standard library with debug assertions from source, and then runs your program or test suite with that standard library.
-Installing `cargo careful` is as easy as `cargo install cargo-careful`, and then you can do `cargo careful run`/`cargo careful test` to execute your binary crates and test suites with an extra amount of debug checking.
+Installing `cargo careful` is as easy as `cargo install cargo-careful`, and then you can do `cargo +nightly careful run`/`cargo +nightly careful test` to execute your binary crates and test suites with an extra amount of debug checking.
 
 This will naturally be slower than a regular debug or release build, but it is *much* faster than executing your program in [Miri](https://github.com/rust-lang/miri) and still helps find some Undefined Behavior.
 Unlike Miri, it is fully FFI-compatible (though the code behind the FFI barrier is completely unchecked).
 
 This will naturally be slower than a regular debug or release build, but it is *much* faster than executing your program in [Miri](https://github.com/rust-lang/miri) and still helps find some Undefined Behavior.
 Unlike Miri, it is fully FFI-compatible (though the code behind the FFI barrier is completely unchecked).
@@ -23,3 +23,5 @@ There are probably ways to improve this in the future.
 Meanwhile, if you have some `unsafe` code that for one reason or another you cannot test with Miri, give [`cargo careful`] a try and let me know how it is doing. :)
 
 [`cargo careful`]: https://github.com/RalfJung/cargo-careful
 Meanwhile, if you have some `unsafe` code that for one reason or another you cannot test with Miri, give [`cargo careful`] a try and let me know how it is doing. :)
 
 [`cargo careful`]: https://github.com/RalfJung/cargo-careful
+
+*By the way, I am soon [starting as a professor at ETH Zürich]({% post_url 2022-08-16-eth %}), so if you are interested in working with me on programming language theory as a master student, PhD student, or post-doc, then please [reach out](https://research.ralfj.de/contact.html)!*