91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

Rust 為什么比C安全,請看數(shù)據(jù)類型對比

在基本數(shù)據(jù)類型方面,Rust的定義更加簡單命令,各類型所占空間大小都一目了然,除isize/usize依賴于處理器平臺位數(shù)外,其他類型的大小都是確定的

對于C來說,int是核心的數(shù)據(jù)類型,但不同平臺的處理器位數(shù)大小也不一樣,則int的大小也不一樣,如8位機(jī)和32位機(jī)的int類型大小則不一樣。因此C語言中的大部分?jǐn)?shù)據(jù)類型都是不可確定的,需要依賴一些額外的頭文件去確定數(shù)據(jù)類型大小。

bool類型上,Rust自帶bool類型,C則沒有,通常需要在頭文件或自己定義bool類型,因此在不同的代碼中可能bool的truefalse可能不一樣。另外字符類型中,Rust的字符則是Unicode 的大小, 占用四個字節(jié),C則占用一個字節(jié),但是不同編譯器規(guī)定的char類型可能是帶符號或不帶符號的類型,因此范圍也不可直接確定。

Rust 基本數(shù)據(jù)類型

C基礎(chǔ)數(shù)據(jù)類型

自定義類型

結(jié)構(gòu)體

RustC的結(jié)構(gòu)體定義大致相同,但Rust更加精確。有以下區(qū)別

  1. 支持?jǐn)?shù)據(jù)類型的權(quán)限訪問定義,默認(rèn)為私有類型
  2. 成員順序可能改變,可節(jié)省空間,但也可強(qiáng)制保持與定義相同,并保留字節(jié)對齊
  3. 支持模板
  4. 支持零大小定義
  5. 支持定制實(shí)現(xiàn)方法
  6. 支持宏擴(kuò)展
#[derive(PartialEq)]     // 使用宏自動實(shí)現(xiàn)比較的方法
pub struct Language{         
    pub name: String,    // public 屬性
    id: u32              // 私有屬性  
}

// 零大小結(jié)構(gòu)體
struct C;         

// 模板結(jié)構(gòu)體
pub struct AnyAdc<'d, T: Instance, M: Mode> {
    t: PhantomData<&'d T>,
    _m: PhantomData,
}

枚舉

Rust的枚舉與C最大的不同是,Rust更加規(guī)范,枚舉可為數(shù)字,也可為匿名標(biāo)記,C則可強(qiáng)制轉(zhuǎn)換成整數(shù)類型。枚舉在Rust中有著非常重要的角色,如Result,Option枚舉讓Rust代碼處理邏輯更加安全.。

  1. 枚舉可包裹其他數(shù)據(jù)
  2. 支持模板
  3. 支持轉(zhuǎn)換成數(shù)字
  4. 支持零大小
  5. 支持訪問權(quán)限控制
  6. 支持宏自動實(shí)現(xiàn)方法
pub enum Rule {       // 標(biāo)記類型,不能轉(zhuǎn)換成數(shù)字       
    Master,    
    Slave,    
}
#[derive(PartialEq)]   // 使用宏實(shí)現(xiàn)比較的方法         
pub(crate) enum Id {   // 只在crate中訪問,外部不可訪問    
    Rtc1 = 0,          // 可轉(zhuǎn)換成數(shù)字       
}
enum Config;           // 零大小枚舉       
enum Mode {        // 模板類      
    Mode1(T)    
    Mode2    
}

聯(lián)合體

Rust并不提倡大量使用聯(lián)合體,但為了兼容C的數(shù)據(jù)類型,也實(shí)現(xiàn)了聯(lián)合體的功能,在訪問時強(qiáng)制標(biāo)記unsafe域。在內(nèi)部成員的引用方式則與C幾乎一致。

#[repr(C)]    
union MyUnion {    
    f1: u32,    
    f2: f32,    
}

總結(jié)

通過以上對比,可感受到Rust在數(shù)據(jù)類型方面的設(shè)計更加嚴(yán)謹(jǐn)和安全,同時也更加靈活,且移植性更強(qiáng)。同時也最大限度得兼容了C數(shù)據(jù)類型的所有特性。另外Rust的各種數(shù)據(jù)類型,其實(shí)也是對象,可使用一些Rust提供的方法來實(shí)現(xiàn)操作,讓開發(fā)者使用起來如Python一樣簡單,同時運(yùn)行效率與C/C++幾乎一致。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 2
關(guān)注 14
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 湖北省| 阜宁县| 怀集县| 寻甸| 安阳县| 龙门县| 旬阳县| 维西| 襄汾县| 庆阳市| 山东省| 长汀县| 修水县| 清丰县| 台东市| 新源县| 麦盖提县| 沅陵县| 奉节县| 荥阳市| 辽源市| 南投县| 辽宁省| 山西省| 重庆市| 宜丰县| 新蔡县| 内乡县| 缙云县| 龙川县| 嘉鱼县| 邻水| 绥江县| 遵义县| 灵山县| 荆州市| 商洛市| 兴仁县| 阿坝县| 鄂州市| 龙泉市|