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

Rust比你想象的還要復雜!你知道嗎?

開發 前端
Rust會自動導入常用的項并鏈接到標準庫,甚至簡單的操作都有我們看不到的安全檢查和優化,Rust管理復雜性的方法遠遠超出了我們的hello world示例。

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

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

圖片圖片

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

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

圖片圖片

cargo expand是一個強大的開發工具,它向我們展示了編譯器在展開宏和應用編譯器轉換后看到的完整rust代碼。

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

圖片圖片

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

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

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

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

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

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

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

讓我們看一下_print的定義:

圖片圖片

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

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

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

圖片圖片

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

總結

Rust會自動導入常用的項并鏈接到標準庫,甚至簡單的操作都有我們看不到的安全檢查和優化,Rust管理復雜性的方法遠遠超出了我們的hello world示例。

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

責任編輯:武曉燕 來源: coding到燈火闌珊
相關推薦

2022-09-19 15:50:10

物聯網安全工業4.0

2019-01-11 10:00:44

微信騰訊改版

2020-04-24 09:58:18

數據泄露黑客網絡攻擊

2019-04-04 13:33:17

2010-05-06 09:23:45

云計算

2012-09-24 11:14:06

PHP編程語言Web開發

2012-09-20 09:28:26

PHP程序Web

2025-05-26 00:01:00

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

2023-02-10 08:13:56

Pythonf-strings

2021-06-09 15:40:47

容器

2022-10-14 08:45:54

2024-05-20 10:37:08

Rust模式通信

2024-04-22 08:02:34

kafka消息隊列高可用

2022-03-31 10:39:07

Linuxsudo命令

2023-09-25 14:48:24

Wi-Fi 6

2022-09-25 11:46:52

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

2018-04-10 16:24:03

算法分布式一致性

2022-09-28 07:19:35

瀏覽器安全保證惡意擴展

2023-01-12 10:05:46

領導能力員工

2021-05-19 14:36:03

數據中心
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线观看一区二区 | 亚洲精品久久久久中文字幕欢迎你 | 精品一区二区久久 | 亚洲一区二区三区免费在线观看 | 色吊丝在线 | 欧美在线观看免费观看视频 | 久久久精品一区 | 麻豆精品国产91久久久久久 | 婷婷久久精品一区二区 | 99精品视频在线观看 | 精品视频一区二区三区四区 | 亚洲第一视频网站 | 日本高清中文字幕 | 国产美女久久久 | 日本免费一区二区三区四区 | 免费看黄色片 | 欧美4p | av电影一区| 国产成人精品999在线观看 | 国产精品亚洲一区二区三区在线观看 | 男人的天堂亚洲 | 在线观看你懂的网站 | 精品欧美一区二区在线观看欧美熟 | 亚洲女优在线播放 | 欧美久久天堂 | 精品91av | 欧洲尺码日本国产精品 | 成人精品一区 | 不卡av电影在线播放 | 一区二区三区av | 九九精品在线 | 国产精品不卡一区 | 亚洲精品久久国产高清情趣图文 | 色资源av| 九九久久久 | 精品国产三级 | 综合在线视频 | 日韩三片 | 亚洲欧美在线一区 | 久久99精品国产99久久6男男 | 日韩欧美在线一区二区 |