自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

反駁:Rust 是 Go 應(yīng)該成為的樣子?

新聞
作為兩門服務(wù)端的新語言,這些年受到越來越多的關(guān)注。有人調(diào)侃說,關(guān)注 Rust 的人中,很大一部分是從 Go 過來的。

 [[429975]]

作為兩門服務(wù)端的新語言,這些年受到越來越多的關(guān)注。有人調(diào)侃說,關(guān)注 Rust 的人中,很大一部分是從 Go 過來的。經(jīng)常有人因為 Go 的一些設(shè)計和特質(zhì)而質(zhì)疑它,同時,Rust 常被譽(yù)為解決 Go 問題的幾乎完美設(shè)計的替代方案。但實際上,這兩門語言并不是直接競爭關(guān)系,不能直接互換,更多是互補(bǔ)。本文就帶著大家看看兩者的不同。

有一篇文章 《I want off Mr. Golang's Wild Ride》:https://fasterthanli.me/articles/i-want-off-mr-golangs-wild-ride,以及圍繞它的激烈討論,不止一次遇到過諸如“Rust 是 Go 應(yīng)該成為的樣子”之類的陳述。這些討論中觀點,顯然是由那篇文章推動的,似乎反應(yīng)出 Go 有太多有問題的特性,而另一方面,Rust 是一個精心設(shè)計的 Go 替代品。

在我看來,這篇文章的討論揭示了對這兩種語言、它們解決的問題以及它們所針對的軟件開發(fā)范式的嚴(yán)重誤解。

01 文章對 Go 的批評

這篇文章主要批評 Go 的簡單是一個謊言:標(biāo)準(zhǔn)庫中的 API 向用戶隱藏了復(fù)雜性,而沒有真正解決它,這在極端情況下會產(chǎn)生完全錯誤的結(jié)果。以 Go 的 filepath.Ext 函數(shù)為例:它在某些情況下會產(chǎn)生不準(zhǔn)確的結(jié)果。作為反例,這篇文章提到了 Rust std::path::extension 是產(chǎn)生完全正確結(jié)果的函數(shù)。

這種對 Go 在邊緣情況下不準(zhǔn)確的不滿似乎是可以理解的。我們都知道,在編程中,只有正確和不正確,沒有其他結(jié)果。因此,由于 Rust 提供了正確的結(jié)果,它顯然是更好的語言。但事情真的這么簡單嗎?難道谷歌不能聘請高手來解決這個問題嗎?

02 追根溯源

Go 和 Rust 被頻繁地比較,因為它們都被宣傳為系統(tǒng)編程語言,而且它們都是現(xiàn)代的編程語言,發(fā)布時間接近。但是,一旦你內(nèi)化了它們的來源以及它們的設(shè)計目的,你很快就會發(fā)現(xiàn)它們是兩種完全不同的語言。

Go 是一個 Google 項目,主要設(shè)計用于后端和網(wǎng)絡(luò)服務(wù)。這些服務(wù)在可預(yù)測的、同質(zhì)的、Unix 等基礎(chǔ)設(shè)施中運(yùn)行。谷歌完全控制著他們的基礎(chǔ)設(shè)施,潛在的性能瓶頸可以通過在問題上投入更多的服務(wù)器來解決。

另一方面,Rust 是由 Mozilla 在非常不同的情況下啟動的。Firefox 和 Servo 等項目是非常長壽的軟件產(chǎn)品,必須在各種系統(tǒng)上運(yùn)行。他們必須在不均勻、未知且可能充滿惡意的環(huán)境中工作。因此,在每個系統(tǒng)上產(chǎn)生完全相同的結(jié)果對于這些應(yīng)用程序至關(guān)重要。

03 不同的問題,不同的語言

谷歌和許多其他維護(hù)類似基礎(chǔ)設(shè)施的公司通常必須應(yīng)對以下挑戰(zhàn)——雖然我對谷歌沒有深入的了解,但其中一些可能被其龐大的規(guī)模放大了:

  • 開發(fā)人員流動率高。

  • 短迭代中的快節(jié)奏開發(fā)。

  • 快節(jié)奏的組織擴(kuò)展。

  • 高度動態(tài)的基礎(chǔ)設(shè)施和環(huán)境。

  • 短期和可替換的服務(wù)。

Google 需要一種完全針對這些挑戰(zhàn)量身定制的語言,并且不可避免地會設(shè)計出與滿足 Mozilla 需求的語言不同的語言。

04 另一種范式

Go 和 Rust 不僅有不同的語言設(shè)計,它們還包含一種相反的軟件開發(fā)方法。Rust 專注于高效率并為問題找到最漂亮的實現(xiàn)。為了實現(xiàn)這一點,與其他語言相比,它有著更陡峭的學(xué)習(xí)曲線。

相比之下——這就是大部分行業(yè)的現(xiàn)實——谷歌和許多其他公司不希望他們的開發(fā)人員在他們能夠高效工作之前花 3 個月時間學(xué)習(xí)一門新語言。因此,Go 被有意設(shè)計為一種快速學(xué)習(xí)和使用的語言。它不一定是最有效或最漂亮的解決方案。它甚至不必在公司不使用的系統(tǒng)上工作。它只需要工作得足夠好。

為什么?因為運(yùn)行動態(tài)基礎(chǔ)設(shè)施需要高度的自動化、標(biāo)準(zhǔn)化、監(jiān)控、可觀察性、彈性、可擴(kuò)展性和安全性。對于不在這樣的環(huán)境中工作的開發(fā)人員來說,這聽起來可能很奇怪,但在日常業(yè)務(wù)中,重點往往是這些高級需求而不是代碼本身。

05 底線

盡管乍一看 Go 和 Rust 似乎為類似場景提供了類似的好處,但它們是針對不同問題而設(shè)計的專業(yè)工具。就像大多數(shù)其他工具一樣,一個并非比另一個“更好”。在尋找適合自己需求的新語言時,Google 和 Mozilla 都沒有采取有偏見的方法。他們只是努力尋找最適合他們的解決方案——你也應(yīng)該如此。

責(zé)任編輯:張燕妮 來源: Rust編程指北
相關(guān)推薦

2023-12-07 08:35:22

2022-05-09 10:36:05

PythonPyScript開發(fā)者

2022-12-01 16:56:03

智慧城市安全環(huán)境能源

2020-07-07 07:00:00

RustGo語言編程語言

2021-01-05 13:45:31

Go語言編程語言

2022-09-16 07:40:17

CloudWeGo開源Rust

2021-10-26 13:40:49

物聯(lián)網(wǎng)物聯(lián)網(wǎng)漏洞IoT

2021-03-12 11:50:08

項目組件 API

2022-01-13 10:58:03

開發(fā)技能代碼

2023-12-15 14:38:00

GoRust編程語言

2021-09-29 08:59:49

Rust編程語言

2020-09-16 23:00:15

Rust編程語言開發(fā)

2023-06-01 19:24:16

2024-03-01 20:16:03

GoRust語言

2024-01-09 16:14:39

RustGo切片

2021-08-09 14:47:34

Go語言開發(fā)

2011-07-05 17:05:15

CIO

2024-05-23 08:12:45

Rust前端開發(fā)JavaScrip

2024-01-25 09:10:10

GoRust標(biāo)準(zhǔn)庫

2025-01-22 13:24:55

點贊
收藏

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