亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Rust語言和C/C++區(qū)別對(duì)比,Rust和C語言哪個(gè)好

 更新時(shí)間:2025年02月02日 10:13:39   作者:Rust語言中文社區(qū)  
Rust具有與C語言相當(dāng)?shù)乃俣群蛢?nèi)存效率,但無需手動(dòng)內(nèi)存管理或垃圾回收,它擁有出色的工具支持、友好的編譯器和不斷發(fā)展的開發(fā)者社區(qū),使用Rust能提升程序性能,最重要的是,對(duì)Python開發(fā)者而言,Rust比C語言更容易學(xué)習(xí)

初接觸到Rust這門語言,主要是看中了它的性能和語法。發(fā)現(xiàn)Rust速度甚至在某些地方超過了C/C++,我就對(duì)這門語言比較感興趣。

Rust具有與C語言相當(dāng)?shù)乃俣群蛢?nèi)存效率,但無需手動(dòng)內(nèi)存管理或垃圾回收,它擁有出色的工具支持、友好的編譯器和不斷發(fā)展的開發(fā)者社區(qū),使用Rust能提升程序性能,最重要的是,對(duì)Python開發(fā)者而言,Rust比C語言更容易學(xué)習(xí)。

接下來說說我對(duì)這門語言優(yōu)點(diǎn)的看法:

一、多范式

Rust是一門多范式的語言,能夠很好地支持函數(shù)式和面向?qū)ο?。其?dú)特的函數(shù)聲明方式

??fn 函數(shù)名(參數(shù)列表) -> 返回類型??

這種簡(jiǎn)捷的聲明方式就能夠讓人一眼看出這是一個(gè)函數(shù)。

在面向?qū)ο蠓矫妫琑ust加入了很多新鮮的概念和思路。比如Trait和Enum類型,其中最吸引我的是Rust中的Enum類型。不管是處理空指針的Opition(Some/None)還是處理錯(cuò)誤的Result(Ok/Err),這種處理方式都非常的人性化,非常地好讀。而且這種Enum類型對(duì)泛型的支持非常好,也真正地能夠解決經(jīng)常出現(xiàn)的內(nèi)存安全問題:如解引用空指針等。

在面向?qū)ο蠓矫孢€必須要提的是基于Trait的Impl體系,這個(gè)體系完全取消了構(gòu)造函數(shù),轉(zhuǎn)而使用戶自定義。在這種情況下,一些之前傳統(tǒng)的構(gòu)造函數(shù)難以表達(dá)的意思,就很好地在函數(shù)名中體現(xiàn)出來。比如一個(gè)TimeDuration類,應(yīng)該會(huì)有許許多多的構(gòu)造函數(shù),例如from_ms,from_us等,但僅用一個(gè)構(gòu)造函數(shù)不僅難以實(shí)現(xiàn),更難以讓用戶感知構(gòu)造函數(shù)到底在做什么。

Trait系統(tǒng)我認(rèn)為是一個(gè)類似于標(biāo)簽的東西。這個(gè)類有了某種標(biāo)簽,它就必須定義這種標(biāo)簽的行為。比如Add Trait,非常常用。就相當(dāng)于告訴編譯器,這個(gè)東西可以去使用+號(hào)。在我們寫泛型的函數(shù)或者其他類的時(shí)候,就可以很輕松地使用這個(gè)Trait去限定參數(shù)的類型,如果沒有Impl Add Trait,編譯器就不允許將其作為參數(shù)。這樣就可以將錯(cuò)誤暴露在編譯器的檢查之下。

二、錯(cuò)誤處理

錯(cuò)誤處理我認(rèn)為也是非常好的一個(gè)環(huán)節(jié)。在沒有定義錯(cuò)誤處理的行為時(shí),一個(gè)函數(shù)會(huì)拋出panic。這個(gè)panic就相當(dāng)于是沒有被捕獲的錯(cuò)誤。一般語言中會(huì)用??try/catch??這種表達(dá)式來捕獲錯(cuò)誤,但其實(shí)可讀性不僅很差,而且完全沒法對(duì)錯(cuò)誤發(fā)生的地方進(jìn)行預(yù)知。

