自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Rust也出2077?受歡迎的編程語(yǔ)言再度更新!

新聞 前端
Rust語(yǔ)言是一種高效、可靠的通用高級(jí)語(yǔ)言,同時(shí)兼顧了開發(fā)效率和執(zhí)行效率。Rust除了能夠勝任性能敏感的任務(wù)以外,也在內(nèi)存和線程安全方面有著極高的可靠性。

Rust語(yǔ)言是一種高效、可靠的通用高級(jí)語(yǔ)言,同時(shí)兼顧了開發(fā)效率和執(zhí)行效率。Rust除了能夠勝任性能敏感的任務(wù)以外,也在內(nèi)存和線程安全方面有著極高的可靠性。

在更新了1.52.1后,Rust又宣布了2021版本新的計(jì)劃:在10月份發(fā)布1.56。

[[399818]]

 目前的1.52.1版本主要是針對(duì)增量編譯產(chǎn)生的錯(cuò)誤提供了臨時(shí)的解決方案:

禁用 Rust 編譯器中的增量編譯(如需開啟,則設(shè)置環(huán)境變量RUSTC_FORCE_INCREMENTAL = 1)。

對(duì)于啟用了增量編譯的場(chǎng)景,改進(jìn)了用于新驗(yàn)證的診斷輸出,指示了如何通過(guò)清除增量狀態(tài)或禁用增量來(lái)解決錯(cuò)誤。

用過(guò)的都說(shuō):真香!

你或許不知道,Rust在stackoverflow的調(diào)查中連續(xù)五年被選為最受開發(fā)者喜愛(ài)的編程語(yǔ)言。更是有不少知名巨頭將Rust語(yǔ)言加入到他們的項(xiàng)目中。

在用戶喜愛(ài)榜中Rust一騎絕塵,根本看不到第二名在哪兒

Microsoft正在將Rust集成到大型的項(xiàng)目中。有大約70%漏洞都與內(nèi)存安全有關(guān),于是便尋求更具安全性的Rust幫助其解決這一困擾許久的問(wèn)題。

Facebook則把Rust用在了源碼控制后端的代碼重寫上。由于Rust可以在編譯時(shí)檢查出代碼的錯(cuò)誤,從而有效地減少了bug所帶來(lái)的經(jīng)濟(jì)損失。

Dropbox使用Rust對(duì)文件同步引擎的代碼進(jìn)行了重寫。高并發(fā)的文件同步引擎,在編寫、測(cè)試和調(diào)試方面都十分困難,而Rust在靜態(tài)類型和編譯檢查方面要比正在使用的Python性能更強(qiáng)。

甚至Linux內(nèi)核也即將在5.14中加入對(duì)Rust的支持,畢竟C++太爛了(不是我說(shuō)的,是Linus說(shuō)的)。

「C++ solves _none_ of the C issues, and only makes things worse.」

網(wǎng)友對(duì)即將來(lái)臨的更新很興奮!

 「我已經(jīng)等不及了。作為使用Python的人,我真的很想念對(duì)混合了變量的字符串的簡(jiǎn)單直觀的處理?!?/p>

「所有edition都會(huì)被永久支持。這讓Rust 2015的代碼和Rust 2077的代碼的融合變?yōu)榭赡??!?/p>

「感謝所有Rust志愿者,你們是最棒的!」

2021更新計(jì)劃中都有什么?

1. Edition 是什么?

Rust提出了一種Edition更新形式,這種方式不會(huì)割裂生態(tài)系統(tǒng)。

一個(gè)向后不兼容的功能將會(huì)被作為新的Rust Edition的一部分。Edition是選擇性加入的,因此,除非現(xiàn)有的crate明確遷移到新版本中,否則就不會(huì)看到這些變化。

一個(gè)Edition中的crate可以與其他Edition中編譯的crate無(wú)縫地互操作。不管Edition如何,所有 Rust代碼最終都會(huì)在編譯器中編譯為相同的內(nèi)部 IR。

Edition的遷移也幾乎是全自動(dòng)的。在發(fā)布新Edition的同時(shí),會(huì)附帶一個(gè)自動(dòng)遷移工具。除此以外,還有一本《版本遷移指南》,該指南既是版本的概述,也是在遇到問(wèn)題的故障排除參考。

在對(duì)舊的版本進(jìn)行遷移時(shí),需要對(duì)代碼進(jìn)行一些小的更改。例如,當(dāng)遷移到Rust 2018時(shí),所有的「async」都會(huì)變?yōu)椋骸竢#async」。

2. prelude中新的內(nèi)容

