AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Rust 切片與 Go 有何區別?

來源: 責編: 時間:2024-01-10 09:35:49 232觀看
導讀大家好,我是漁夫。今天,讓我們一起深入學習 Rust 中的切片。在 Rust 編程語言中,除了常見的 String 類型,還有一種重要的字符串類型:str。這種類型通常被稱為字符串切片(slice)。字符串切片可以理解為對一個字符串的部分或全

大家好,我是漁夫。NAu28資訊網——每日最新資訊28at.com

今天,讓我們一起深入學習 Rust 中的切片。在 Rust 編程語言中,除了常見的 String 類型,還有一種重要的字符串類型:str。這種類型通常被稱為字符串切片(slice)。NAu28資訊網——每日最新資訊28at.com

NAu28資訊網——每日最新資訊28at.com

字符串切片可以理解為對一個字符串的部分或全部的引用。這意味著切片可以有任意長度,它的靈活性在某種程度上與 Golang 語言中的切片相似。NAu28資訊網——每日最新資訊28at.com

當我們談論切片的引用時,實際上我們是在引用一種特殊的指針,通常稱為“胖指針”。這個指針不僅包含了對數據的引用,還包含了切片的長度信息。NAu28資訊網——每日最新資訊28at.com

讓我們通過下面的代碼示例來具體分析這一概念,下面從 String 變量 s 創建了兩個切片 s1 和 s2:NAu28資訊網——每日最新資訊28at.com

fn main() {    let s = String::from("hello");    let s1: &str = &s[0..3];    let s2: &str = &s[3..s.len()];    // 打印出值    println!("s = {}", s);    println!("s1 = {}", s1);    println!("s2 = {}", s2);    // 長度和容量    println!("len = {}", s.len());    println!("capacity = {}", s.capacity());    // 地址    println!("Address of s: {:p}", &s);    println!("Address of s1: {:p}", s1.as_ptr());    println!("Address of s2: {:p}", s2.as_ptr());}

運行結果:NAu28資訊網——每日最新資訊28at.com

s = hellos1 = hels2 = lolen = 5capacity = 5Address of s: 0x7ffee307b650Address of s1: 0x7f8d3ad02ab0Address of s2: 0x7f8d3ad02ab3

從例子中,可以觀察到 s1 和 s2  其實都是s 字符串的切片,是 s 的部分引用,意思就是相當于借用了 s 的部分內存空間。觀察這些變量的長度、容量和內存地址揭示了它們之間的關系:盡管 s1 和 s2 有不同的內存地址,但它們是從同一原始字符串 s 中派生出來的。(畫好的圖,忘記插入了,哈哈)NAu28資訊網——每日最新資訊28at.com

再打印出 s1 和 s2 的長度:NAu28資訊網——每日最新資訊28at.com

println!("len = {}", s1.len()); // 3println!("len = {}", s2.len()); // 2

可以看到切片取值情況:NAu28資訊網——每日最新資訊28at.com

  • &s1:截取從索引 0 到 索引 3
  • &s2:從索引 3 開始到索引 5 結束

Go 切片 和 Rust 切片有什么不同

Go 和 Rust 使用“切片”這個詞描述不同的概念。在 Go 中,切片結構體既包含長度信息也包含容量信息,它既可以擴展也可以作為現有切片的引用,而無需擔心所有權和生命周期。Rust 則將這些功能分離:Vec<T> 是一個可增長的容器,擁有其數據的所有權;而 &[T] 是一個固定大小的切片,只是一個指向數據的借用。NAu28資訊網——每日最新資訊28at.com

這種區別反映了 Rust 的所有權原則,這在無GC語言語境下提供了內存安全保障。在 Rust 中,所有權、借用和生命周期的概念是核心特性,因此 Vec 和切片必須是兩種不同的類型。相反,Go 的類型系統不強制執行這些概念,因為它依賴于垃圾收集器來管理內存。雖然這在概念上似乎更簡單,但它也隱藏了潛在的內存管理復雜性。NAu28資訊網——每日最新資訊28at.com

Rust 之所以將 Go 中的單一切片類型分成 Vec 和切片兩種,是為了提供更明確的內存管理語義,減少引用計數導致的性能開銷。這些設計決策與 Rust 的目標一致,即提供零成本抽象和更細粒度的內存控制。NAu28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-59673-0.htmlRust 切片與 Go 有何區別?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 全球汽車配置器開發商生態圈采用 NVIDIA Omniverse

下一篇: 基礎不牢地動山搖——shell中的變量和參數如何定義和使用?有什么注意點

標簽:
  • 熱門焦點
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就&ldquo;胡錫進炒股是否知道認真報道&rdquo;展開討論。有
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top