在Rust中,所有可能出現(xiàn)的函數(shù)都會(huì)被打上Result返回值的標(biāo)簽。這個(gè)Result也是一個(gè)枚舉泛型類型,但其功能實(shí)在是太多了,既能作為正確的返回值,也能承載錯(cuò)誤信息向上傳遞。這個(gè)設(shè)計(jì)使得整個(gè)Rust中的錯(cuò)誤查找和處理變得非常舒適。在Rust中,只要一個(gè)函數(shù)的返回值是Result,就可以在其中使用??????操作符。?????操作符的作用主要是將Result<T,E>解包成T(也就是默認(rèn)為正確值),在錯(cuò)誤傳遞鏈中具有幾乎不可替代的作用。他不僅不會(huì)影響整體代碼的可讀性,更是將可能發(fā)生錯(cuò)誤的位點(diǎn)清晰地標(biāo)注在代碼之中。

三、強(qiáng)大且規(guī)范的標(biāo)準(zhǔn)庫

C++總是被人詬病的就是其巨大的標(biāo)準(zhǔn)庫。而Rust作為一門新語言,沒有C++承載的那么多歷史使命,自然也就能夠保證其標(biāo)準(zhǔn)庫的設(shè)計(jì)風(fēng)格始終一致。

Rust的標(biāo)準(zhǔn)庫幾乎全部按照面向?qū)ο蟮娘L(fēng)格進(jìn)行設(shè)計(jì)。其中使用較多的主要有Vec/Deque/(Hash/BTree)(Set/Map)等等。這些的聲明非常規(guī)范。且都符合同一套API,也就是可以通過同一套成員函數(shù)進(jìn)行操作。就算是對(duì)于內(nèi)置類型,也就是primitive types,標(biāo)準(zhǔn)庫都有非常多數(shù)學(xué)和二進(jìn)制函數(shù)的支持,比如count_ones()就可以計(jì)算一個(gè)數(shù)二進(jìn)制位中所有的1的個(gè)數(shù),a.max(b)就可以取兩個(gè)數(shù)中的最大值。這種全部面向?qū)ο蟮牟僮饕矠殒準(zhǔn)秸{(diào)用提供了空間。

如果想在C/C++中求三個(gè)數(shù)字的最大值,一般都會(huì)如下寫

res = max(max(a, b), c);

但在Rust中,一般如下寫

res = a
.max(b)
.max(c);

這樣在長(zhǎng)的時(shí)候就非常易讀。采用這種設(shè)計(jì)的還有Iterator Trait,也就是基本上所有容器都聲明了該Trait。配合Lambda表達(dá)式和map函數(shù)能夠很好地處理鏈?zhǔn)讲僮鳌?/p>

四、宏

作為一個(gè)偏底層的語言,宏是必不可少的一項(xiàng)。但例如C/C++這種基于簡(jiǎn)單字符串替換的宏就帶來了很多不安全不穩(wěn)定的因素。Rust推出了過程宏作為解決方案,使得宏可以按照值和表達(dá)式來進(jìn)行捕獲,大大提高了宏的能力。在Rust中,宏一般具有特殊的使用標(biāo)記——感嘆號(hào),可以讓調(diào)用者明確該出調(diào)用的是一個(gè)宏而不是一個(gè)普通的函數(shù)。

過程宏分為屬性宏派生宏和函數(shù)式宏。函數(shù)式宏表現(xiàn)得像普通的函數(shù),并且可以具有可變參數(shù),派生宏和屬性宏則可以作用在過程和類之前,表現(xiàn)得像python里的裝飾器。

// 函數(shù)式宏的用法
let v = vec![1, 2, 3];
println!("{}", 3);
dbg!(v);

五、現(xiàn)代的包管理體系cargo

cargo基本上是Rust工具鏈中不是必要但不可替代的一員。雖然其只是rustc的一層封裝,但是在包管理上,Rust基本上是我目前使用過所有語言的第一梯隊(duì)。C/C++幾乎沒有包管理可言,大家的工具都不成熟,裝庫更是只能靠手動(dòng)make,非常原始。Rust作為新生代語言當(dāng)然接入了網(wǎng)絡(luò)庫,只需要在Cargo.toml里寫配置就可以自動(dòng)下載自動(dòng)編譯,非常地高效和便捷。還有rustup作為工具鏈管理,可以非常方便地跨平臺(tái)編譯。

