Rust 架構網站 03 所有權

閱讀時間約 3 分鐘
承接上一段,接下來到了一段Rust比較新奇的部分也是控制記憶體的部分AKA所有權。
所有權是在Rust處理記憶體的機制,記憶體由所有權系統管理,且編譯器會在編譯時加上一些規則檢查。
在這之前需要知道的部分
  1. 每個變數有一個所有者(owner)
  2. 同時間只能有一個所有者
  3. 只要擁有者離開作用域就會被釋放
看起來不是很像中文吧,我來直接用code展示一波
{ 
       // s 在此處無效,因為它還沒宣告
let s = "hello"; // s 在此開始視為有效

// 使用 s
let c = s;
     // 所有權轉移 c有效 , s無效

println!(s);
    //將會報錯 因為所有權已經在c了
} // 此作用域結束, c 不再有效
這段code,感覺有學過其他程式語言的人會非常不習慣,我自己覺得這種記憶體回收機制有種化繁為簡的感覺,背後的邏輯跟用意可以點進文檔認真鑽研一下,透過這種機制可以省掉許多無意義地引用和追蹤。
這篇文檔中的東西有點多,重看一次也發現忘了一半了,顆顆。

關於函式的所有權

fn main() {
let s = String::from("hello"); // s 進入作用域

takes_ownership(s); // s 的值進入函式
// 所以 s 也在此無效

let x = 5; // x 進入作用域

makes_copy(x); // x 本該移動進函式裡
// 但 i32 有 Copy,所以 x 可繼續使用

} // x 在此離開作用域,接著是 s。但因為 s 的值已經被移動了
// 它不會有任何動作

fn takes_ownership(some_string: String) { // some_string 進入作用域
println!("{}", some_string);
} // some_string 在此離開作用域並呼叫 `drop`
// 佔用的記憶體被釋放

fn makes_copy(some_integer: i32) { // some_integer 進入作用域
println!("{}", some_integer);
} // some_integer 在此離開作用域,沒有任何動作發生
簡單翻譯
  1. 當變數被拿來當函式的參數時,就是一個所有權的轉移
  2. 轉移後的作用域,就在函式裡面。
而這段code中的i32擁有一個trit(特徵)叫做copy, 故可以被複製,這部分文檔是寫之後會介紹,所以我就之後再來看看吧。

    2會員
    8內容數
    目前主要是是學習Rust,Rust是一種程式語言,用途頗廣泛,在很多大公司的軟體內部都可見Rust的身影,這個專題,主要紀錄我學習Rust的遇見的事,跟一些小作品。如果對軟體設計相關沒興趣的,基本上不用點開了。
    留言0
    查看全部
    發表第一個留言支持創作者!
    rex chen的沙龍 的其他內容
    最開始學習一個語言肯定是從基礎語法開始,Rust還算滿幸運的有基礎語法的翻譯,這翻譯是在官方網站下推薦的,初步看起來沒什麼問題,在開發環境中我選擇visual studio code,基本的安裝,如果有問題的話,我相信網路上都找得到答案 第二章節就即開始基礎的Rust用法,非常有C語言的感覺,就是讓
    第一篇文章就先說說我的背景,並做一些開始接著寫文章前的介紹。
    最開始學習一個語言肯定是從基礎語法開始,Rust還算滿幸運的有基礎語法的翻譯,這翻譯是在官方網站下推薦的,初步看起來沒什麼問題,在開發環境中我選擇visual studio code,基本的安裝,如果有問題的話,我相信網路上都找得到答案 第二章節就即開始基礎的Rust用法,非常有C語言的感覺,就是讓
    第一篇文章就先說說我的背景,並做一些開始接著寫文章前的介紹。
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    上班空閒無聊?試試這款新推出的放置農夫遊戲Rusty's Reitrement!透過建立全自動化的農場,無需獨立視窗,完全不影響上班裝忙,適合薪水小偷的上班族。
    Thumbnail
    放置型農場經營遊戲《魯斯蒂的退休生活 Rusty's Retirement》遊戲介紹及心得。
    Thumbnail
    本文介紹了作者使用 Rust 重寫的一個專案,目的是為了在樹梅派上取得 LAN IP,並透過 Telegram 機器人發送訊息。作者首先提到在樹梅派上使用 Python 版本時遇到的問題,之後才開始討論為什麼選擇了 Rust 重寫的理由。
    Thumbnail
    非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
    Thumbnail
    先須知識: 了解什麼是變數 作用域scope 在Rust中,變數預設是不可變的 let name = "Zoe"; // 預設變數不可變 也就同於Javascript中的const,若想讓變數可變則需要在let後面加上mut關鍵字: let mut name = "Vicky"; nam
    在開發 Rust 或是使用 Rust 編寫的 CLI 工具時,常會看見類似下方的錯誤訊息: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 簡單寫一下該怎麼做。
    Thumbnail
    對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    上班空閒無聊?試試這款新推出的放置農夫遊戲Rusty's Reitrement!透過建立全自動化的農場,無需獨立視窗,完全不影響上班裝忙,適合薪水小偷的上班族。
    Thumbnail
    放置型農場經營遊戲《魯斯蒂的退休生活 Rusty's Retirement》遊戲介紹及心得。
    Thumbnail
    本文介紹了作者使用 Rust 重寫的一個專案,目的是為了在樹梅派上取得 LAN IP,並透過 Telegram 機器人發送訊息。作者首先提到在樹梅派上使用 Python 版本時遇到的問題,之後才開始討論為什麼選擇了 Rust 重寫的理由。
    Thumbnail
    非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
    Thumbnail
    先須知識: 了解什麼是變數 作用域scope 在Rust中,變數預設是不可變的 let name = "Zoe"; // 預設變數不可變 也就同於Javascript中的const,若想讓變數可變則需要在let後面加上mut關鍵字: let mut name = "Vicky"; nam
    在開發 Rust 或是使用 Rust 編寫的 CLI 工具時,常會看見類似下方的錯誤訊息: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 簡單寫一下該怎麼做。
    Thumbnail
    對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予