# Why Rust

## History of Rust

Rust initially designed and developed by Mozilla employee **Graydon Hoare** as a personal project. Mozilla began sponsoring the project in 2009 and announced it in 2010. But the first stable release, Rust 1.0 released on May 15, 2015.

## Initial Goals

The goal of Rust is to be a good language for creating highly concurrent and highly safe systems. Also Rust designed to provide speed and safety at the same time.

> "Rust is a systems programming language focused on three goals: safety, speed, and concurrency."\
> \_\_ Rust Documentation

Rust is very young and very modern language. It's a **compiled programming language** and it uses [LLVM](https://en.wikipedia.org/wiki/LLVM) on its backend. Also Rust is a **multi-paradigm programming language**, it supports imperative procedural, concurrent actor, object-oriented and pure functional styles. It also supports generic programming and meta programming, in both static and dynamic styles.

> 🔎 One of Rust’s most unique and compelling features is [Ownership](https://github.com/learning-rust/book/tree/a33b49416b63a30b12877909b91ca6c8183ffe56/source/docs/c1.ownership.html), which uses to achieves memory safety. Rust creates memory pointers optimistically, checks memory pointers’ limited accesses at the compiler time with the usage of [References and Borrowing](https://github.com/learning-rust/book/tree/a33b49416b63a30b12877909b91ca6c8183ffe56/source/docs/c2.borrowing.html). And it does automatic compile time memory management by checking the [Lifetimes](https://github.com/learning-rust/book/tree/a33b49416b63a30b12877909b91ca6c8183ffe56/source/docs/c3.lifetimes.html).

## Influences

Its design elements came from a wide range of sources.

* Abstract Machine Model : **C**
* Data types : **C, SML, OCaml, Lisp, Limbo**
* Optional Bindings : **Swift**
* Hygienic Macros : **Scheme**
* Functional Programming : **Haskell, OCaml, F#**
* Attributes : **ECMA**-335
* Memory Model and Memory Management : **C++, ML Kit, Cyclone**
* Type Classes : **Haskell**
* Crate : Assembly in the **ECMA**-335 CLI model
* Channels and Concurrency : **Newsqueak, Alef, Limbo**
* Message passing and Thread failure : **Erlang** &#x20;

and etc.

Rust **doesn't use an automated garbage collection** system(GC) by default.

Rust compiler observes the code **at compiler time** and helps to [**prevent many types of errors**](https://doc.rust-lang.org/error-index.html) that are possible to write in C++
