Audience: C/C++ programmers.
- everybody want more features
- but more features usually mean more bugs and failures
- stuck fixing bugs? not a good use of your time!
- yet software devs spend most of their time hunting for and fixing bugs
Less time spent on bug hunting, more time spent on making things compile.
- safety by default (in contrast to C++)
- ability to specify correctness properties (mostly things like: "this array is always dereferenced correctly", or "this memory is properly freed after use")
- gradual improvement: no need to put a lot of effort upfront, write dirty code that works, and then sit down and improve efficiency and correctness (either or both, you have the tools!)
- efficiency on par with C (but requires a C-style of coding where you have to spend more time proving safety, so it's a trade-off)
The bar is pretty high, but I think it's better to spend time on these topics, than on chasing obscure bugs!
- good knowledge of C
- working knowledge of mathematics (this will help)
- how to use types to your advantage
- Rust is pretty fine! It is, however, a big departure from existing ecosystem (in contrast with ATS, which compiles to C). Some safety properties are easier to express in ATS than in Rust (but these properties will require more time to prove).
- C++ is very complex. In terms of language complexity, ATS is simpler (although ATS is complex, too, but in a different sort of way).