commented: Why don't they use Rust for these tools? commented: Hello! I made Soteria's core :) The main two reasons are: Rust doesn't have monads. Writing a symbolic execution engine without making mistakes is really difficult, and having the ability to hide parts behind monads and pretty syntax has been a huge boon Symbolic execution branches. When you branch, a lot of things end up being shared between the branches. I haven't figured out how to do this efficiently without a garbage collector And then a few other things, e.g. algebraic effects, are making our life so easy. That being said, writing Soteria (the core, mainly Symex.ml) in Rust, is an open challenge and we welcome propositions :p commented: Maybe because the authors are more familiar with Rust? Soteria founders have this paper https://dl.acm.org/doi/10.1145/3808306 (haven't read it yet). IMO I don't see what Rust provides here that is a major selling point over OCaml. Why is OCaml a bad choice here? There are many many similar tools for program analysis written in OCaml (Infer, Semgrep, Trust-in-Soft and so on). commented: OCaml's awesome, but it seems like a sensible default to write a language's tooling in that language, so I'd expect a particular reason but couldn't find one reading around. (People often call Rust an OCaml (or ML?) though too, complicating matters.) commented: soteria aims to target many languages, not just rust commented: I thought they called Rust an ML? (Not to be pedantic - I just haven’t heard anyone conflate OCaml and Rust before.) commented: Back when /r/rust/ had RSS feeds, I called Rust an ML-lineage language disguised by the addition of ownership and borrowing and its use of C++ syntax on multiple occasions. Heck, basically every bit of syntax that couldn't be borrowed from C++ for familiarity traces back to Ocaml. Some examples: let for variable declaration and postfix type annotations separated with colons 'a (Ocaml's equivalent to <T> for generics, because, on an abstract/theoretical level, Rust's lifetimes are a special type of generic parameter, right down to "a" apparently being the habitual default type variable name, just like "T" is in C++) Option (option in Ocaml), Some, and None match fn (fun or function in Ocaml) -> and => (just -> in Ocaml) for function returns and match arms () commented: Garbage collection makes it a lot easier to deal with graphs in memory. .