Rust編譯器會(huì)優(yōu)先處理手動(dòng)導(dǎo)入的項(xiàng),使得在prelude添加的內(nèi)容不會(huì)破壞任何現(xiàn)有代碼。

例如,一個(gè)名為「example」的crate或module,其中包含「pub struct Option ;」,那么可以通過(guò)使用「example::*;」,使得「Option」明確引用「example;」而不是標(biāo)準(zhǔn)庫(kù)中的。

但是,在prelude中添加特征便可能會(huì)破壞現(xiàn)有代碼。例如,在使用「MyTryInto」特征調(diào)用「x.try_into()」時(shí),如果還導(dǎo)入了「std」的「TryInto」,則會(huì)出現(xiàn)無(wú)法編譯的情況,因?yàn)樗峁┝司哂邢嗤Q的方法。

作為解決方案,Rust 2021將使用新的prelude,其中增加了三個(gè)新的功能:

  1. std::convert::TryInto 
  2.  
  3. std::convert::TryFrom 
  4.  
  5. std::iter::FromIterator 

 3. 默認(rèn)使用Cargo功能解析器

自1.51.0起,Cargo在選擇加入中有了對(duì)新的功能解析器的支持,該功能可以在「Cargo.toml」中使用「resolver = "2"」激活。

從Rust 2021開始,這將是默認(rèn)設(shè)置。也就是說(shuō),在「Cargo.toml」中寫入「edition = "2021"」就意味著「resolver = "2"」。

4. 數(shù)組迭代器IntoIterator

在Rust 1.53.0之前,「IntoIterator」只能用于數(shù)組的引用。也就是說(shuō)可以遍歷「&[1, 2, 3]」和「&mut [1, 2, 3]」,但不能直接遍歷「[1, 2, 3]」。

  1. for &e in &[123] {} // Ok :) 
  2.  
  3. for e in [123] {} // Error :( 

團(tuán)隊(duì)在1.53.0之后所有版本中添加特征實(shí)現(xiàn)。在Rust 2015和2018代碼中,編譯器仍會(huì)將「 array.into_iter()」解析為「(&array).into_iter()」。

這僅適用于「.into_iter()」調(diào)用語(yǔ)法, 而不會(huì)影響任何其他語(yǔ)法,例如「for e in [1, 2, 3]」,「iter.zip([1, 2, 3])」或「IntoIterator::into_iter([1, 2, 3])」。

5. 閉包(closures)的捕獲

閉包會(huì)自動(dòng)從代碼塊中捕獲所有的引用。例如,「|| a. + 1」會(huì)自動(dòng)從周圍的上下文中捕獲對(duì)「a」的引用,不僅僅是「a.x」。這會(huì)在某些情形下造成問(wèn)題。

  1. let a = SomeStruct::new(); 
  2.  
  3. drop(a.x); //Move out of one field of the struct 
  4.  
  5. println!("{}"m a.y); // OK: Still use another field of the struct 
  6.  
  7. let c = || println!("{}", a.y); // Error: Tries to capture all of 'a' 
  8.  
  9. c(); 

當(dāng)結(jié)構(gòu)的某個(gè)字段被借用或移出時(shí),其他字段將無(wú)法再用于閉包中,因?yàn)檎麄€(gè)結(jié)構(gòu)都會(huì)因?yàn)楸徊东@而變得不再可用。

從Rust 2021開始,閉包將僅捕獲其使用的字段。

由于這個(gè)變化會(huì)對(duì)字段的刪除順序造成影響,目前僅在新版本中被激活。如果像以前一樣捕獲整個(gè)結(jié)構(gòu),則可通過(guò)在閉包中插入「let _ = &a; 」得到。對(duì)于其他版本,可以使用自動(dòng)遷移,從而更新相關(guān)的閉包。

6. Panic宏的一致性

「panic!()」宏僅在使用多個(gè)參數(shù)調(diào)用時(shí)才使用字符串格式。當(dāng)使用單個(gè)參數(shù)調(diào)用時(shí),它甚至不會(huì)查看該參數(shù)。

  1. let a = "{"
  2.  
  3. println!(a); // Error: First argument must be a format string literal 
  4.  
  5. panic!(a); // Ok: The panic macro doesn't care 

一旦隱式格式參數(shù)被確定,就會(huì)出現(xiàn)問(wèn)題了。此時(shí)「println!("hello {name}")」會(huì)變成「println!("hello {}", name)」的簡(jiǎn)寫形式。但是「panic!("hello {name}")」無(wú)法執(zhí)行,因?yàn)椤竝anic!()」不會(huì)將單個(gè)參數(shù)作為格式化字符串處理。

