contact: use my ETH email address
[web.git] / personal / _posts / 2022-09-26-cargo-careful.md
index 28bfec9d4807658c2a60b2c1d3323b5357758ad4..28a85c9b6547b2640ccb4c52987d902f150fa0b9 100644 (file)
@@ -1,17 +1,18 @@
 ---
-title: "carego careful: run your Rust code with extra careful debug checking"
+title: "cargo careful: run your Rust code with extra careful debug checking"
 categories: rust
+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?
-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.
-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).
@@ -22,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
+
+*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)!*