Five years Rust

In this mess that is happening in the world right now, it's easy to forget that five years have passed since the release of 1.0 in 2015! Rust has changed a lot over these five years, so we would like to recall the work of all members of the community, starting from the moment the language stabilized.


Recall if someone forgot: Rust is a general-purpose programming language that has the means to build reliable and efficient software. Rust can be used in any field: from the kernel of your operating system to your next web application. This language is fully built by members of an open multifaceted community, mainly volunteers, who generously shared their time and knowledge in order to help make Rust the way it is now.


Major changes since version 1.0


2015


1.2 - Parallel Code Generation: Reducing compilation time has always been a major theme in every release of Rust, and now it’s hard to imagine that there was once a short period of time when Rust did not have parallel code generation at all.


1.3 - The Rustonomicon: our first edition of the fantastic book "The Rustonomicon", a book that explores the dark side of Rust, Unsafe Rust, and related topics. It has become an excellent source of information for anyone who wants to learn and understand the most difficult aspects of the language.


1.4 - Support for Windows MSVC level 1: moving the platform to support level 1 brought native support for 64-bit Windows with Microsoft Visual C ++ toolkit (MSVC). Prior to 1.4, you had to install MinGW (the GNU environment port for Windows) in order to use and compile your programs in Rust. Windows support has become one of Rust's biggest enhancements in five years. Only recently, Microsoft announced a public pre-release of official support for Rust WinRT API! And finally, it’s now much easier to build high-quality and cross-platform applications than it has ever been before.


1.5 β€” Cargo Install: Rust cargo , , . Cargo , , crates.io!


2016


1.6 β€” Libcore: libcore β€” , API, . libcore Rust , Rust .


1.10 β€” C ABI: cdylib C-, Rust , ABI C. Rust β€” Rust . , -.


1.12 β€” Cargo Workspaces: Rust lock-. .


1.13 β€” Try: ? "Try". . try!, , Result, ?.


try!(try!(expression).method()); // 
expression?.method()?;           // 

1.14 β€” Rustup 1.0: Rustup β€” . Rust . , , , "". Linux, macOS, Windows .


2017


1.15 β€” : , API . Rust serde diesel.


1.17 β€” Rustbuild: make Cargo. rust-lang/rust .


1.20 β€” : . 1.20 , , , . API, IP- .


2018


1.24 β€” : 1.24, , . , , .


1.26 β€” impl Trait: impl Trait API
.


1.28 β€” : , Rust. API , . alloc, , , , Vec String. , -, .


1.31 β€” 2018 : 2018 1.0, Rust, . , , .


  • (NLL): Rust, .
  • : UX .
  • : Rust .
  • Rustfmt 1.0: , Rust.
  • Clippy 1.0: Rust . Clippy , , .
  • Rustfix: , , . , Rust, cargo fix , .

2019


1.34 β€” : Rust , . Cargo git-. , , crates.io.


1.39 β€” Async/Await: async/await Future " " Rust. , .


2020


1.42 β€” : , .. () , .



, , Rust 1.0. , .


, . , , , , .


()

use std::io::Write;

fn trait_obj(w: &Write) {
    generic(w);
}

fn generic<W: Write>(_w: &W) {}

