精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

NLL導致的非直覺的作用域擴大

jf_wN0SrCdH ? 來源:Rust語言中文社區 ? 作者:Rust語言中文社區 ? 2022-11-24 11:29 ? 次閱讀

NLL 導致的非直覺的作用域擴大

1. NLL 完全無視詞法作用域

1.1. 是否可以認為 NLL 在fb.set(&b);處縮短了fb的起始生存期以配合b?
1.2. 應該認為 NLL 縮短了fb還是延長了b的生存期?


	

struct MyCell(T); impl MyCell { pub fn set(&mut self, t: T) { self.0 = t; } } let a = 3; let mut fb = MyCell(&a); // 將 fb 綁定到 a 的生存期 let _ = { let b = 4; fb.set(&b); false // 直覺上 b 在此結束生存期 }; // 直覺上 fb 在此結束生存期 // NLL 智能的使 b 和 fb 的生存期同時結束, 使得 fb 可以使用 b

2. 強制延長外部變量生存期得到符合直覺的編譯失敗


	

struct MyCell(T); impl MyCell { pub fn set(&mut self, t: T) { self.0 = t; } } let a = 3; let mut fb = MyCell(&a); // 將 fb 綁定到 a 的生存期 let _ = { let b = 4; fb.set(&b); false // b 在此結束生存期 }; fb; // 強制延長 fb 生存期

3.Drop導致隱式生存期延長而編譯失敗

主代碼與 1 完全相同, 與 1 相比僅多一個空Drop, 而編譯失敗原因同 2


	

struct MyCell(T); impl MyCell { pub fn set(&mut self, t: T) { self.0 = t; } } impl Drop for MyCell { fn drop(&mut self) {} } let a = 3; let mut fb = MyCell(&a); // 將 fb 綁定到 a 的生存期 let _ = { let b = 4; fb.set(&b); false // b 在此結束生存期 }; // drop 導致的隱式延長 fb 生存期

4. 編譯失敗 循環使得fb生存期不能縮短

有可能rust升級使其可通過編譯


	

struct MyCell(T); impl MyCell { pub fn set(&mut self, t: T) { self.0 = t; } } let a = 3; let mut fb = MyCell(&a); // 將 fb 綁定到 a 的生存期 let _ = loop { // loop 使得 fb 必須在此有效 而不能使 b 滿足此要求 let b = 4; fb.set(&b); if true { break false } // b 在此結束生存期 }; // fb 在此結束生存期

5. 編譯成功 基本等同于 4

NLL 過于智能的消除了loop


	

struct MyCell(T); impl MyCell { pub fn set(&mut self, t: T) { self.0 = t; } } let a = 3; let mut fb = MyCell(&a); // 將 fb 綁定到 a 的生存期 let _ = loop { let b = 4; fb.set(&b); break false; // 過于智能的消除了 loop };


審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4747

    瀏覽量

    68349
  • 編譯
    +關注

    關注

    0

    文章

    654

    瀏覽量

    32806

原文標題:NLL 導致的非直覺的作用域擴大

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詞法作用和閉包

    #hello,JS:14閉包(詞法作用
    發表于 05-20 15:35

    作用作用鏈知識

    #hello,JS:04作用作用
    發表于 09-10 10:21

    介紹一些與變量相關的存儲屬性與作用

    目錄前言一、存儲類&作用&生命周期&鏈接屬性的概念解析二、linux下C程序 的內存映像三、存儲類相關的關鍵字四、作用詳解五、變量的生命周期七、鏈接屬性前言本篇文章將會
    發表于 02-14 07:00

    python變量的作用

    python變量的作用1. 作用Python的作用可以分為四種:L (Local) 局部
    發表于 03-03 16:50

    MCU中局部變量的作用是什么?

    MCU中局部變量的作用是什么
    發表于 10-09 08:51

    c語言變量的作用和存儲類別

    c語言變量的作用和存儲類別簡述,很不錯哦。
    發表于 07-14 17:12 ?0次下載

    關于Java變量的作用分析

    目錄 1.靜態作用與動態作用 2.變量的作用 3.Java 中變量的
    發表于 09-25 16:28 ?0次下載

    Java中bean的作用

    java開發者都會在實體對象的屬性中加上private關鍵字,而在業務類對外發放的方法中寫上public關鍵字,這并不是習慣,而是開發者深諳其道,這就是java對象中filed的作用。 舉個
    發表于 09-25 16:36 ?0次下載
    Java中bean的<b class='flag-5'>作用</b><b class='flag-5'>域</b>

    基于修正的直覺模糊集成算子

    已有的一些直覺模糊集成算子在處理一些特殊直覺模糊數時會出現反直覺現象。首先介紹了兩個直覺模糊集成算子和直覺模糊數的比較方法。接著,舉例說明了
    發表于 11-17 14:36 ?9次下載

    直覺multiplicative集

    針對軟直覺模糊集在決策中出現的部分反直覺的現象,結合直覺multiplicative集,首先提出了一種新的軟集模型軟直覺multiplicative集,推廣了軟集和
    發表于 11-25 10:35 ?0次下載

    C++封裝:類的作用和實例化

    C++封裝:類的作用和實例化
    的頭像 發表于 06-29 14:28 ?3541次閱讀
    C++封裝:類的<b class='flag-5'>作用</b><b class='flag-5'>域</b>和實例化

    程度粗糙直覺模糊集模型研究分析綜述

    針對經典粗糙直覺模糊集理論僅考慮了集合中的最小最大隸屬度與隸屬度,而忽略了介于二者之間的隸屬度與隸屬度的問題,從程度粗糙集的角度對其進行了分析研究。首先,將程度粗糙集引入到經典粗糙直覺
    發表于 06-09 15:54 ?15次下載

    python變量的作用

    python變量的作用 1. 作用 Python的作用可以分為四種: L (Local)
    的頭像 發表于 03-03 16:50 ?1546次閱讀

    解讀Spring 的內置作用及開發應用

    本文詳細解析了 Spring 的內置作用,包括 Singleton、Prototype、Request、Session、Application 和 WebSocket 作用,并通過
    發表于 07-01 11:51 ?294次閱讀
    解讀Spring 的內置<b class='flag-5'>作用</b><b class='flag-5'>域</b>及開發應用

    CAN數據幀的各個及其作用

    CAN數據幀由多個組成,包括幀起始、仲裁、控制、數據和幀結束。每個都有其特定的作用
    的頭像 發表于 07-24 15:10 ?907次閱讀