Rust Learning Notes(一)

Rust Learning Notes(一)

3 人贊了文章

Rust Learning Notes

背景

編程語言從誕生至今不過幾十年,但它對人類的生活影響已經無所不在了。無論你是直接編寫它的程序員,還是只是一個使用手機APP的普通用戶,它都對你生活的方方面面產生著巨大的影響。

過去人類想要影響世界,往往是通過體力勞動,隨著生產力的進步,低級的體力勞動逐漸變少,更多情況下是通過操控機器來完成複雜的勞動。如今,機器能夠自動完成更多任務,這又是為什麼呢?機器晶元中的代碼成為了機器的靈魂,讓它能夠自動完成各種任務。

人類能夠通過代碼將創意和想法注入機器中,讓機器去解決各種問題,這種改變世界的方法將會長久存在,除非有一天機器自身就有創意和想法能夠幫助人類解決各種問題,這一天顯然不會那麼快到來,並且如果到來了對於人類來說還不一定是好事。因此,雖然行業可能會有興衰,但編碼這個技能將會在未來幾十年甚至幾百年都會長盛不衰,它依舊會影響著人類的方方面面。

Rust就是在這樣的大環境中誕生的,那麼為什麼要創造Rust呢?它有什麼特別之處嗎?接下來則簡單講講編程語言發展史中的幾個重要成員,再來回答這兩個問題。

C、C++:這兩個語言在人類編程史上算是畫上了重重的一筆,它們高效、易用,廣泛地被運用於人類生產活動的各個領域。由於它們沒有垃圾回收機制,並且相對於當今其它語言需要開發者花更多心思來管理計算機資源,因此這兩門語言的特色便是易懂難精,並且很多情況下相對於其它語言需要用開發效率和成本來換取運行效率,但在某些場景中這些犧牲是值得的。

JAVA:世間有太多語言都是死在了替代JAVA的路上。JAVA的成就並非是一個巧合,在那個年代它加入了垃圾回收機制,大大降低了程序員的開發門檻,並且提出了一份代碼多平台運行的目標,因此雖然其最初面世時性能低下、問題頗多,但是目標的正確致使它在後來互聯網的興起中大放光彩,如今大部分JAVA程序員仍是在windows上開發,項目卻部署在linux伺服器中。而它最初的目標——一次開發多平台運行的思想成了後來新的編程語言的標配。

Ruby:腳本語言中有太多經典,比如Python、Nodejs,但是Ruby是我必須提及的一個腳本語言,因為它的出現讓人們突然意識到,代碼竟然可以這樣寫,包管理竟然可以這樣做,開發一個web網站竟然可以這樣簡單、便捷。它那豐富的語法糖讓你可以優雅而簡潔地實現JAVA中需要好幾行才能實現的功能,它的依賴包管理讓你不用再去滿世界尋找"jar"包,它的web開發框架Rails讓你可以一鍵生成一個web項目,並且用極其優雅的方式來處理客戶端請求和資料庫操作。它的出現,讓其它語言也不得不去思考更好的項目管理方式和實現更好的開發框架。

Erlang:函數式編程語言就像影子一般,很少有人意識到它的存在,但它卻無處不在,Erlang就是這樣一門語言。Erlang天生就是為並發和分散式而生的,變數不可變和依靠消息完成進程間通信的機制使得其應對並發即安全又高效,其進程與外部世界之間的通訊使用和進程與進程間相同的消息傳送機制使得分散式開發更為容易。Erlang的熱代碼升級和高容錯能力也為其在通信應用中加分不少。抽空學習一下函數式編程更有助於你打開編程世界中另一個層次的世界觀——原來寫代碼沒有那麼多理所應當,你所認為的理所應當在另一個世界觀中並非如此,由此明白這個世界中只有合適的理所應當,而沒有一個絕對的理所應當。

Golang:簡潔、高效、實用,雖算不上優雅,但就前邊三點特色足以使Golang贏得不少粉絲,並且能夠贏得JetBrains為其定製一款IDE,它必定是大趨勢之中的一個。Golang是一門在學習成本、開發效率、運行效率都具有足夠優勢的語言。它即效仿了Erlang的通信來完成"線程"間協作的功能,也保留了通過共享內存來完成"線程"協作的功能,並且新開一個"線程"對它來說極其簡單且代價低廉。從Golang的新手成長為老手的必經之路就是要明白哪種情況下使用通信協作,哪種情況使用共享內存協作,它們各有哪些注意事項,並且要學會管理好每個協程的生命周期。

Rust:在使用Golang之後,我有一段時間都認為即得開發效率和運行效率那還有什麼理由去學一門新語言呢?直到看到了Rust的簡介。Rust注重於三個方面:安全、速度、並發性,這三點似乎Golang都具備,但是它的實現完全不同,它沒有採用垃圾回收機制,並且是通過編譯時安全檢查來提升目前語言所關注的領域,同時消除一切數據競爭。沒有垃圾回收對於性能的提升可不止一點,但它的語法又能控制沒有垃圾回收所帶來的一系列問題?就此一點就足以使人感到好奇。但還能通過語法來控制並發所帶來的問題?這更加讓人覺得有意思了。

該學習記錄主要參考書是:Rust程序設計語言(第一版) 簡體中文版。感謝kaisery

推薦閱讀:

我是如何零基礎自學人工智慧(附十問十答)
樸素貝葉斯的python源碼實現
極大似然估計與最大後驗概率估計
GJquant-研報復現:興業證券基於月度效用的選股因子研究

TAG:深度學習DeepLearning | 機器學習 |