六、總結(jié)

到此這篇關(guān)于Rust語言和C/C++區(qū)別對(duì)比,Rust和C語言哪個(gè)好的文章就介紹到這了,更多相關(guān)Rust語言和C/C++區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust讀取配置文件的實(shí)現(xiàn)步驟

    Rust讀取配置文件的實(shí)現(xiàn)步驟

    任何項(xiàng)目都離不開對(duì)于配置文件的讀取和解析,rust項(xiàng)目也一樣,本文主要介紹了Rust讀取配置文件的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Rust之智能指針的用法

    Rust之智能指針的用法

    在Rust中,智能指針是管理內(nèi)存所有權(quán)和生命周期的核心工具,本文主要介紹了Rust之智能指針的用法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 深入理解 Rust 中的模式匹配語法(最新推薦)

    深入理解 Rust 中的模式匹配語法(最新推薦)

    Rust中的模式匹配提供了多種方式來處理不同的數(shù)據(jù)類型和場(chǎng)景,本文給大家介紹Rust 中的模式匹配語法,感興趣的朋友一起看看吧
    2025-03-03
  • Rust之Substrate框架中Core詳解

    Rust之Substrate框架中Core詳解

    Substrate是一個(gè)用于構(gòu)建區(qū)塊鏈的開發(fā)框架,它由Parity團(tuán)隊(duì)基于Rust語言開發(fā)而成,是一個(gè)開箱即用的區(qū)塊鏈構(gòu)造器,本文詳細(xì)介紹了Substrate框架中的Core,需要的朋友可以參考下
    2023-05-05
  • rust智能指針的具體使用

    rust智能指針的具體使用

    智能指針是一些數(shù)據(jù)結(jié)構(gòu),它們的行為類似于指針但擁有額外的元數(shù)據(jù)和附加功能,本文就來介紹一下rust智能指針的具體使用,感興趣的可以了解一下
    2023-12-12
  • Rust 配置文件內(nèi)容及使用全面講解

    Rust 配置文件內(nèi)容及使用全面講解

    這篇文章主要為大家介紹了Rust 配置文件內(nèi)容及使用全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Rust并發(fā)編程之使用消息傳遞進(jìn)行線程間數(shù)據(jù)共享方式

    Rust并發(fā)編程之使用消息傳遞進(jìn)行線程間數(shù)據(jù)共享方式

    文章介紹了Rust中的通道(channel)概念,包括通道的基本概念、創(chuàng)建并使用通道、通道與所有權(quán)、發(fā)送多個(gè)消息以及多發(fā)送端,通道提供了一種線程間安全的通信機(jī)制,通過所有權(quán)規(guī)則確保數(shù)據(jù)安全,并且支持多生產(chǎn)者單消費(fèi)者架構(gòu)
    2025-02-02
  • Rust實(shí)現(xiàn)冒泡排序算法示例詳解

    Rust實(shí)現(xiàn)冒泡排序算法示例詳解

    這篇文章主要為大家介紹了Rust實(shí)現(xiàn)冒泡排序算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Rust 枚舉和模式匹配的實(shí)現(xiàn)

    Rust 枚舉和模式匹配的實(shí)現(xiàn)

    枚舉是 Rust 中非常重要的復(fù)合類型,也是最強(qiáng)大的復(fù)合類型之一,廣泛用于屬性配置、錯(cuò)誤處理、分支流程、類型聚合等場(chǎng)景中,本文就來介紹一下Rust 枚舉和模式匹配,感興趣的可以了解一下
    2023-12-12
  • Rust字符串字面值的一些經(jīng)驗(yàn)總結(jié)

    Rust字符串字面值的一些經(jīng)驗(yàn)總結(jié)

    字符串有兩種表現(xiàn)形式,一種是基本類型,表示字符串的切片,以&str表示,另一種是可變的string類型,下面這篇文章主要給大家介紹了關(guān)于Rust字符串字面值的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論