Cinq ans de rouille

Dans ce gâchis qui se passe actuellement dans le monde, il est facile d'oublier que cinq ans se sont écoulés depuis la sortie de la 1.0 en 2015! La rouille a beaucoup changé au cours de ces cinq années, nous aimerions donc rappeler le travail de tous les membres de la communauté, à partir du moment où la langue s'est stabilisée.


Rappelez-vous si quelqu'un a oublié: Rust est un langage de programmation à usage général qui a les moyens de construire un logiciel fiable et efficace. Rust peut être utilisé dans n'importe quel domaine: du noyau de votre système d'exploitation à votre prochaine application Web. Ce langage est entièrement construit par les membres d'une communauté ouverte à multiples facettes, principalement des bénévoles, qui ont généreusement partagé leur temps et leurs connaissances afin d'aider à faire de Rust ce qu'il est aujourd'hui.


Changements majeurs depuis la version 1.0


2015


1.2 - Génération de code parallèle: La réduction du temps de compilation a toujours été un thème majeur dans chaque version de Rust, et maintenant il est difficile d'imaginer qu'il y avait une fois une courte période où Rust n'avait pas du tout de génération de code parallèle.


1.3 - Le Rustonomicon: notre première édition du fantastique livre "The Rustonomicon", un livre qui explore le côté sombre de la rouille, de la rouille dangereuse et des sujets connexes. Il est devenu une excellente source d'information pour quiconque souhaite apprendre et comprendre les aspects les plus difficiles de la langue.


1.4 — Windows MSVC 1: 1 64- Windows Microsoft Visual C++ (MSVC). 1.4 MinGW ( GNU Windows) Rust. Windows Rust . Microsoft - Rust WinRT API! , , - .


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.

Une capture d'Ă©cran du terminal du message d'erreur 1.2.0.


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.

Une capture d'Ă©cran du terminal du message d'erreur 1.43.0.


()

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.

Une capture d'Ă©cran du terminal du message d'erreur 1.2.0.


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.

Une capture d'Ă©cran du terminal du message d'erreur 1.43.0.


( )

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.

Une capture d'Ă©cran du terminal du message d'erreur 1.2.0.


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.

Une capture d'Ă©cran du terminal du message d'erreur 1.43.0.



, . , :


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)



Pour toute question sur la langue rouille, vous pouvez être aidé dans le chat Telegram en russe ou dans un chat similaire pour les nouveaux arrivants .


Cet article a été traduit conjointement andreevlex, funkill, nlinker, l4l, Hirrolot, Po0lunin et blandger.


All Articles