1.2.0
   Compiling error-messages v0.1.0 (file:///Users/usr/src/rust/error-messages)
src/lib.rs:6:5: 6:12 error: the trait `core::marker::Sized` is not implemented for the type `std::io::Write` [E0277]
src/lib.rs:6     generic(w);
                 ^~~~~~~
src/lib.rs:6:5: 6:12 note: `std::io::Write` does not have a constant size known at compile-time
src/lib.rs:6     generic(w);
                 ^~~~~~~
error: aborting due to previous error
Could not compile `error-messages`.

To learn more, run the command again with --verbose.

A terminal screenshot of the 1.2.0 error message.


1.43.0
   Compiling error-messages v0.1.0 (/Users/ep/src/rust/error-messages)
error[E0277]: the size for values of type `dyn std::io::Write` cannot be known at compilation time
 --> src/lib.rs:6:13
  |
6 |     generic(w);
  |             ^ doesn't have a size known at compile-time
...
9 | fn generic<W: Write>(_w: &W) {}
  |    ------- -       - help: consider relaxing the implicit `Sized` restriction: `+  ?Sized`
  |            |
  |            required by this bound in `generic`
  |
  = help: the trait `std::marker::Sized` is not implemented for `dyn std::io::Write`
  = note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `error-messages`.

To learn more, run the command again with --verbose.

A terminal screenshot of the 1.43.0 error message.


()

fn main() {
    let s = "".to_owned();
    println!("{:?}", s.find("".to_owned()));
}

1.2.0
   Compiling error-messages v0.1.0 (file:///Users/ep/src/rust/error-messages)
src/lib.rs:3:24: 3:43 error: the trait `core::ops::FnMut<(char,)>` is not implemented for the type `collections::string::String` [E0277]
src/lib.rs:3     println!("{:?}", s.find("".to_owned()));
                                    ^~~~~~~~~~~~~~~~~~~
note: in expansion of format_args!
<std macros>:2:25: 2:56 note: expansion site
<std macros>:1:1: 2:62 note: in expansion of print!
<std macros>:3:1: 3:54 note: expansion site
<std macros>:1:1: 3:58 note: in expansion of println!
src/lib.rs:3:5: 3:45 note: expansion site
src/lib.rs:3:24: 3:43 error: the trait `core::ops::FnOnce<(char,)>` is not implemented for the type `collections::string::String` [E0277]
src/lib.rs:3     println!("{:?}", s.find("".to_owned()));
                                    ^~~~~~~~~~~~~~~~~~~
note: in expansion of format_args!
<std macros>:2:25: 2:56 note: expansion site
<std macros>:1:1: 2:62 note: in expansion of print!
<std macros>:3:1: 3:54 note: expansion site
<std macros>:1:1: 3:58 note: in expansion of println!
src/lib.rs:3:5: 3:45 note: expansion site
error: aborting due to 2 previous errors
Could not compile `error-messages`.

To learn more, run the command again with --verbose.

A terminal screenshot of the 1.2.0 error message.


1.43.0
   Compiling error-messages v0.1.0 (/Users/ep/src/rust/error-messages)
error[E0277]: expected a `std::ops::FnMut<(char,)>` closure, found `std::string::String`
 --> src/lib.rs:3:29
  |
3 |     println!("{:?}", s.find("".to_owned()));
  |                             ^^^^^^^^^^^^^
  |                             |
  |                             expected an implementor of trait `std::str::pattern::Pattern<'_>`
  |                             help: consider borrowing here: `&"".to_owned()`
  |
  = note: the trait bound `std::string::String: std::str::pattern::Pattern<'_>` is not satisfied
  = note: required because of the requirements on the impl of `std::str::pattern::Pattern<'_>` for `std::string::String`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `error-messages`.

To learn more, run the command again with --verbose.

A terminal screenshot of the 1.43.0 error message.


( )

fn main() {
    let mut x = 7;
    let y = &mut x;

    println!("{} {}", x, y);
}

1.2.0
   Compiling error-messages v0.1.0 (file:///Users/ep/src/rust/error-messages)
src/lib.rs:5:23: 5:24 error: cannot borrow `x` as immutable because it is also borrowed as mutable
src/lib.rs:5     println!("{} {}", x, y);
                                   ^
note: in expansion of format_args!
<std macros>:2:25: 2:56 note: expansion site
<std macros>:1:1: 2:62 note: in expansion of print!
<std macros>:3:1: 3:54 note: expansion site
<std macros>:1:1: 3:58 note: in expansion of println!
src/lib.rs:5:5: 5:29 note: expansion site
src/lib.rs:3:18: 3:19 note: previous borrow of `x` occurs here; the mutable borrow prevents subsequent moves, borrows, or modification of `x` until the borrow ends
src/lib.rs:3     let y = &mut x;
                              ^
src/lib.rs:6:2: 6:2 note: previous borrow ends here
src/lib.rs:1 fn main() {
src/lib.rs:2     let mut x = 7;
src/lib.rs:3     let y = &mut x;
src/lib.rs:4
src/lib.rs:5     println!("{} {}", x, y);
src/lib.rs:6 }
             ^
error: aborting due to previous error
Could not compile `error-messages`.

To learn more, run the command again with --verbose.

A terminal screenshot of the 1.2.0 error message.


1.43.0
   Compiling error-messages v0.1.0 (/Users/ep/src/rust/error-messages)
error[E0502]: cannot borrow `x` as immutable because it is also borrowed as mutable
 --> src/lib.rs:5:23
  |
3 |     let y = &mut x;
  |             ------ mutable borrow occurs here
4 |
5 |     println!("{} {}", x, y);
  |                       ^  - mutable borrow later used here
  |                       |
  |                       immutable borrow occurs here

error: aborting due to previous error

For more information about this error, try `rustc --explain E0502`.
error: could not compile `error-messages`.

To learn more, run the command again with --verbose.

A terminal screenshot of the 1.43.0 error message.



, . , :


rustdoc :
  • ,
  • ( JSON),
  • "compile_fail, should_panic, allow_fail",
  • .


β€” Guillaume Gomez (rustdoc)

Rust IDE! , IntelliJ Rust,
RLS rust-analyzer Β« Β»
. Β« RustΒ»
Vim/Emacs.

β€” (IDEs and editors)

:
,
Rust ,
.

β€” Daniel Egger (Embedded WG)

2018 ,
~ 40000 rust-lang/rust -
.
, , ,
(, ,
). , ,

, PR . .

β€” Mark Rousskov (Release)

3 Miri

,
.
Stacked Borrows,
Rust.
,
Miri, ,
Miri
, ,
Miri, , ,
.

β€” Ralf Jung (Miri)

, ,
NLL. , ,
Rust, , ,
NLL.
, .
!

β€” Niko Matsakis (Language)


, . Rust , Rust . , Rust.


  • Rust Β« Β» Stack Overflow, , 1.0.
  • 2,25 (1PB = 1000 ) , !
  • 170 1,8 crates.io, .
  • Rust 1.0 , , . , , Apple, Amazon, Dropbox, Facebook, Google Microsoft, Rust .


, Rust, 2015 . Rust? Discourse.


, Rust, , , Rust . , Rust , , Rust !



, - Rust, . ? ? ENTER , … Ctrl+O "" β€” , MC
, , Rust Book.
, , ( Rust , ) , NLL, , , , , . Rust Intellij Idea.
5 Rust Rust . Rust , , - . Rust-

β€” nlinker (Translation Team)

Rust 2017 .
.
.
.


  • Rust book first edition
  • Rust by example
  • Rustonomicon.


.
.

Rust by example, Rust book second edition, Async book

Rust , 3 5 . .

β€” andreevlex ( rust-lang-ru)



With any questions on the Rust language, you can be helped in the Russian-language Telegram chat or in a similar chat for newcomers .


This article was jointly translated andreevlex, funkill, nlinker, l4l, Hirrolot, Po0lunin and blandger.


All Articles