從 Python 到 Go 再到 Rust,誰是后端開發(fā)之王?
時(shí)間:2021-09-06 15:22:09
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:csdn【CSDN編者按】作為一種簡單易上手的面向?qū)ο蟮膭?dòng)態(tài)類型語言,Python在近兩年的技術(shù)圈中,可謂是炙手可熱;而另一種素有Google“親兒子”之稱的Go語言,被設(shè)計(jì)成一門應(yīng)用于搭載Web服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)...
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:csdn【CSDN 編者按】作為一種簡單易上手的面向?qū)ο蟮膭?dòng)態(tài)類型語言,Python 在近兩年的技術(shù)圈中,可謂是炙手可熱;而另一種素有 Google “親兒子”之稱的 Go 語言,被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言,其自從誕生起,就備受業(yè)界關(guān)注;最后來自 Mozilla 開發(fā)的系統(tǒng)編程語言 Rust,在安全性上表現(xiàn)尤為突出,且在過去三年間連續(xù)獲得了 StackOverflow 開發(fā)者調(diào)查中“最受喜愛編程語言”的 Top 1。??在此,如果這三種語言同置于后端開發(fā)之中時(shí),將會(huì)為開發(fā)者帶來什么樣的體驗(yàn)?而誰又會(huì)更勝一籌?作者 |?allomedia
譯者 |?彎月,責(zé)編 | 屠敏出品 | CSDN(ID:CSDNnews)以下為譯文:說起后端語言,我很自然地從Python切換到了程序員們的新寵:Go,但僅一個(gè)星期之后,我意識(shí)到換成Go只是此次旅行的一半路程。盡管Go比Python更能滿足我的需要,但遠(yuǎn)遠(yuǎn)比不上我期待中的開發(fā)體驗(yàn),就像我在前端使用Elm時(shí)的體驗(yàn)。所以我嘗試了一下Rust。離開Python
在過去三年的后臺(tái)開發(fā)中,我主要使用Python 3。從管理員腳本開始,后來開始寫機(jī)器學(xué)習(xí)腳本,到Flask/Django應(yīng)用程序,我最近大部分時(shí)間都在使用Python,但總覺得它不是那么舒服。說實(shí)話,我并不是從某個(gè)“完全隨機(jī)的時(shí)間點(diǎn)”開始感覺不對勁,而是因?yàn)槲蚁矏凵狭薊lm這個(gè)強(qiáng)類型語言。我很喜歡一句名言:“能通過編譯就能用”,一旦你體會(huì)到了這一點(diǎn),就再也回不到過去了。你可以盡情嘗試,只要按照編譯器給出的友好錯(cuò)誤信息改代碼,然后就能神奇地使用了!我開始意識(shí)到,我希望的“最佳”后端語言應(yīng)該擁有以下特性:
我決定用Go語言重寫一個(gè)用Python寫的內(nèi)部項(xiàng)目,目的只是為了感受兩者之間的差異。第一感覺:學(xué)習(xí)Go非常容易。我只花了一個(gè)晚上,就編譯出了該項(xiàng)目的原型版本,實(shí)現(xiàn)了最基本的功能,還寫了一些測試。能夠快速添加功能的感覺非常好。編譯器的錯(cuò)誤信息也非常有用 ,一切都很好。結(jié)果痛苦開始了。我需要在某個(gè)結(jié)構(gòu)體中添加一些字段,于是我修改了結(jié)構(gòu)體,正要打算根據(jù)編譯器錯(cuò)誤找出這個(gè)結(jié)構(gòu)體在哪兒用過的時(shí)候……我編譯了代碼,結(jié)果……沒有錯(cuò)誤信息。一切正常。嗯?但我在結(jié)構(gòu)體中添加了字段啊,編譯器應(yīng)該指出我的代碼有錯(cuò)誤,因?yàn)檫@些字段并沒有初始化!問題在于,Go語言認(rèn)為不給結(jié)構(gòu)體提供值是正常的。值的默認(rèn)初始值就是零,能通過一切編譯。這一點(diǎn)我堅(jiān)決不能接受。我認(rèn)為,編譯器不能在我犯錯(cuò)誤的時(shí)候替我收拾殘局。于是我想:如果Go的編譯器并不比Python和mypy更好,那我為什么要學(xué)Go語言呢?當(dāng)然Go語言的并發(fā)處理要好得多,但無法依賴編譯器的缺點(diǎn)對于我來說太嚴(yán)重了。不要誤會(huì),我依然認(rèn)為Go能與Python并駕齊驅(qū),如果有人要從兩者中選擇一個(gè),我依然會(huì)推薦學(xué)習(xí)Go而不是Python。但就我個(gè)人而言,我已經(jīng)學(xué)會(huì)了Python,只是想要一些更安全的東西,Go并沒有給我足夠的理由去學(xué)習(xí)。嘗試Rust
所以,我不會(huì)再考慮Go語言,因?yàn)槲野l(fā)現(xiàn)我真正想要的是更有幫助的編譯器,這個(gè)編譯器不應(yīng)該默認(rèn)我懂得如何編程(大量事實(shí)證明我的確不懂)。正因?yàn)槿绱?,我開始嘗試Rust。Rust并不是我的第一選擇,因?yàn)樗鼧?biāo)榜自己為“系統(tǒng)語言”,而我本身更傾向于Web開發(fā),而不是系統(tǒng)開發(fā)。但它有許多非常好的賣點(diǎn):
Go語言非???,但并沒有為我提供足夠的類型安全。如果不需要并發(fā),那么我寧可繼續(xù)使用Python及其生態(tài)環(huán)境,而不會(huì)去冒險(xiǎn)采用Go重寫一切。如果需要并發(fā),那我也不會(huì)使用Go,因?yàn)樗狈︻愋桶踩?,這個(gè)炸彈肯定會(huì)爆炸。Rust非常適合并發(fā)和安全,盡管futures-rs的“箱子”(Rust里函數(shù)庫叫做“箱子”)依然非常新。我認(rèn)為,以后Rust會(huì)成為許多后臺(tái)的默認(rèn)語言。關(guān)于Go和Rust更深入的區(qū)別的文章和討論,可以參考Ralph Caraveo(@deckarep)的這篇文章:為Go開發(fā)者準(zhǔn)備的Rust編程范式(https://medium.com/@deckarep/paradigms-of-rust-for-the-go-developer-210f67cd6a29)。至少,我認(rèn)為Rust是我最喜歡的后臺(tái)語言。原文:https://tech.allo-media.net/point/of/view/2018/03/22/from-python-to-go-to-rust.html本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。???????????????? ?END ?????????????????關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。 歡迎關(guān)注我的視頻號(hào):點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。
譯者 |?彎月,責(zé)編 | 屠敏出品 | CSDN(ID:CSDNnews)以下為譯文:說起后端語言,我很自然地從Python切換到了程序員們的新寵:Go,但僅一個(gè)星期之后,我意識(shí)到換成Go只是此次旅行的一半路程。盡管Go比Python更能滿足我的需要,但遠(yuǎn)遠(yuǎn)比不上我期待中的開發(fā)體驗(yàn),就像我在前端使用Elm時(shí)的體驗(yàn)。所以我嘗試了一下Rust。離開Python
在過去三年的后臺(tái)開發(fā)中,我主要使用Python 3。從管理員腳本開始,后來開始寫機(jī)器學(xué)習(xí)腳本,到Flask/Django應(yīng)用程序,我最近大部分時(shí)間都在使用Python,但總覺得它不是那么舒服。說實(shí)話,我并不是從某個(gè)“完全隨機(jī)的時(shí)間點(diǎn)”開始感覺不對勁,而是因?yàn)槲蚁矏凵狭薊lm這個(gè)強(qiáng)類型語言。我很喜歡一句名言:“能通過編譯就能用”,一旦你體會(huì)到了這一點(diǎn),就再也回不到過去了。你可以盡情嘗試,只要按照編譯器給出的友好錯(cuò)誤信息改代碼,然后就能神奇地使用了!我開始意識(shí)到,我希望的“最佳”后端語言應(yīng)該擁有以下特性:
- 靜態(tài)類型,強(qiáng)類型
- 大多數(shù)檢查在編譯時(shí)進(jìn)行(而且,沒有異常?。?/span>
- 沒有null
- 沒有可修改性
- 能漂亮地處理并發(fā)
我決定用Go語言重寫一個(gè)用Python寫的內(nèi)部項(xiàng)目,目的只是為了感受兩者之間的差異。第一感覺:學(xué)習(xí)Go非常容易。我只花了一個(gè)晚上,就編譯出了該項(xiàng)目的原型版本,實(shí)現(xiàn)了最基本的功能,還寫了一些測試。能夠快速添加功能的感覺非常好。編譯器的錯(cuò)誤信息也非常有用 ,一切都很好。結(jié)果痛苦開始了。我需要在某個(gè)結(jié)構(gòu)體中添加一些字段,于是我修改了結(jié)構(gòu)體,正要打算根據(jù)編譯器錯(cuò)誤找出這個(gè)結(jié)構(gòu)體在哪兒用過的時(shí)候……我編譯了代碼,結(jié)果……沒有錯(cuò)誤信息。一切正常。嗯?但我在結(jié)構(gòu)體中添加了字段啊,編譯器應(yīng)該指出我的代碼有錯(cuò)誤,因?yàn)檫@些字段并沒有初始化!問題在于,Go語言認(rèn)為不給結(jié)構(gòu)體提供值是正常的。值的默認(rèn)初始值就是零,能通過一切編譯。這一點(diǎn)我堅(jiān)決不能接受。我認(rèn)為,編譯器不能在我犯錯(cuò)誤的時(shí)候替我收拾殘局。于是我想:如果Go的編譯器并不比Python和mypy更好,那我為什么要學(xué)Go語言呢?當(dāng)然Go語言的并發(fā)處理要好得多,但無法依賴編譯器的缺點(diǎn)對于我來說太嚴(yán)重了。不要誤會(huì),我依然認(rèn)為Go能與Python并駕齊驅(qū),如果有人要從兩者中選擇一個(gè),我依然會(huì)推薦學(xué)習(xí)Go而不是Python。但就我個(gè)人而言,我已經(jīng)學(xué)會(huì)了Python,只是想要一些更安全的東西,Go并沒有給我足夠的理由去學(xué)習(xí)。嘗試Rust
所以,我不會(huì)再考慮Go語言,因?yàn)槲野l(fā)現(xiàn)我真正想要的是更有幫助的編譯器,這個(gè)編譯器不應(yīng)該默認(rèn)我懂得如何編程(大量事實(shí)證明我的確不懂)。正因?yàn)槿绱?,我開始嘗試Rust。Rust并不是我的第一選擇,因?yàn)樗鼧?biāo)榜自己為“系統(tǒng)語言”,而我本身更傾向于Web開發(fā),而不是系統(tǒng)開發(fā)。但它有許多非常好的賣點(diǎn):
- 沒有null值,二是提供了Option類型(編譯時(shí)檢查)
- 沒有異常,但提供了Result類型(編譯時(shí)檢查)
- 變量默認(rèn)是不可修改的
- 設(shè)計(jì)時(shí)考慮了并發(fā)
- 設(shè)計(jì)時(shí)考慮了內(nèi)存安全,不使用垃圾回收器
- 它非常新,一切發(fā)展都很迅速。我的項(xiàng)目中使用了futures-rs和hyper.rs,想找一份好的文檔非常困難(感謝irc.mozilla.org#rust-beginners的人提供的幫助)。
- 它會(huì)強(qiáng)迫你思考在使用高階語言時(shí)從未思考過的問題:內(nèi)存管理(包括lifetimes和ownership的概念)。
- 編譯器的消息有時(shí)并不是太容易懂,特別是將futures和它們超長的類型結(jié)合在一起時(shí)。
- 可修改性是允許的,所以有時(shí)候副作用會(huì)讓你抓狂。
- 非???/span>
- 工具鏈非常好(cargo,rustfmt)
- 大多數(shù)東西都在編譯時(shí)檢查
- 你幾乎可以用它做任何事,可以編寫瀏覽器,編寫Web應(yīng)用,甚至還能編寫游戲。
- 社區(qū)非常友好
- 由Mozilla支持
Go語言非???,但并沒有為我提供足夠的類型安全。如果不需要并發(fā),那么我寧可繼續(xù)使用Python及其生態(tài)環(huán)境,而不會(huì)去冒險(xiǎn)采用Go重寫一切。如果需要并發(fā),那我也不會(huì)使用Go,因?yàn)樗狈︻愋桶踩?,這個(gè)炸彈肯定會(huì)爆炸。Rust非常適合并發(fā)和安全,盡管futures-rs的“箱子”(Rust里函數(shù)庫叫做“箱子”)依然非常新。我認(rèn)為,以后Rust會(huì)成為許多后臺(tái)的默認(rèn)語言。關(guān)于Go和Rust更深入的區(qū)別的文章和討論,可以參考Ralph Caraveo(@deckarep)的這篇文章:為Go開發(fā)者準(zhǔn)備的Rust編程范式(https://medium.com/@deckarep/paradigms-of-rust-for-the-go-developer-210f67cd6a29)。至少,我認(rèn)為Rust是我最喜歡的后臺(tái)語言。原文:https://tech.allo-media.net/point/of/view/2018/03/22/from-python-to-go-to-rust.html本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。???????????????? ?END ?????????????????關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。