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

這些坑,Rust早填為妙!

譯文 精選
開(kāi)發(fā) 前端
這篇文章旨在揭露Rust的一些缺點(diǎn),它有時(shí)會(huì)拖慢開(kāi)發(fā)人員的進(jìn)度,需要調(diào)用其它語(yǔ)言才能完成任務(wù)。

點(diǎn)擊參加51CTO網(wǎng)站內(nèi)容調(diào)查問(wèn)卷

編譯 | 王瑞平、言征

使用Rust三年多了,我非常喜歡它。Rust不僅幫助我完成了很多任務(wù),還開(kāi)發(fā)出極其可靠的軟件。Rust讓推斷代碼的并發(fā)性和并行性變得更容易。

我可以繼續(xù)贊美Rust,但這并非本篇文章的重點(diǎn)。相反,這篇文章旨在揭露Rust的一些缺點(diǎn),它有時(shí)會(huì)拖慢開(kāi)發(fā)人員的進(jìn)度,需要調(diào)用其它語(yǔ)言才能完成任務(wù)。

1、Rust需要調(diào)用其它語(yǔ)言完成任務(wù)  

Rust中沒(méi)有具體調(diào)用系統(tǒng)命令的方法,得通過(guò)crates.io實(shí)現(xiàn)此功能。7年前,syscall crate進(jìn)行了最后一次更新,支持以下平臺(tái):

圖片

毫無(wú)疑問(wèn),Linux在列表中出現(xiàn)次數(shù)最多。

不過(guò),如果你仍只使用FreeBSD操作系統(tǒng)而不使用x86_64,你就out了。如果你只關(guān)心NetBSD、OpenBSD或Solaris,你只能get到普通的技能。此時(shí),你可以采取的措施是使用libc crate。

我認(rèn)為這些方式都不太好,這不是系統(tǒng)編程語(yǔ)言該有的狀態(tài)。系統(tǒng)編程語(yǔ)言應(yīng)該可以與其它編程語(yǔ)言互操作,不需要通過(guò)調(diào)用C語(yǔ)言完成任務(wù)。

2、內(nèi)存模型:用Rust語(yǔ)言開(kāi)發(fā)Linux內(nèi)核的攔路虎 

上述列表中出現(xiàn)最多的當(dāng)屬Linux。最近幾年,Rust For Linux項(xiàng)目隨著Rust的火爆也開(kāi)始逐漸升溫。但是,Rust想深入Linux的真正核心仍有很長(zhǎng)的路要走,最大的攔路虎是內(nèi)存模型方面的問(wèn)題。

當(dāng)Rust編寫“無(wú)限接近計(jì)算機(jī)底層”的操作內(nèi)核時(shí),內(nèi)存模型會(huì)變得很重要。它是多線程環(huán)境能夠可靠工作的基礎(chǔ),需要對(duì)多線程環(huán)境的運(yùn)作細(xì)節(jié)進(jìn)行完備的定義。

Rust中的lock鎖是與具體要保護(hù)的數(shù)據(jù)是有強(qiáng)綁定關(guān)系的,開(kāi)發(fā)者需要調(diào)用data.lock將鎖進(jìn)行鎖定,只有這樣才能受鎖保護(hù)的數(shù)據(jù)才能被訪問(wèn)。

由于Rust的變量都是有嚴(yán)格的生命周期及借用機(jī)制的,因此,鎖也很可能要在內(nèi)存中移動(dòng),內(nèi)存中對(duì)象的移動(dòng)、所有權(quán)借用等除了造成移動(dòng)鎖之外還會(huì)有移動(dòng)構(gòu)造函數(shù)等問(wèn)題。

但是移動(dòng)鎖、還移動(dòng)構(gòu)造函數(shù)這些概念在之前的Linux中幾乎是聞所未聞的。這些問(wèn)題在Rust只開(kāi)發(fā)上層應(yīng)用時(shí)都不是問(wèn)題,但一旦深入到操作系統(tǒng)內(nèi)核,這些就都成了問(wèn)題。所以,Rust想真正深入到Linux的內(nèi)核當(dāng)中還有很多的路要走。

