Lima tahun Karat

Dalam kekacauan yang sedang terjadi di dunia saat ini, mudah untuk melupakan bahwa lima tahun telah berlalu sejak rilis 1.0 pada 2015! Rust telah banyak berubah selama lima tahun ini, jadi kami ingin mengingat kembali pekerjaan semua anggota komunitas, mulai dari saat bahasa mulai stabil.


Ingat jika seseorang lupa: Rust adalah bahasa pemrograman untuk tujuan umum yang memiliki sarana untuk membangun perangkat lunak yang andal dan efisien. Karat dapat digunakan di bidang apa saja: dari kernel sistem operasi Anda ke aplikasi web Anda berikutnya. Bahasa ini sepenuhnya dibangun oleh anggota komunitas multi-segi terbuka, terutama sukarelawan, yang dengan murah hati berbagi waktu dan pengetahuan mereka untuk membantu membuat Rust seperti sekarang.


Perubahan besar sejak versi 1.0


2015


1.2 - Pembuatan Kode Paralel: Mengurangi waktu kompilasi selalu menjadi tema utama dalam setiap rilis Rust, dan sulit untuk membayangkan bahwa pernah ada periode waktu singkat ketika Rust tidak memiliki pembuatan kode paralel sama sekali.


1.3 - The Rustonomicon: edisi pertama kami dari buku fantastis "The Rustonomicon", sebuah buku yang mengeksplorasi sisi gelap Rust, Unsafe Rust, dan topik terkait. Ini telah menjadi sumber informasi yang sangat baik bagi siapa saja yang ingin belajar dan memahami aspek-aspek bahasa yang paling sulit.


1.4 - Dukungan untuk Windows MSVC level 1: memindahkan platform ke mendukung level 1 membawa dukungan asli untuk Windows 64-bit dengan toolkit Microsoft Visual C ++ (MSVC). Sebelum 1.4, Anda harus menginstal MinGW (port environment GNU untuk Windows) untuk menggunakan dan mengkompilasi program Anda di Rust. Dukungan Windows telah menjadi salah satu peningkatan terbesar Rust dalam lima tahun. Baru-baru ini, Microsoft mengumumkan pra-rilis publik dukungan resmi untuk Rust WinRT API! Dan akhirnya, sekarang jauh lebih mudah untuk membangun aplikasi lintas platform yang berkualitas tinggi daripada sebelumnya.


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.

Tangkapan layar terminal untuk pesan kesalahan 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.

Tangkapan layar terminal untuk pesan kesalahan 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.

Tangkapan layar terminal untuk pesan kesalahan 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.

Tangkapan layar terminal untuk pesan kesalahan 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.

Tangkapan layar terminal untuk pesan kesalahan 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.

Tangkapan layar terminal untuk pesan kesalahan 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)



Dengan pertanyaan apa pun tentang bahasa Rust, Anda dapat dibantu dalam obrolan Telegram berbahasa Rusia atau dalam obrolan serupa untuk pendatang baru .


Artikel ini diterjemahkan bersama dan refleks, funkill, nlinker, l4l, Hirrolot, Po0lunin dan blandger.


All Articles