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

網易首頁 > 網易號 > 正文 申請入駐

千萬別學Rust!

0
分享至

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

  

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

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

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

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

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

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

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

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

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

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

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

  所有權

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

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

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

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

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

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

  張大胖:什么所有權?

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

  

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

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

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

  編譯還是出錯!

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

  借用

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

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

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

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

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

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

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

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

  總結一下:

  

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

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

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

  張大胖徹底懵逼了!

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

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

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

  

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

  

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

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

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

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

  Rust編譯器:你到底做過系統級編程沒有?系統級編程要求:

  1. 非常快

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

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

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

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

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

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

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.

相關推薦
熱點推薦
巧合?三河市委書記曾任固安縣一把手,固安招牌也曾忌諱“紅黑藍”

巧合?三河市委書記曾任固安縣一把手,固安招牌也曾忌諱“紅黑藍”

小蘿卜絲
2025-04-12 11:20:39
“丹鳳眼”有多罕見?看一眼就再難忘,精致到骨子里的眼型

“丹鳳眼”有多罕見?看一眼就再難忘,精致到骨子里的眼型

星光歷史
2024-12-22 10:37:17
特朗普發言人又“翻車”了,穿著中國產衣服,還說抵制中國制造!

特朗普發言人又“翻車”了,穿著中國產衣服,還說抵制中國制造!

凱撒談兵
2025-04-15 11:32:40
中國元首此時訪越有何深意?

中國元首此時訪越有何深意?

看看新聞Knews
2025-04-15 00:43:10
馮德萊恩:我們無法消化產能過剩,也不會接受對歐盟的商品傾銷

馮德萊恩:我們無法消化產能過剩,也不會接受對歐盟的商品傾銷

羅sir財話
2025-04-12 20:10:51
鬧大了!63歲重機車網紅去世,晚上騎車撞護欄,更多細節曝光

鬧大了!63歲重機車網紅去世,晚上騎車撞護欄,更多細節曝光

阿矗論古今
2025-04-14 16:58:59
醒醒吧!就算中國同時拉出5支艦隊30艘大艦,也遠未達美7成實力

醒醒吧!就算中國同時拉出5支艦隊30艘大艦,也遠未達美7成實力

時時有聊
2025-04-09 16:16:26
許敏律師李圣說:他媽媽也被打傷了,4個嫌疑人被抓,今天開庭

許敏律師李圣說:他媽媽也被打傷了,4個嫌疑人被抓,今天開庭

漢史趣聞
2025-04-15 09:25:39
明年通車!鄭州將再開通一條新高速!

明年通車!鄭州將再開通一條新高速!

大象新聞
2025-04-15 10:34:01
46歲楊樂樂在家養生做操,皮膚下垂顯老態和汪涵住中式庭院好氣派

46歲楊樂樂在家養生做操,皮膚下垂顯老態和汪涵住中式庭院好氣派

檸檬有娛樂
2025-04-15 11:22:02
獨立試駕比亞迪海豹06GT:年輕人的新玩具

獨立試駕比亞迪海豹06GT:年輕人的新玩具

駕仕派
2025-04-15 13:10:17
克倫克:擁有巔峰約基奇是種責任 若不問他的意見我就是最傻的人

克倫克:擁有巔峰約基奇是種責任 若不問他的意見我就是最傻的人

直播吧
2025-04-15 15:20:31
國內油價或迎近三年最大跌幅!每升降0.4-0.42元

國內油價或迎近三年最大跌幅!每升降0.4-0.42元

金融界
2025-04-15 17:05:36
73年三名女兵7天滅狼89只,離開的前一晚,她們的房門被敲響了

73年三名女兵7天滅狼89只,離開的前一晚,她們的房門被敲響了

濤哥講堂
2025-04-07 16:03:02
對手打瘋了,王楚欽挽救兩個局點,胳膊疑似出現不適,將再戰強敵

對手打瘋了,王楚欽挽救兩個局點,胳膊疑似出現不適,將再戰強敵

大嘴說臺球
2025-04-15 16:05:22
甲方逆天需求:LOGO里要放18只貓和二維碼!

甲方逆天需求:LOGO里要放18只貓和二維碼!

LOGO研究所
2025-03-29 10:08:52
千年匠心賡續世博情緣 五糧液和美之釀飄香大阪世博會

千年匠心賡續世博情緣 五糧液和美之釀飄香大阪世博會

糖煙酒熱點
2025-04-15 10:20:03
(深入分析)特朗普已被逼到了懸崖邊上,因為中國擊中了其要害

(深入分析)特朗普已被逼到了懸崖邊上,因為中國擊中了其要害

阿胡
2025-04-12 11:30:46
朱亞文妻子素面朝天送娃上學,額前白發搶鏡,美的別有一番韻味

朱亞文妻子素面朝天送娃上學,額前白發搶鏡,美的別有一番韻味

情感大頭說說
2025-04-15 00:50:47
我的后半生結局,小田田在老茍死后得套房,轉身搶樂姍喜娘手捧花

我的后半生結局,小田田在老茍死后得套房,轉身搶樂姍喜娘手捧花

TVB的四小花
2025-04-15 14:19:25
2025-04-15 19:03:00
碼農翻身 incentive-icons
碼農翻身
有趣且硬核的技術文章
118文章數 456關注度
往期回顧 全部

科技要聞

對等關稅下顯卡被爆炒:黃牛背刺游戲玩家

頭條要聞

1家3口被撞案受害者親屬:肇事者對著寶寶遺體談笑風生

頭條要聞

1家3口被撞案受害者親屬:肇事者對著寶寶遺體談笑風生

體育要聞

父母是臺灣移民!女林書豪被WNBA球隊選中

娛樂要聞

娛樂圈模范夫妻塌房?私生活曝光!

財經要聞

美國財長,突然發聲!涉及“對華關稅”

汽車要聞

轉型中的"穩健派" 一汽-大眾的智能化突圍路徑

態度原創

家居
數碼
教育
公開課
軍事航空

家居要聞

現代本真 展現歸零心態

數碼要聞

一加 SUPERVOOC 150W 超能核移動電源預熱:1C + 1A + 自帶線

教育要聞

英國校長代表團再訪華,雙方在教育、科研及人文領域展開深入交流

公開課

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

軍事要聞

烏遭俄導彈襲擊 澤連斯基喊話特朗普訪烏

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 河南省| 资源县| 扎囊县| 乐东| 万宁市| 舞钢市| 五华县| 隆子县| 兰考县| 霍邱县| 甘洛县| 习水县| 三亚市| 尤溪县| 丽水市| 盘山县| 天津市| 兴海县| 兴仁县| 东源县| 武穴市| 溧阳市| 泽州县| 康马县| 晋江市| 湾仔区| 南岸区| 勃利县| 武安市| 稻城县| 余干县| 曲阳县| 西昌市| 盖州市| 冕宁县| 桦南县| 封开县| 锦州市| 开封市| 边坝县| 普格县|