3、麻煩:你只在GitHub上才能獲得crates包

一旦部分技術(shù)人員放棄使用crates包,隨著時(shí)間的推移更多人會(huì)放棄。我并不是唯一批判這個(gè)系統(tǒng)缺陷的人。

最重要的是,crates.io的注冊(cè)列表只在GitHub上才能get到。這意味著,為了使用crates.io,你必須擁有一個(gè)GitHub帳戶。對(duì)于一些開(kāi)發(fā)人員來(lái)說(shuō),這顯然不是問(wèn)題,但是,并不是所有程序員都能夠適應(yīng)這種形式。

總之,就個(gè)人而言,我認(rèn)為Rust在GitHub上托管他們的代碼糟糕透了。

4、不吐不快:Rust中那些突出的缺陷  

除了上述的“吐槽”,Rust編程語(yǔ)言還有一些明顯的缺點(diǎn),在這里做個(gè)總結(jié):

1)編譯時(shí)間   

與其對(duì)等的編程語(yǔ)言相比,Rust編譯代碼的速度相對(duì)較慢。原因是它的“編譯單元”不是單個(gè)文件,而是上文提到的crate包。 

crate可以包含多個(gè)模塊。因此,它們可以是大型編譯單元。雖然完成了whole-of-crate優(yōu)化,但是,它還需要whole-of-crate編譯,這很耗時(shí)。此外,它還具有一個(gè)復(fù)雜的編譯器工具鏈,該工具鏈包含多個(gè)中間表示,并向LLVM發(fā)送大量代碼。這些都是導(dǎo)致Rust編譯代碼速度變慢的原因。 

2)學(xué)習(xí)難度   

真正學(xué)會(huì)Rust很難,為了理解它的主要部分,你需要先熟悉C++ 或任何面向?qū)ο蟮恼Z(yǔ)言。

3)過(guò)于嚴(yán)格   

在編程方面,嚴(yán)格通常被認(rèn)為是一件好事,但是,Rust有時(shí)有點(diǎn)過(guò)于嚴(yán)格,使用它進(jìn)行編程時(shí)很難偷懶。直到一切都恰到好處,程序才會(huì)正確運(yùn)行。

五、替代品:Zig,小巧而簡(jiǎn)潔  

除了Rust,另一種真正引起我注意的語(yǔ)言是Zig。它在編譯時(shí)計(jì)算和執(zhí)行命令,而不是像Rust一樣在運(yùn)行時(shí)執(zhí)行命令。很多程序員已經(jīng)通過(guò)實(shí)踐證明了這一點(diǎn)。Zig不僅成為了完美的替代品, 對(duì)于維護(hù)任何類型的宏觀系統(tǒng)也都游刃有余。

Zig編程語(yǔ)言最主要的優(yōu)點(diǎn)是小巧而簡(jiǎn)潔,正廣受程序員好評(píng)。它專注于調(diào)試你的應(yīng)用程序,而不是調(diào)試你的編程語(yǔ)言知識(shí),沒(méi)有隱式控制流、沒(méi)有隱式內(nèi)存分配、沒(méi)有預(yù)處理器,更沒(méi)有宏。

此外,用Zig編寫的庫(kù)可以在任何地方使用,包括:桌面程序和游戲、低延遲服務(wù)器、操作系統(tǒng)內(nèi)核、嵌入式設(shè)備等。

Zig還提供了defer和errdefer,使所有的資源管理(不僅是內(nèi)存)變得簡(jiǎn)單且易于驗(yàn)證。

六、寫在最后:Rust仍是理想語(yǔ)言 

總之,拋開(kāi)上述缺陷不談,我仍認(rèn)為Rust非常接近我的理想語(yǔ)言。但實(shí)際上,我也正在尋找其它語(yǔ)言。

我相信,當(dāng)聽(tīng)到批評(píng)的聲音后,Rust可以已經(jīng)開(kāi)始變革并反思了,也許,更好的解決方案即將出現(xiàn)。這需要一群人共同改進(jìn)這種語(yǔ)言才不會(huì)重復(fù)同樣的錯(cuò)誤。