為了避免這種情況,Rust 2021提供了更具一致性的「panic!()」宏。新的「panic!()」宏將不再接受任意表達(dá)式作為唯一參數(shù)。而是像「println!()」一樣,始終將第一個(gè)參數(shù)作為格式化字符串處理。

由此「panic_any()」便成為了對(duì)格式化字符串以外的其他內(nèi)容進(jìn)行「panic」的唯一方法。

另外,Rust 2021中的「core::panic!()」和「std::panic!()」將會(huì)是等效的。目前,這兩者之間存在一些差異,尤其是在開啟或關(guān)閉「#![no_std]」時(shí) 。

7.保留的語(yǔ)法

為了將來(lái)為某些新語(yǔ)法騰出空間,我們決定為前綴的標(biāo)識(shí)符和文字保留語(yǔ)法:「prefix#identifier」,「prefix"string"」,「prefix'c'」和「prefix#123」,其中「prefix」可以是任何標(biāo)識(shí)符(除了那些已經(jīng)具有含義的,例如「b'…'」和「r"…"」)。

這是一個(gè)重大變化,因?yàn)楹陼?huì)接受「hello"world"」,并視其為兩個(gè)單獨(dú)的標(biāo)記:「hello」和「"world"」。解決方法很簡(jiǎn)單,只需插入一個(gè)空格:「hello "world"」

這些是可能會(huì)看到的一些新前綴:

「f""」是格式字符串的簡(jiǎn)寫形式。例如,「f"hello {name}"」是等效的「format_args!()」調(diào)用的簡(jiǎn)寫形式。

「c""」或「z""」用于空終止的C字符串。

「k#keyword」允許編寫當(dāng)前版本中尚不存在的關(guān)鍵字。例如,雖然「async」在2015版中不是關(guān)鍵字,但是該前綴將允許在2015版中以「k#async」作為替代。

8. 新的硬錯(cuò)誤

在Rust 2021中,現(xiàn)有的兩個(gè)lint會(huì)被視為硬錯(cuò)誤,在舊版本中,這些lint將仍然是警告。

「bare-trait-objects」:在Rust 2021中,必須使用「dyn」關(guān)鍵字標(biāo)識(shí)特征對(duì)象。

「ellipsis-inclusive-range-patterns」:Rust 2021不再接受過(guò)時(shí)的「...」語(yǔ)法,取而代之的是「.. =」,不過(guò)表達(dá)式的使用是一樣的。

9. 「micro_rules」中的or

從1.53.0開始,便加入了對(duì)「|」的支持,使其可以嵌套在任何地方。例如,現(xiàn)在可以寫「Some(1 | 2)」,而不需要使用「Some(1) | Some(2)」這種方式。

這個(gè)改動(dòng)會(huì)對(duì)「macro_rules」宏產(chǎn)生影響,于是在1.53.0中「:pat」并不與「|」相匹配。因?yàn)橹?,并非在所有嵌套?jí)別都可以包含「|」。

不過(guò),在Rust 2021中,「:pat」片段說(shuō)明符將匹配「A | B」。

由于有時(shí)仍然希望匹配不帶「|」的單個(gè)模式變量,因此添加了指定的片段「:pat_param」以保留舊的行為。 

 

責(zé)任編輯:張燕妮 來(lái)源: 新智元
相關(guān)推薦

2016-07-27 10:28:43

編程Python框架

2022-03-25 09:57:18

C++Rust語(yǔ)言

2015-04-14 14:23:38

蘋果Swift編程語(yǔ)言

2020-07-03 08:00:19

編程語(yǔ)言JavaPython

2013-11-29 10:04:00

JavaScript遠(yuǎn)程辦公

2015-06-17 14:06:50

編程語(yǔ)言計(jì)算機(jī)編程語(yǔ)言

2021-03-02 08:40:38

區(qū)塊鏈編程語(yǔ)言開發(fā)

2020-07-21 11:15:20

編程Rust開發(fā)

2023-09-17 23:01:39

Python編程語(yǔ)言

2021-03-07 09:01:05

編程語(yǔ)言開發(fā)

2020-10-18 12:01:52

編程語(yǔ)言JavaPython

2017-12-29 16:51:44

2021-04-13 10:14:12

編程語(yǔ)言PythonJava

2018-01-11 17:22:20

PHP大數(shù)據(jù)開發(fā)

2019-11-19 16:07:24

Java編程語(yǔ)言JavaScript

2020-02-25 17:49:39

編程語(yǔ)言框架

2018-09-06 12:30:40

編程語(yǔ)言PythonJava

2020-06-17 10:08:08

編程數(shù)據(jù)庫(kù)開發(fā)

2024-02-19 09:02:00

Rust庫(kù)編碼

2020-11-03 09:14:30

編程語(yǔ)言Go技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)