The Rust programming language
Rust is a low-level systems programming language, originally developed at Mozilla, with a syntax inspired by the C-lineage of programming languages.
I would describe it as having an imperative programming style, though it has been influenced significantly by functional programming paradigms as well.
Rust picked ideas from many 80s and 90s programming languages 1 and mainly focuses on:
- Performance
- Rust has no runtime or garbage collector, meaning there’s no performance penalty or overhead from these systems.
- Abstractions should be “zero cost”. Quoting Bjarne Stroustrup, the original developer of C++, this means: “What you don’t use, you don’t pay for. And further: What you do use, you couldn’t hand code any better.”
- Reliability
- Rust is a statically typed and memory-safe language.
- It has a very rich type system and data ownership model which ensures memory-safety and thread-safety. The compiler can eliminate many classes of bugs at compile-time.
- Productivity
- Rust places a strong emphasis and focus on developer productivity.
- It has great documentation, both in terms of general language references and learning resources, as well as excellent API documentation.
- The compiler provides useful error messages, going so far as to often suggest fixes to make code compile successfully.
- It comes with an integrated package manager and build tool (cargo).
- It comes with an official auto-formatter (
rustfmt
), linter (clippy) and language server implementation 2.
References
- Rust Programming Language
- withoutboats. “Zero Cost Abstractions” withoutblogs, May 16, 2019.
- Hoare, Graydon. “Project Servo” Mozilla Annual Summit, July 7, 2010.
-
In his 2010 “Project Servo” presentation, Rust creator Graydon Hoare writes “Many older languages better than newer ones” and cites the following as inspiration for Rust: Nil (1981), Hermes (1990), Erlang (1987), Sather (1990), Newsqueak (1988), Alef (1995), Limbo (1996), Napier (1985, 1988). ↩︎
-
These days, you probably want to use rust-analyzer instead. ↩︎