成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Rust比你想象的還要復(fù)雜!你知道嗎?

開發(fā) 前端
Rust會自動導(dǎo)入常用的項并鏈接到標(biāo)準(zhǔn)庫,甚至簡單的操作都有我們看不到的安全檢查和優(yōu)化,Rust管理復(fù)雜性的方法遠(yuǎn)遠(yuǎn)超出了我們的hello world示例。

你可能被告知Rust是復(fù)雜的,但這不是真的,實際上Rust比你想象的要復(fù)雜得多!在這篇文章中,將向你展示Rust隱藏其復(fù)雜性的不同方式。

首先,讓我們從一個看似簡單的hello world程序開始。

圖片圖片

程序看起來很簡單,只是一個主函數(shù)和一個打印語句。但這不是編譯器看到的,注意println!不是一個函數(shù),它是一個宏,這意味著它在編譯時擴展成更復(fù)雜的代碼。

在這個例子中,還有一些不是由宏生成的隱藏代碼,這個隱藏代碼我們可以使用一個叫做cargo expand的工具:

圖片圖片

cargo expand是一個強大的開發(fā)工具,它向我們展示了編譯器在展開宏和應(yīng)用編譯器轉(zhuǎn)換后看到的完整rust代碼。

如果我們運行cargo expand,hello world示例將展開為以下代碼:

圖片圖片

讓我們一步一步來分析代碼,前三行導(dǎo)入Prelude,它是一組在標(biāo)準(zhǔn)庫中定義的常用項,包括常用的Trait、Box智能指針、Option和Result枚舉等。

第一行啟用了prelude_import特性,通常表示不穩(wěn)定或不斷發(fā)展的功能。prelude_import特性允許Rust團隊可以在編譯器內(nèi)部修改處理prelude_import的方式,從而在不影響用戶代碼的情況下實現(xiàn)潛在的優(yōu)化。

第二行是一個特殊屬性,確保Prelude中的各項在你的整個代碼庫中可用。

第三行是將Rust 2021版本中的所有項導(dǎo)入到當(dāng)前作用域內(nèi)。每3年升級一次的這種Rust版本是一種引入突破性變化的機制,而不是強迫每個人每3年必須升級一次。新的版本會引入新的功能和語法,但這些都是可選擇的,這樣你就不必升級每個crate,可以選擇對你有用的新特性,且一個版本中的crate必須與其他版本中編譯的crate無縫互操作。這意味著你可以獲得新特性的好處,而不會破壞現(xiàn)有的代碼。

接下來的兩行告訴編譯器使用Rust標(biāo)準(zhǔn)庫宏。use是一個屬性,表示允許使用標(biāo)準(zhǔn)庫中的宏,而不需要顯式導(dǎo)入。extern crate std聲明了對標(biāo)準(zhǔn)庫的依賴,大多數(shù)crate不需要extern,因為編譯器會自動鏈接Cargo.toml中定義的依賴項。這里使用extern crate std行來支持舊版本的println!宏。

讓我們看一下main中的代碼,這是println!宏展開成的代碼,_print是rust的IO模塊中的底層函數(shù),處理實際的字符串打印。

format_args!是另一個宏,可以處理任何格式化參數(shù)的字符串格式化。它是一個特殊的宏,直接內(nèi)置于編譯器中,實際上不會擴展為rust代碼。

讓我們看一下_print的定義:

圖片圖片

我們看到它調(diào)用了一個更底層的函數(shù)print_to,它接受格式化的字符串參數(shù),一個緩沖區(qū),在這個例子中是標(biāo)準(zhǔn)輸出,一個標(biāo)簽,然后將字符串打印到緩沖區(qū)并處理任何可能的錯誤。

回到我們的hello world示例,我們看到_print在內(nèi)部作用域中被調(diào)用,這是Rust處理宏展開的一部分。內(nèi)部作用域中確保宏展開期間創(chuàng)建的臨時變量或表達(dá)式不會泄漏到周圍的作用域中,并有助于防止意外的變量遮蔽或生命周期問題。

現(xiàn)在,為了運行這個擴展代碼,需要切換到nightly編譯器,并啟用print internal特性:

圖片圖片

因為這段代碼使用了內(nèi)部編譯器特性,而這些特性不是rust穩(wěn)定的公共API的一部分。現(xiàn)在我們可以運行我們的hello world示例,正如你所看到的,rust在幕后做了很多工作,即使是簡單的程序,比如println!宏,也被擴展成了更復(fù)雜的優(yōu)化代碼。

總結(jié)

Rust會自動導(dǎo)入常用的項并鏈接到標(biāo)準(zhǔn)庫,甚至簡單的操作都有我們看不到的安全檢查和優(yōu)化,Rust管理復(fù)雜性的方法遠(yuǎn)遠(yuǎn)超出了我們的hello world示例。

從使用所有權(quán)系統(tǒng)自動管理內(nèi)存,到使用Result類型和問號操作符簡化錯誤處理,再到提供包管理器、檢查器和格式化器等內(nèi)置工具。Rust一直致力于管理復(fù)雜性,讓我們的編程更輕松。

責(zé)任編輯:武曉燕 來源: coding到燈火闌珊
相關(guān)推薦

2022-09-19 15:50:10

物聯(lián)網(wǎng)安全工業(yè)4.0

2019-01-11 10:00:44

微信騰訊改版

2020-04-24 09:58:18

數(shù)據(jù)泄露黑客網(wǎng)絡(luò)攻擊

2019-04-04 13:33:17

2010-05-06 09:23:45

云計算

2012-09-24 11:14:06

PHP編程語言Web開發(fā)

2012-09-20 09:28:26

PHP程序Web

2024-05-20 10:37:08

Rust模式通信

2025-05-26 00:01:00

??.map()?類型化數(shù)JavaScript

2021-06-09 15:40:47

容器

2023-02-10 08:13:56

Pythonf-strings

2022-10-14 08:45:54

2023-09-25 14:48:24

Wi-Fi 6

2024-04-22 08:02:34

kafka消息隊列高可用

2022-03-31 10:39:07

Linuxsudo命令

2022-09-25 11:46:52

瀏覽器擴展程序廣告攔截器

2023-12-12 08:41:01

2022-09-28 07:19:35

瀏覽器安全保證惡意擴展

2023-01-12 10:05:46

領(lǐng)導(dǎo)能力員工

2018-04-10 16:24:03

算法分布式一致性
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久久久久 | 中文av网站 | 国产精品一区二区视频 | 久久精彩视频 | 91精品中文字幕一区二区三区 | 中文字幕日韩一区 | 国产激情偷乱视频一区二区三区 | 一级欧美一级日韩片免费观看 | 免费在线色 | 国产成人福利 | 国产精品日女人 | 国产一区二区在线观看视频 | 男女羞羞视频在线免费观看 | 一级黄色毛片子 | 国产传媒视频在线观看 | 日韩中文不卡 | 美女视频黄的免费 | 久久免费高清视频 | 国产在线不卡 | 麻豆一区一区三区四区 | 亚洲欧美在线观看 | 欧美一级电影免费 | 91精品久久久久久久久99蜜臂 | 亚洲综合色婷婷 | 久久久精品国产 | 日韩成人高清 | 亚洲欧美一区二区三区在线 | 欧美精品第三页 | 欧洲一级视频 | 在线伊人网 | 免费在线观看黄色av | 日韩欧美国产一区二区三区 | 大久| 日韩高清一区二区 | 99精品电影 | 日韩高清一区二区 | 免费观看一级特黄欧美大片 | 国产激情| 国产ts人妖另类 | 国产精品91视频 | 日韩中文字幕在线观看 |