十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
1.根據(jù)Rust的特點(diǎn)和定位適用于對(duì)控制性比較強(qiáng),對(duì)性能很敏感的領(lǐng)域,比如底層軟件(OS/driver),基礎(chǔ)系統(tǒng)軟件(Compiler/VM/DB等),性能要求比較高的應(yīng)用軟件(瀏覽器/圖形圖像處理/游戲/高性能服務(wù)器軟件等,或者可能包括近來(lái)很火的ML應(yīng)用方向)。2.底層軟件(比如OS/driver)部分是和C應(yīng)用領(lǐng)域有很大重合度的,在這個(gè)領(lǐng)域我認(rèn)為對(duì)C沖擊不大。在這里C已經(jīng)足夠好了,而且這些領(lǐng)域技術(shù)性很高,但業(yè)務(wù)邏輯其實(shí)并不算太復(fù)雜,Rust的優(yōu)勢(shì)作用有限。而且Rust相比于C語(yǔ)言,帶來(lái)了一定的“黑盒”和這些領(lǐng)域一些不需要的語(yǔ)言復(fù)雜特性。C作為“可移植的匯編”恰到好處的非常適合這個(gè)領(lǐng)域,其他語(yǔ)言基本無(wú)法構(gòu)成挑戰(zhàn)。3.前面1中提到的領(lǐng)域除了底層軟件(OS/driver之類(lèi))剩下的領(lǐng)域,C++目前最具有優(yōu)勢(shì)。在這些領(lǐng)域C++相對(duì)于C提供了高級(jí)特性方便開(kāi)發(fā),相對(duì)于JVM系的性能更高內(nèi)存更少。(雖然這些領(lǐng)域有些知名軟件是C和JVM系的,比如postgresql/redis/nginx/Hadoop/spark等,但在這些領(lǐng)域目前只有C++一個(gè)是全能型)我認(rèn)為rust的主要戰(zhàn)場(chǎng)就在這里,需要對(duì)決的對(duì)手就是C++。C++既有的力量(系統(tǒng)/代碼/人員/習(xí)慣)太強(qiáng)大了,在這些領(lǐng)域完全打敗C++是非常困難的。而且C++也在不斷發(fā)展,近年來(lái)發(fā)展的步伐也快了起來(lái),C++11/14/17等等。但C++的歷史包袱是很重的,越發(fā)展其實(shí)復(fù)雜性也在不斷提高,何況有些問(wèn)題(像安全/異常/復(fù)雜繼承等等)是基因里的,通過(guò)增加feature打補(bǔ)丁是彌補(bǔ)不了的。Rust最容易吸引的人群可能是C++程序員:因?yàn)?,一方面解決了不少C++的痛點(diǎn),另一方面Rust的很多特性其實(shí)有點(diǎn)復(fù)雜也有點(diǎn)門(mén)檻的。這些特性背后的動(dòng)因有C++背景的程序員是非常容易理解,也是不少C++程序員夢(mèng)寐以求的。相對(duì)而言,其他語(yǔ)言背景出身的程序員,對(duì)Rust的共鳴性遠(yuǎn)遠(yuǎn)沒(méi)有C++程序員強(qiáng)烈。猜測(cè)Rust會(huì):a.蠶食掉一定的C++份額。一些可能本會(huì)選擇C++開(kāi)發(fā)的新項(xiàng)目,可能會(huì)選擇Rust。b.蠶食掉一定的Java份額。有些項(xiàng)目選擇JVM系是由于C++開(kāi)發(fā)太復(fù)雜,同時(shí)該項(xiàng)目對(duì)性能又有一定的要求。那么Rust出現(xiàn)以后也會(huì)蠶食掉一定的此類(lèi)項(xiàng)目。c.蠶食掉一定的golang份額。不滿意gc(即使1.5改善了,gc的先天問(wèn)題是無(wú)法徹底解決的),不滿意泛型,不滿意性能的一部分項(xiàng)目。不過(guò)也要依賴(lài)于Rust未來(lái)并發(fā)的解決方案是否足夠理想了。1.0這種是沒(méi)戲的。d.移動(dòng)端Rust從自己實(shí)力上說(shuō)是夠的。不過(guò)這個(gè)真的要看出品移動(dòng)端設(shè)備的“爹”的意思了。Rust自身有一些優(yōu)勢(shì)非常明顯,在這些領(lǐng)域是很有競(jìng)爭(zhēng)力的。Rust社區(qū)一定要重視IDE開(kāi)發(fā)環(huán)境,花費(fèi)精力出eclipse/intellji/vs的高質(zhì)量的IDE插件,對(duì)于推廣和流行大有幫助。只要Rust社區(qū)不要犯D語(yǔ)言曾經(jīng)反復(fù)折騰的毛病,能像golang社區(qū)那樣基礎(chǔ)做的不錯(cuò)并且工程質(zhì)量?jī)?yōu)秀,那么未來(lái)Rust出幾個(gè)殺手級(jí)的應(yīng)用,前途還是很可期的。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)安圖免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
我并沒(méi)有什么編程的經(jīng)驗(yàn),覺(jué)得編程實(shí)在是太復(fù)雜了,不喜歡去研究太多,對(duì)這個(gè)也不怎么懂,只能說(shuō)自己是個(gè)半吊子,就是所掌握的知識(shí),也是東拼西湊的,朋友和我說(shuō)點(diǎn)兒,自己去書(shū)上看一點(diǎn)兒,只能說(shuō)根據(jù)自己的體驗(yàn)給出一些體會(huì)吧。
Rust的優(yōu)勢(shì)是:
1、Rust把安全、精確的內(nèi)存管理作為一切的中心放在首要的位置。
2、Rust同時(shí)擁有特別強(qiáng)的控制性和特別強(qiáng)的安全性。
3、Rust語(yǔ)言通過(guò): 優(yōu)秀的類(lèi)型系統(tǒng)設(shè)計(jì)、 嚴(yán)格的編譯器靜態(tài)審查、 配合程序員局部核對(duì)、加上少量的運(yùn)行時(shí)校驗(yàn),保障了內(nèi)存安全。
4、Rust的語(yǔ)言特別的復(fù)雜,導(dǎo)致學(xué)習(xí)曲線比較陡峭,對(duì)于初學(xué)者來(lái)說(shuō)難度較大。但學(xué)通之后將終生受益。
5、效率高,速度特別的快
6、 支持范型
7、 社區(qū)活躍度很高,更加的強(qiáng)調(diào)了社區(qū)的作用。
8、Rust 有更強(qiáng)的語(yǔ)義,更容易捕獲錯(cuò)誤的邏輯,編譯器直接檢查出你代碼中的不安全的部分
Rust的劣勢(shì)是:
1、 語(yǔ)言相對(duì)來(lái)說(shuō)比較復(fù)雜,對(duì)于新手來(lái)說(shuō),讓新手摸不著頭腦。
2、還不算太穩(wěn)定。
其實(shí)我覺(jué)得什么代碼啊編程啊這些東西還是比較適合理工的學(xué)生去研究,我一看腦袋就大,完全不明白在講什么。我大概了解的就是這些,語(yǔ)言的話大家可以多方面的去了解,也不是說(shuō)有缺點(diǎn)就是不好,看配置看個(gè)人吧,每個(gè)人習(xí)慣不一樣,也許有的人用不穩(wěn)定的還覺(jué)得挺好呢,有的人就喜歡比較完美的,在我看來(lái)編程這個(gè)東西真的是很復(fù)雜,會(huì)有很多的代碼,這些代碼弄得我自己頭都大了,有的時(shí)候還得去惡補(bǔ)一下。
Python 是腳本語(yǔ)言,也就是中間件語(yǔ)言,其內(nèi)核仍然是純 c 的性能表達(dá)的,而主要性能消耗在腳本的實(shí)時(shí)編譯上。而對(duì)比c,同樣的功能,python可以表達(dá)比c更加精煉,當(dāng)然犧牲了一些性能。如果確實(shí)對(duì)某個(gè)模組性能不滿意,還可以使用 c 編寫(xiě) Python 模塊為其加速。面對(duì)一些并不需要過(guò)多性能而可以獲得更快捷的開(kāi)發(fā)速度,Python的優(yōu)勢(shì)完全可以蓋過(guò)“劣勢(shì)”??梢哉f(shuō),Python基本完美。例如知乎就是使用 Python 制作的。Google 的許多頁(yè)面也是使用 Python 進(jìn)行渲染的。
最近有很多同學(xué)問(wèn)我,我是一個(gè)零基礎(chǔ)的小白,到底學(xué)習(xí)哪一種語(yǔ)言比較好?作為一個(gè)寫(xiě)了十年代碼程序員,用過(guò)七種語(yǔ)言的我來(lái)說(shuō),必須要強(qiáng)調(diào)一下,語(yǔ)言只是一種工具,當(dāng)你真正理解了要做的事,選一個(gè)順手的就行。跟工具一樣,哪天有新的好用的語(yǔ)言出來(lái),把舊的扔掉就好。
我今天寫(xiě)這篇文章的目的是想給大家一個(gè)參考。
決定用什么語(yǔ)言的因素有有很多,比如性能,內(nèi)存占用,開(kāi)發(fā)難度,運(yùn)維難度,目標(biāo)平臺(tái),可執(zhí)行文件大小,代碼可維護(hù)性,項(xiàng)目周期,項(xiàng)目規(guī)模,招聘難度,團(tuán)隊(duì)構(gòu)成,歷史遺留問(wèn)題,甚至派系斗爭(zhēng)等。
比如騰訊就有大量歷史遺留的C和C++的服務(wù)器代碼,畢竟20年前沒(méi)得選。又比如空降技術(shù)負(fù)責(zé)人可能會(huì)為了讓自己人上位,讓自己團(tuán)隊(duì)出成績(jī),選擇用其他語(yǔ)言或者框架對(duì)本來(lái)工作良好的系統(tǒng)進(jìn)行重構(gòu)。
下面開(kāi)始聊語(yǔ)言
Python
先說(shuō)python,是因?yàn)檫@個(gè)語(yǔ)言小學(xué)生都開(kāi)始學(xué)習(xí)了,以后不會(huì)python要被小學(xué)生欺負(fù)了。語(yǔ)法簡(jiǎn)單,除了前端幾乎萬(wàn)能,可用的庫(kù)極其豐富,能想到的功能幾乎都有現(xiàn)成的庫(kù)可以用。不管是搞爬蟲(chóng),做人工智能,機(jī)器學(xué)習(xí),數(shù)據(jù)分析,還是自動(dòng)化運(yùn)維,自動(dòng)化測(cè)試,python幾乎都是首選。不想當(dāng)程序員還想學(xué)習(xí)一門(mén)語(yǔ)言的話,學(xué)習(xí)python就沒(méi)錯(cuò)了。缺點(diǎn)是慢,但是能讓機(jī)器累的事,何必讓人來(lái)累。
PHP
PHP是世界上最好的語(yǔ)言,可能這個(gè)已經(jīng)成為很多程序員的梗。
我沒(méi)用php開(kāi)發(fā)過(guò)大型項(xiàng)目,自己做東西的感覺(jué)是這語(yǔ)言非常簡(jiǎn)單,以前用的人很多,招聘容易,但是不適合做復(fù)雜的項(xiàng)目。現(xiàn)在用得越來(lái)越少了,迅雷以前有不少運(yùn)營(yíng)活動(dòng)頁(yè)面是PHP做的。
C
C的語(yǔ)法足夠簡(jiǎn)單,應(yīng)該是最接近機(jī)器語(yǔ)言的高級(jí)語(yǔ)言,適合編寫(xiě)操作系統(tǒng)底層,驅(qū)動(dòng)程序,硬件相關(guān)的程序以及看重性能的程序。由于過(guò)于簡(jiǎn)單,構(gòu)建大型程序的復(fù)雜度非常高,建議想往研發(fā)方向走的同學(xué)都學(xué)習(xí)一下C語(yǔ)言。
可以對(duì)計(jì)算機(jī)一些底層原理了解,比如指令執(zhí)行過(guò)程,內(nèi)存管理,異常,多線程,編譯過(guò)程等又更深層次的了解。掌握C語(yǔ)言再學(xué)習(xí)其他語(yǔ)言會(huì)變得很輕松,學(xué)習(xí)破解也有幫助,畢竟匯編基本都可以反編譯出C代碼。
C++
C++是一個(gè)糟糕的語(yǔ)言,這不是我說(shuō)的,這是Linux之父說(shuō)的。我自己用C++四五年時(shí)間,越到后面就感覺(jué)這句話越有道理。
首先C++的強(qiáng)大是毋庸置疑的,但是作為一個(gè)跟C一樣偏底層的語(yǔ)言,如果不理解寫(xiě)的代碼背后到底發(fā)生了什么事,如果出了錯(cuò),你是永遠(yuǎn)不可能知道錯(cuò)在哪里的。
一個(gè)沒(méi)有垃圾回收的語(yǔ)言,不用智能指針很容易導(dǎo)致內(nèi)存泄漏,錯(cuò)誤的用了智能指針不但內(nèi)存泄漏之后不好解決,還容易導(dǎo)致提前釋放等問(wèn)題。
C++支持強(qiáng)制類(lèi)型轉(zhuǎn)換,如果轉(zhuǎn)換前后的內(nèi)存結(jié)構(gòu)不一樣,很有可能導(dǎo)致各種隱性問(wèn)題。還有Java之類(lèi)非原生語(yǔ)言的異常處理都是語(yǔ)言自定義的異常,而C和C++中的異常很多都是操作系統(tǒng)層的異常。
Windows下一個(gè)簡(jiǎn)單的try catch,你覺(jué)得可以抓到try中所有的異常,但是由于異常處理函數(shù)的指針保存在棧上,這時(shí)一個(gè)棧溢出可能直接導(dǎo)致異常處理函數(shù)指針被覆蓋,異常會(huì)出現(xiàn)在你意想不到的地方。微軟有大神曾說(shuō)過(guò),想你的代碼后續(xù)可維護(hù)就刪掉代碼中所有的try catch。
又由于語(yǔ)言非常底層,當(dāng)程序出現(xiàn)底層崩潰的時(shí)候,想解決掉這個(gè)崩潰往往要讀一些匯編,這時(shí)候如果使用了大量的模板,比如stl和boost,那生成的匯編幾乎完全不可讀??催^(guò)stl代碼的人應(yīng)該都知道這玩意兒寫(xiě)的有多晦澀,就導(dǎo)致了你想用一個(gè)C++庫(kù),如果不了解這個(gè)庫(kù)的實(shí)現(xiàn)原理,那大概率會(huì)出錯(cuò)。
C++的復(fù)雜度又讓你很難真的理解那個(gè)庫(kù)的原理,結(jié)論就是C++強(qiáng)大,但是必須用的人也強(qiáng)大。C++直到現(xiàn)在還在瘋狂的增加特性,我用了四五年我自己都不敢說(shuō)自己會(huì)玩C++,能用其他語(yǔ)言就優(yōu)先考慮其他的,把C++作為最后的選項(xiàng),不建議新手學(xué),除非你的目標(biāo)領(lǐng)域必須使用。
Rust
Rust是為了解決C和C++的各種問(wèn)題而出現(xiàn)的語(yǔ)言,性能接近C++,通過(guò)所有權(quán)限,不用垃圾回收就解決了生命周期管理。有包括管理,又有極其嚴(yán)格的編譯器檢查,能編譯通過(guò)的代碼就不會(huì)有大問(wèn)題,編譯器直接把水平不夠的新手擋在了門(mén)外,通過(guò)解決出問(wèn)題的人是方式,從根本上解決了C++的問(wèn)題。
我第一次用rust寫(xiě)個(gè)小程序就跟編譯器較了一天的勁。它的缺點(diǎn)就是學(xué)習(xí)難度太大,語(yǔ)言太小眾,庫(kù)太少,很多輪子都要自己造。但是隨著微軟之類(lèi)的大廠使用,相信之后發(fā)展會(huì)比較好,新項(xiàng)目如果需要C或者C++可以?xún)?yōu)先考慮rust。
Java
我現(xiàn)在主要也是一個(gè)Java程序員,對(duì)于Java這個(gè)語(yǔ)言我并沒(méi)有什么很特別的感覺(jué),配套設(shè)施完善,什么都能干,體驗(yàn)非常贊,就是內(nèi)存占用有點(diǎn)難看。想搞安卓考法的必修,阿里有大量的服務(wù)器項(xiàng)目使用Java。
唯一想吐槽的是gradle這個(gè)構(gòu)建系統(tǒng),版本問(wèn)題搞得很頭疼。
JavaScript
js是前端的必修課,沒(méi)得選,然而node讓js也萬(wàn)能了。用node做過(guò)后端項(xiàng)目后,感覺(jué)動(dòng)態(tài)類(lèi)型語(yǔ)言還是不太適合,由此帶來(lái)的低級(jí)錯(cuò)誤很多,雖然可以用typescript解決,但是最終還要編譯成js,無(wú)法直接調(diào)試。由于沒(méi)有原生的多線程支持,利用cpu也只能通過(guò)開(kāi)多個(gè)進(jìn)程的方式。小項(xiàng)目的后端做著玩還可以,大點(diǎn)的還是考慮Java或者是go吧。
Lua
Lua是極其輕量的語(yǔ)言,語(yǔ)言特性接近js,runtime非常小。作為一個(gè)腳本語(yǔ)言,性能出色,內(nèi)存占用低,很適合各種嵌入式設(shè)備或者插件系統(tǒng)。
Go
這玩意兒一定是谷歌為了解決自己后端項(xiàng)目中遇到的問(wèn)題而開(kāi)發(fā)的語(yǔ)言,各種特性直戳痛處。語(yǔ)法簡(jiǎn)單,規(guī)范嚴(yán)格,這就讓不管什么水平的開(kāi)發(fā)寫(xiě)出來(lái)的代碼差距都不會(huì)太大。
靜態(tài)類(lèi)型,沒(méi)有默認(rèn)參數(shù),沒(méi)有異常處理,可以降低犯低級(jí)錯(cuò)誤的概率。編譯成原生代碼,可內(nèi)嵌C代碼,原生支持協(xié)程和多線程,可以保證性能,支持跨平臺(tái)編譯,輸出單文件方便部署,這些優(yōu)點(diǎn)帶來(lái)的問(wèn)題是Go的指向性太強(qiáng),只適合做高并發(fā)api類(lèi)的后端服務(wù)。
想用Go開(kāi)發(fā)其他任何領(lǐng)域都會(huì)覺(jué)得特別別扭,類(lèi)似C的語(yǔ)法過(guò)于簡(jiǎn)單,又沒(méi)有泛型,導(dǎo)致很多功能都顯得很啰嗦。但由于Go解決了部署問(wèn)題,跨平臺(tái)問(wèn)題,降低了研發(fā)人員的水平要求,降低了犯錯(cuò)誤的概率。
關(guān)于這些語(yǔ)言的性能沒(méi)有絕對(duì)的排序,但根據(jù)我做項(xiàng)目帶團(tuán)隊(duì)和面試的經(jīng)驗(yàn),絕大多數(shù)的程序員的水平都還碰不到語(yǔ)言的性能瓶頸。一般來(lái)說(shuō)對(duì)語(yǔ)言的理解以及多線程,算法,網(wǎng)絡(luò),數(shù)據(jù)庫(kù),緩存。硬件甚至業(yè)務(wù)的理解都比語(yǔ)言的性功能影響更大。
再次強(qiáng)調(diào),語(yǔ)言只是工具,只有適不適合,沒(méi)有好與不好?;A(chǔ)強(qiáng)大,用哪個(gè)都不怕,基礎(chǔ)太差,用什么都尷尬。
只是會(huì)語(yǔ)法并不是掌握了這門(mén)語(yǔ)言,要知道程序背后發(fā)生了什么。比如C++的對(duì)象模型,Java的虛擬機(jī),垃圾回收,Go的協(xié)程,js的promise,rust怎么編譯通過(guò)等等。
基礎(chǔ)是一門(mén)語(yǔ)言的核心,不管學(xué)習(xí)哪一門(mén)語(yǔ)言都要重點(diǎn)學(xué)好基礎(chǔ)。