-
Notifications
You must be signed in to change notification settings - Fork 409
Tools for HVM development
Boscop edited this page Apr 13, 2023
·
4 revisions
- Cargo commands for modifying a
Cargo.toml
file: https://crates.io/crates/cargo-edit - Code search and replace tool: https://crates.io/crates/amber
- Fast, partial replacement for codemod (find/replace tool for programmers): https://crates.io/crates/fastmod
- fd is a simple, fast and user-friendly alternative to find: https://crates.io/crates/fd-find
- General-purpose command-line fuzzy finder: https://github.com/junegunn/fzf
- https://github.com/rust-lang/rustfmt
- https://rust-analyzer.github.io
- Helix editor is a modal editor written in Rust that takes inspiration from Vim & Kakoune, with RLS and debugger support out of the box
- Find out what takes most of the space in your executable: https://crates.io/crates/cargo-bloat
- A Cargo subcommand that visualizes a crate's dependency graph in a tree-like format: https://crates.io/crates/cargo-tree
- Cargo plugin to help you manage large dependency graphs: https://crates.io/crates/cargo-deny
- Cargo subcommand to see license of dependencies: https://crates.io/crates/cargo-license
- Show crate features, and what they expand to, in a tree-like format: https://crates.io/crates/cargo-feature-tree
- A cargo plugin for showing a tree-like overview of a crate's modules: https://crates.io/crates/cargo-modules
- Helper to transform reports from Rust tooling for code quality, into valid Sonar report: https://crates.io/crates/cargo-sonar
- Checks if dependencies in Cargo.toml are up to date. Compatible with workspaces and path dependencies: https://crates.io/crates/cargo-upgrades
- Cargo subcommand for displaying when dependencies are out of date: https://crates.io/crates/cargo-outdated
- Wrapper around
rustc -Zunpretty=expanded
. Shows the result of macro expansion and#[derive]
expansion: https://crates.io/crates/cargo-expand - Check if tables and items in a .toml file are lexically sorted: https://crates.io/crates/cargo-sort
- Cargo with less noise: warnings are skipped until errors are fixed, Neovim integration, etc.: https://crates.io/crates/cargo-limit
- Rust tool to collect and aggregate code coverage data for multiple source files: https://crates.io/crates/grcov
- Tool to determine code coverage achieved via tests: https://crates.io/crates/cargo-tarpaulin
- Cargo subcommand to easily use LLVM source-based code coverage (-C instrument-coverage): https://crates.io/crates/cargo-llvm-cov
- A
cargo
subcommand to easily run Rust scripts (more type-safe than bash/python scripts): https://crates.io/crates/cargo-eval - Simple, cross-platform, and fast command aliases with superpowers: https://crates.io/crates/bonnie
- Cargo Watch watches over your project's source for changes, and runs Cargo commands when they occur
- Rust task runner and build tool: https://crates.io/crates/cargo-make
- Task runner similar to cargo-make: https://crates.io/crates/just
- A CLI task runner defined by a simple markdown file: https://crates.io/crates/mask
- Clippy linter
- Audit Cargo.lock for crates with security vulnerabilities: https://crates.io/crates/cargo-audit
- cargo-careful is a tool to run your Rust code extra carefully -- opting into a bunch of nightly-only extra checks that help detect Undefined Behavior, and using a standard library with debug assertions
- cargo-geiger detects usage of unsafe Rust in a Rust crate and its dependencies
- Siderophile finds the "most unsafe" functions in your Rust codebase, so you can fuzz them or refactor them out entirely
- Show generated Assembly / LLVM IR: https://crates.io/crates/cargo-show-asm
- Static, whole program stack usage analyzer: https://crates.io/crates/cargo-call-stack
- Crux uses symbolic reasoning to check tests exhaustively, on all possible inputs, rather than on a smaller number of fixed or randomly-chosen values. In this way, Crux improves the coverage possible with property-based testing
- Static analysis on LLVM IR: https://crates.io/crates/llvm-ir-analysis
- Symbolic execution of LLVM IR, written in Rust: https://crates.io/crates/haybale
- Verifying constant-time code with symbolic execution: https://crates.io/crates/haybale-pitchfork
- Taint tracking for LLVM IR: https://crates.io/crates/llvm-ir-taint
- Loom is a testing tool for concurrent Rust code. It runs a test many times, permuting the possible concurrent executions of that test under the C11 memory model. It uses state reduction techniques to avoid combinatorial explosion.
- ThreadSanitizer is a data race detection tool
- Miri, the interpreter for Rust's mid-level intermediate representation
- Prop testing:
- https://altsysrq.github.io/proptest-book/intro.html
- https://crates.io/crates/arbitrary
- https://docs.rs/proptest-arbitrary/latest/proptest_arbitrary/
- Blog post about prop testing: https://www.greyblake.com/blog/property-based-testing-in-rust-with-arbitrary/
- Podcast episode about prop testing: https://oxide.computer/podcasts/oxide-and-friends/1272104
- Fuzz testing:
- LLDB: https://lldb.llvm.org
- Install instructions for Helix Editor: https://github.com/helix-editor/helix/wiki/Debugger-Configurations#install-debuggers
- Ghidra, open-source disassembler / reverse engineering tool similar to IDA Pro: https://ghidra-sre.org https://en.wikipedia.org/wiki/Ghidra
- Valgrind: https://valgrind.org
- Callgrind: https://valgrind.org/docs/manual/cl-manual.html
- Cachegrind: https://valgrind.org/docs/manual/cg-manual.html
- KCachegrind: https://kcachegrind.sourceforge.net/html/Home.html
- GDB: https://www.sourceware.org/gdb
- Intro to LLVM IR: https://mukulrathi.com/create-your-own-programming-language/llvm-ir-cpp-api-tutorial/
- Linking previously compiled object files with generated LLVM IR when JIT-linking: https://llvm.org/docs/JITLink.html#jit-linking