當(dāng)然,我對(duì)Rust抱怨主要針對(duì)crates.io,相信此類問(wèn)題在不久的將來(lái)都能得以解決。

所以,無(wú)論如何,讓我們盡情幻想“后Rust時(shí)代的理想語(yǔ)言”。這種語(yǔ)言應(yīng)該與Rust類似,同時(shí)具有Zig語(yǔ)言comptime的優(yōu)勢(shì)。

新的語(yǔ)言中會(huì)有borrow checker,它就像Rustc編譯器一樣可以檢測(cè)出錯(cuò)誤的消息。我們也會(huì)更多的支持comptime概念的出現(xiàn)而并非宏。與Rust不同,這種新語(yǔ)言能夠從頭至尾完成各種任務(wù)。

在新語(yǔ)言中,我們可獲得接口等內(nèi)置功能并能夠直接與其它語(yǔ)言以及底層操作系統(tǒng)內(nèi)核通信。最后,我還設(shè)想出一個(gè)庫(kù)包生態(tài)系統(tǒng),它將是完全分布式和去中心化的。

雖然Rust有缺點(diǎn),但它仍然是迄今為止在內(nèi)存訪問(wèn)、安全性和準(zhǔn)確性方面最好的語(yǔ)言。我提到的很多小抱怨都只是從普通程序員角度出發(fā)的。

原文鏈接:https://jeang3nie.codeberg.page/rust-criticism-from-rustacean/

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2021-06-09 07:11:08

MySQL時(shí)間戳類型

2023-08-08 20:53:47

Rust系統(tǒng)編程語(yǔ)言

2024-06-04 22:20:02

2021-11-18 08:55:49

共享CPU內(nèi)存

2018-10-31 11:30:28

Redis數(shù)據(jù)分布式鎖

2022-11-04 08:38:57

索引數(shù)據(jù)分庫(kù)

2022-10-21 18:41:23

RustC++Azure

2021-03-31 08:33:17

SysTick定時(shí)器SysTick定時(shí)器

2013-01-14 14:57:17

2020-10-29 10:22:44

中臺(tái)

2016-10-19 19:03:18

javascriptes6React Nativ

2017-03-02 13:32:36

Android開(kāi)發(fā)開(kāi)發(fā)者

2021-01-26 00:46:40

微服務(wù)架構(gòu)微服務(wù)應(yīng)用

2024-05-23 08:12:45

Rust前端開(kāi)發(fā)JavaScrip

2020-08-20 17:21:35

VimRust IDELinux

2021-09-22 13:08:06

開(kāi)發(fā)技能SQL

2022-07-19 07:30:06

BigDecimal運(yùn)算float

2021-04-16 08:11:24

js前端JavaScript

2021-07-05 22:32:33

數(shù)據(jù)倉(cāng)庫(kù)團(tuán)隊(duì)

2025-03-04 07:00:00

JavaScript編程開(kāi)發(fā)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲精品日韩在线 | 久久亚洲二区 | 青青久在线视频 | av高清毛片 | 亚洲一区中文字幕 | 午夜手机在线视频 | 九九伦理片| 亚洲视频精品 | 91视频91| 成人欧美一区二区三区黑人孕妇 | 亚洲伊人a | 成人h电影在线观看 | wwwxxx国产 | 久久久久久免费免费 | 三级视频网站 | 91国产视频在线 | 久久大| 久久久久国产 | 国产网站在线播放 | 中文字幕一区二区三区四区 | 日本不卡一区二区三区在线观看 | 视频一区中文字幕 | 国产91亚洲精品 | 国产一区二区免费 | 亚洲精品日韩精品 | 成人免费视频网站在线观看 | 午夜黄色| 亚洲一区二区在线播放 | 国偷自产av一区二区三区 | 久久久久国产 | 人干人人 | 天天拍天天插 | 天天操天天干天天曰 | 91久久精品一区二区二区 | 99视频在线免费观看 | 国产农村妇女精品一区 | 亚洲一区 | 亚洲国产高清高潮精品美女 | 亚洲视频中文字幕 | av黄色在线 | 欧美二区乱c黑人 |