  Rust is an emergent systems programming language highlighting memory safety
by its Ownership and Borrowing System (OBS). The existing formal semantics for
Rust only covers limited subsets of the major language features of Rust.
Moreover, they formalize OBS as type systems at the language-level, which can
only be used to conservatively analyze programs against the OBS invariants at
compile-time. That is, they are not executable, and thus cannot be used for
automated verification of runtime behavior.
  In this paper, we propose RustSEM, a new executable operational semantics for
Rust. RustSEM covers a much larger subset of the major language features than
existing semantics. Moreover, RustSEM provides an operational semantics for OBS
at the memory-level, which can be used to verify the runtime behavior of Rust
programs against the OBS invariants. We have implemented RustSEM in the
executable semantics modeling tool K-Framework. We have evaluated the semantics
correctness of RustSEM wrt. the Rust compiler using around 700 tests. In
particular, we have proposed a new technique for testing semantic consistency
to ensure the absence of semantic ambiguities on all possible execution
selections. We have also evaluated the potential applications of RustSEM in
automated runtime and formal verification for both functional and memory
properties. Experimental results show that RustSEM can enhance the memory
safety mechanism of Rust, as it is more powerful than OBS in detecting memory
errors.
