99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

千萬別學Rust!

0
分享至

  張大胖被別人安利了一個新的語言:Rust,說是將來會替代C語言,就連Linux都要使用Rust了。

  

  作為編程語言的狂熱愛好者,他自然要嘗試一番。

  第一個程序自然是hello world,太簡單了,都懶得去寫,看看就行了:

  fnmain(){ println!("helloworld"); }

  張大胖原來用過C語言, 當時覺得非常不爽的是它本身沒有內置常用的數(shù)據(jù)結構,比如一個可以動態(tài)增長的數(shù)組,這Rust怎么樣呢?

  fnmain(){ letv=Vec::new();//創(chuàng)建了一個數(shù)組 v.push(4);//向數(shù)組添加一個元素 }

  張大胖寫下let就意識到,這里是將值(數(shù)組)綁定到變量v , 應該是借鑒了Lisp的模式匹配,可以預見將來會遇到這樣的代碼:

  let(name,age)=("Andy",30);

  還有就是這Rust具備自動類型推斷能力,這點挺不錯的。

  編譯吧!咦,居然失敗了,錯誤信息是:cannot borrow `v` as mutable, as it is not declared as mutable

  Rust編譯器:我們把對象分為可變的和不可變的,對于不可變的,一旦創(chuàng)建以后,就不能再改了。那就加個關鍵字mut,讓它變成可變的就可以了:let mut v = Vec::new()

  張大胖想起了《effective java》中的一條實踐:把可變性限制到最小。他嘴里咕噥著:“嗯,Rust默認是不可變,這個思路也許是對的。”

  所有權

  他又探索著寫下一些代碼:

  fnmain(){ //用另外一種方式創(chuàng)建了一個可變Vector letmutv=vec![1,2]; letv1=v; println!("the1stelementis{}",v[0]); }

  編譯,又失敗了,WTF!到底是怎么回事?這么簡單的程序也會出錯?!

  Rust編譯器:誰讓你手賤!加了一行代碼:let v1 = v

  張大胖:這有什么關系?在Java中,這就相當于對同一個對象,又添加了一個引用而已

  Rust編譯器:那是Java,在我Rust這里,你一定要放下Java的執(zhí)念!要理解一下所有權的問題。

  張大胖:什么所有權?

  Rust編譯器:對于任何給定的對象都只有一個綁定與之對應。你用let mut v = Vec::new()就意味著 v 和這個Vector對象綁定了!現(xiàn)在v擁有這個對象的所有權。這一行代碼 let v1 = v ,讓所有權發(fā)生轉移了, 現(xiàn)在v1是新主人了。v就不能再訪問這個Vector, 我把這種情況叫做“轉移語義”。

  

  碼農翻身注:實際上, Rust也支持Copy語義,這里不在詳述。

  張大胖不滿地說:這不是徒增煩惱嗎?那我要是把v傳遞給另外一個函數(shù)呢?

  fnmain(){ letmutv=vec![1,2,3,4];//創(chuàng)建了一個可變Vector print_vector(v); println!("the1stelementis{}",v[0]); } fnprint_vector(v:Vec ){ foriinv{ println!("{}",i); } }

  編譯還是出錯!

  Rust編譯器:這和剛才是一個道理,v的所有權在傳遞給函數(shù)時,被拿走了,所以在main中不能再訪問v了 !

  借用

  張大胖:太變態(tài)了,我就是想在調用print_vector以后想訪問再訪問變量v,該怎么辦?

  Rust編譯器:你可以把所有權暫時借用(&v)給print_vector,等函數(shù)返回就可以接著使用了

  fnmain(){ letmutv=vec![1,2,3,4];//創(chuàng)建一個可變Vector print_vector(&v); println!("the1stelementis{}",v[0]); } fnprint_vector(v:&Vec ){ ...... }

  這個借用就相當于Java語言的引用了,張大胖想,print_vector函數(shù)已經“借到”所有權,應該可以為所欲為了吧,于是在函數(shù)內做了修改:

  fnprint_vector(v:&Vec ) { v.push(3); ..... }

  再次編譯,再次失敗!張大胖感覺到要吐血了,這Rust實在太不講道理了。

  Rust編譯器:“你這個借用想要改變原來的對象,也得加上 &mut才行!”

  fnmain(){ letmutv=vec![1,2,3,4];//創(chuàng)建了一個Vector print_vector(&mutv); println!("the1stelementis{}",v[0]); } fnprint_vector(v:&mutVec ){ v.push(3); ...... }

  總結一下:

  

  張大胖繼續(xù)寫代碼,想繼續(xù)測試這個所謂“借用”:

  fnmain(){ letmutx=String::from("hello"); letx1=&x; letx2=&mutx; println!("{}",x1); }

  編譯還是出錯:‘x’已經有一個不可變借用了,不能再以可變的方式來借用!

  張大胖徹底懵逼了!

  想我叱咤編程界多年,先后學會了C,C++, Java, Ruby ,Python, 從來就沒見過這么復雜的語言,這么簡單的程序,編譯都通不過。

  Rust編譯器:道理很簡單,x1是不可變引用,x2是可變引用,使用x1的"用戶"可不希望訪問x1時,數(shù)據(jù)已經改變了。我告訴你一個簡單的口訣,以后再遇到問題就迎刃而解了:共享不可變, 可變不共享。

  (用嚴格的描述來說是這樣:同一時刻,要么只有一個可變(&mut)借用,要么有多個不可變(&) 借用,不能同時存在可變和不可變借用。

  

  (都對一個對象做讀操作,安全!)

  

  (只有小張可以寫,因為他是可變的借用)

  張大胖琢磨了一下,這口訣用人話來說是這樣的:當大家都在讀一個東西的時候,是不能寫的。當一個人在寫的時候,別人是不能讀的, 這不就是經典的讀寫鎖問題嗎?這Rust居然在編譯器級別做了這種限制 !

  Rust編譯器:我之所以由這么嚴格的限制,就是為了內存安全,我的這套體系是不需要GC的,只要你能按照我的規(guī)矩來,內存安全就能保證。

  張大胖:你啊,是為了懶省事,把本來可以讓虛擬機干自動做的事情,都交給程序員來做了,這是要把我們累死啊!

  Rust編譯器:你到底做過系統(tǒng)級編程沒有?系統(tǒng)級編程要求:

  1. 非常快

  2. Runtime 很小(虛擬機就是一個巨大無比的Runtime)

  3. 能直接訪問內存,并且內存安全。

  C和C++基本滿足,但是內存不安全, 像Java, Python,Ruby 除了內存安全之外,別的都不滿足,只適合應用層編程。

  張大胖無語了,這家伙的目標是要替換C/C++,自己也寫過不少C代碼,由于內存問題,不知道搞垮過多少個程序,懸空的指針就像幽靈一樣到處飄蕩,無蹤可循,然后在一個未知的地點,未知的時刻突然爆裂。

  這個Rust,每個對象都有唯一的“主人”,然后有對讀寫施加了這么嚴格的限制,如果程序員掌握了,確實比C語言安全, 我還是接著學吧!

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
杜聿明被俘后被”陳主任”審訊,他下意識問:你是陳毅將軍嗎?

杜聿明被俘后被”陳主任”審訊,他下意識問:你是陳毅將軍嗎?

知否否知
2024-11-01 11:05:46
1908年,慈禧臨死前,太監(jiān)看她快不行了,趕緊給她喝了一碗海龜湯

1908年,慈禧臨死前,太監(jiān)看她快不行了,趕緊給她喝了一碗海龜湯

南權先生
2025-07-19 14:28:17
白天村支書,晚上世界波!村支書打入“蘇超”第100粒進球

白天村支書,晚上世界波!村支書打入“蘇超”第100粒進球

大象新聞
2025-07-21 17:53:24
宗馥莉隱秘婚史曝光:前夫是省長助理,上將之子

宗馥莉隱秘婚史曝光:前夫是省長助理,上將之子

坦然風云
2025-07-20 22:48:17
《恐龍快打》被誤解三十年的道具,AI高清重制后總算看明白了

《恐龍快打》被誤解三十年的道具,AI高清重制后總算看明白了

街機時代
2025-07-15 19:20:02
這一次,戴蛤蟆頭套賣不出貨的小楊哥,把人走茶涼體現(xiàn)得淋漓盡致

這一次,戴蛤蟆頭套賣不出貨的小楊哥,把人走茶涼體現(xiàn)得淋漓盡致

查爾菲的筆記
2025-06-24 21:15:53
杭州34年前命案告破!嫌兇一直隱姓埋名,被捕時他用的還是電話手表

杭州34年前命案告破!嫌兇一直隱姓埋名,被捕時他用的還是電話手表

都市快報橙柿互動
2025-07-20 09:37:00
英皇欠下166億,撐不住了?這次英皇藝人里能救場的,僅有陳偉霆

英皇欠下166億,撐不住了?這次英皇藝人里能救場的,僅有陳偉霆

一娛三分地
2025-07-10 16:36:01
杜建英“上位史”:拿捏宗慶后,拉攏宗家人,多次阻撓宗馥莉掌權

杜建英“上位史”:拿捏宗慶后,拉攏宗家人,多次阻撓宗馥莉掌權

吭哧有力
2025-07-20 15:36:50
古惑仔播出30年,兄弟5人差距懸殊,有人仍站頂峰,有人發(fā)福沉寂

古惑仔播出30年,兄弟5人差距懸殊,有人仍站頂峰,有人發(fā)福沉寂

卷史
2025-07-12 23:52:33
地鐵站拒絕民警查身份證,男子被罰款200元,起訴警察執(zhí)法沒亮證

地鐵站拒絕民警查身份證,男子被罰款200元,起訴警察執(zhí)法沒亮證

大樹看法
2025-01-19 21:01:49
基本確定!新賽季西部附加賽球隊:將從這5支球隊中產生!

基本確定!新賽季西部附加賽球隊:將從這5支球隊中產生!

運籌帷幄的籃球
2025-07-21 23:34:10
5戰(zhàn)三場砍0分!女籃第一混子非她莫屬:宮魯鳴這次被她坑慘了!

5戰(zhàn)三場砍0分!女籃第一混子非她莫屬:宮魯鳴這次被她坑慘了!

籃球快餐車
2025-07-21 12:20:09
外賣小哥和29歲女技師搭伙過日子,一回家就抱,網(wǎng)友:能長久嗎?

外賣小哥和29歲女技師搭伙過日子,一回家就抱,網(wǎng)友:能長久嗎?

農村情感故事
2025-07-18 17:40:20
向美國捐8億被罵叛徒!無錫唐氏21代掌門:我的錢只認文明歸屬

向美國捐8億被罵叛徒!無錫唐氏21代掌門:我的錢只認文明歸屬

李砍柴
2025-07-18 23:42:24
韓國公布農心杯陣容樸廷桓獲外卡 尷尬!申真谞之外均是30+老將

韓國公布農心杯陣容樸廷桓獲外卡 尷尬!申真谞之外均是30+老將

勁爆體壇
2025-07-21 15:56:13
5家半導體中報增幅超100%,最大12倍!外資、北向均重倉持有

5家半導體中報增幅超100%,最大12倍!外資、北向均重倉持有

風風順
2025-07-21 07:48:08
干細胞移植后出現(xiàn)毛囊性丘疹!是排斥反應還是藥物作用?

干細胞移植后出現(xiàn)毛囊性丘疹!是排斥反應還是藥物作用?

醫(yī)學界兒科頻道
2025-01-29 19:33:42
臺兒莊大捷,蔣介石兩個"嫡系"戰(zhàn)功最大,他為何不讓大肆宣傳?

臺兒莊大捷,蔣介石兩個"嫡系"戰(zhàn)功最大,他為何不讓大肆宣傳?

棠棣說史
2025-07-21 07:30:03
王菲女兒李嫣換頭成功!18年天價費用修復兔唇,真堪比換頭

王菲女兒李嫣換頭成功!18年天價費用修復兔唇,真堪比換頭

一盅情懷
2025-07-16 19:22:12
2025-07-22 00:23:00
碼農翻身 incentive-icons
碼農翻身
有趣且硬核的技術文章
146文章數(shù) 515關注度
往期回顧 全部

科技要聞

劉強東闊氣出手!兩月投了4家具身智能公司

頭條要聞

男子為終身質保花60萬買蔚來 1年跑17萬公里權益沒了

頭條要聞

男子為終身質保花60萬買蔚來 1年跑17萬公里權益沒了

體育要聞

這四位大兄弟,你們真敢要3000萬吶

娛樂要聞

五哈全員為寶石老舅送祝福

財經要聞

炒港美股"補稅潮"突襲?一文了解始末

汽車要聞

勞斯萊斯前設計師全新力作 榮威M7正式亮相

態(tài)度原創(chuàng)

時尚
親子
房產
健康
公開課

二搭的風正在吹向你的CP

親子要聞

看這小孩調皮的想上窗臺,媳婦炒幾個菜給公婆送,炒蘑菇太好吃啦

房產要聞

歷時15年!廣州最難拆的一條村,也終于走到了句點

呼吸科專家破解呼吸道九大謠言!

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 镇康县| 安康市| 青冈县| 东丰县| 楚雄市| 新建县| 吴忠市| 霍邱县| 乐东| 达拉特旗| 温泉县| 浦东新区| 淮北市| 交口县| 余姚市| 公安县| 个旧市| 灵山县| 子长县| 玉门市| 崇礼县| 罗江县| 麻阳| 察雅县| 裕民县| 榆林市| 友谊县| 波密县| 桑日县| 鸡泽县| 扬州市| 贡觉县| 新巴尔虎右旗| 花垣县| 蒙阴县| 沅江市| 托里县| 云阳县| 祁东县| 宜兰县| 德惠市|