I recently wrote a tool that helps with auditing unsafe blocks: https://github.com/huonw/unsafe_ls

It lists all the unsafe blocks in a crate and prints the lines with the actual unsafe actions on them, with a crude filter to omit FFI (and/or only see FFI). This doesn't do anything intelligent at all, just makes it easier for humans to find and read any unsafe code; and it's still up to the programmer to work out what safe code needs to be checked too.

(Works well with emacs' compilation-mode, in my experience.)


Huon

On 04/03/14 13:58, Patrick Walton wrote:
It's plain hyperbolic to call Rust's unsafe blocks something that leads to a false sense of security. If you don't want your unsafe code to be reliant on safe code, don't call that safe code, or be conservative and defend yourself against it going wrong. Unsafe code should be simple and easy to understand, and in practice this has worked well so far.

Such a tool would be useful and would help evaluate the unsafe code for correctness, but let's not pretend that it's needed for Rust to be much safer than C++. However that is determined, if the unsafe code is correct, all the safe code is guaranteed to be free from memory safety problems. Action-at-a-distance (unmarked code affecting safe code) is an unfortunate hazard, and one that we should mitigate, but in practice changing safe code hasn't affected much, because our unsafe code tends to be small and localized.

Patrick

Daniel Micay <danielmi...@gmail.com> wrote:

    On 03/03/14 08:54 PM, Patrick Walton wrote:

        On 3/3/14 5:53 PM, Daniel Micay wrote:

            On 03/03/14 08:19 PM, Steve Klabnik wrote:

                Part of the issue with that statement is that you may
                or may not program in this way. Yes, people choose
                certain subsets of C++ that are more or less safe, but
                the language can't help you with that.

            You can choose to write unsafe code in Rust too.

        You have to write the *unsafe* keyword to do so. Patrick


    You need an `unsafe` keyword somewhere, but the memory safety bug can
    originate in safe co
      de. Any
    safe code called by unsafe code is trusted
    too, but not marked as such. A memory safety bug can originate
    essentially anywhere in librustc, libsyntax, libstd and the other
    libraries because they're freely mixed with `unsafe` code.

    It's pretty much a false sense of security without tooling to show which
    code is trusted by an `unsafe` block/function *somewhere*, even in
    another crate.


--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.


_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to