الصدأ خمس سنوات

في هذه الفوضى التي تحدث في العالم الآن ، من السهل أن ننسى أن خمس سنوات قد مرت منذ إصدار 1.0 في عام 2015! لقد تغيرت Rust كثيرًا خلال هذه السنوات الخمس ، لذلك نود أن نتذكر عمل جميع أفراد المجتمع ، بدءًا من لحظة استقرار اللغة.


تذكر إذا نسي شخص ما: Rust هي لغة برمجة للأغراض العامة لديها الوسائل لبناء برامج موثوقة وفعالة. يمكن استخدام الصدأ في أي مجال: من نواة نظام التشغيل إلى تطبيق الويب التالي. تم بناء هذه اللغة بالكامل من قبل المشاركين في مجتمع مفتوح متعدد الأوجه ، بشكل رئيسي من المتطوعين ، الذين شاركوا بسخاء وقتهم ومعرفتهم من أجل المساعدة في جعل Rust على حالها الآن.


التغييرات الرئيسية منذ الإصدار 1.0


2015


1.2 - إنشاء الشفرة الموازية: كان تقليل وقت التجميع دائمًا موضوعًا رئيسيًا في كل إصدار من إصدارات Rust ، ومن الصعب أن نتخيل أنه بمجرد وجود فترة قصيرة من الوقت لم يكن فيها Rust إنشاء موازٍ للكود على الإطلاق.


1.3 - The Rustonomicon: طبعتنا الأولى من الكتاب الرائع "The Rustonomicon" ، وهو كتاب يستكشف الجانب المظلم من Rust و Unsafe Rust والموضوعات ذات الصلة. لقد أصبح مصدرًا ممتازًا للمعلومات لأي شخص يريد تعلم وفهم أصعب جوانب اللغة.


1.4 - دعم Windows MSVC المستوى 1: جلب النظام الأساسي لدعم المستوى 1 دعمًا أصليًا لنظام التشغيل Windows 64 بت باستخدام مجموعة أدوات 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.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.

لقطة شاشة نهائية لرسالة الخطأ 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.

لقطة شاشة نهائية لرسالة خطأ 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.

لقطة شاشة نهائية لرسالة الخطأ 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.

لقطة شاشة نهائية لرسالة خطأ 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.

لقطة شاشة نهائية لرسالة الخطأ 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.

لقطة شاشة نهائية لرسالة خطأ 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)



مع أي أسئلة حول لغة Rust ، يمكنك المساعدة في دردشة Telegram باللغة الروسية أو في محادثة مماثلة للوافدين الجدد .


تمت ترجمة هذه المقالة بشكل مشترك andreevlex، funkill، nlinker، ل 4 ل، هيرولوت، Po0lunin و لطيف.


All Articles