Ferrugem de cinco anos

Nesta bagunça que está acontecendo no mundo agora, é fácil esquecer que cinco anos se passaram desde o lançamento da 1.0 em 2015! A ferrugem mudou muito nesses cinco anos, portanto, gostaríamos de recordar o trabalho de todos os membros da comunidade, a partir do momento em que o idioma se estabilizou.


Lembre-se se alguém esqueceu: Rust é uma linguagem de programação de uso geral que possui os meios para criar software confiável e eficiente. O Rust pode ser usado em qualquer campo: do kernel do seu sistema operacional ao seu próximo aplicativo da web. Esse idioma é totalmente construído por membros de uma comunidade aberta e multifacetada, principalmente voluntários, que compartilharam generosamente seu tempo e conhecimento para ajudar a tornar o Rust do jeito que está agora.


Principais mudanças desde a versão 1.0


2015


1.2 - Geração de código paralelo: reduzir o tempo de compilação sempre foi um tema importante em todas as versões do Rust, e é difícil imaginar que houve um curto período de tempo em que o Rust não teve geração de código paralelo.


1.3 - The Rustonomicon: nossa primeira edição do fantástico livro "The Rustonomicon", um livro que explora o lado sombrio de Rust, Unsafe Rust e tópicos relacionados. Tornou-se uma excelente fonte de informação para quem quer aprender e entender os aspectos mais difíceis do idioma.


1.4 - Suporte para Windows MSVC nível 1: mover a plataforma para o nível 1 trouxe suporte nativo para Windows de 64 bits com o Microsoft Visual C ++ toolkit (MSVC). Antes da versão 1.4, era necessário instalar o MinGW (a porta do ambiente GNU para Windows) para usar e compilar seus programas no Rust. O suporte ao Windows se tornou um dos maiores aprimoramentos da Rust em cinco anos. Apenas recentemente, a Microsoft anunciou um pré-lançamento público do suporte oficial à API Rust WinRT! E, finalmente, agora é muito mais fácil criar aplicativos de alta qualidade e multiplataforma do que nunca.


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.13Try: ? "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.26impl 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.

Uma captura de tela do terminal da mensagem de erro 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.

Uma captura de tela do terminal da mensagem de erro 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.

Uma captura de tela do terminal da mensagem de erro 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.

Uma captura de tela do terminal da mensagem de erro 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.

Uma captura de tela do terminal da mensagem de erro 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.

Uma captura de tela do terminal da mensagem de erro 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)



Em caso de dúvidas sobre o idioma Rust, você pode ser ajudado no bate-papo do Telegram no idioma russo ou em um bate-papo semelhante para os novatos .


Este artigo foi traduzido em conjunto andreevlex, funkill, nlinker, l4l, Hirrolot, Po0lunin e sem graça.


All Articles