為什麼選擇Rust作為物聯網的程式語言? - Ash Moosa
為新產品選擇程式語言是一項重要的戰略決策。它影響很多事情,對招聘,培養甚至產品的可行性都有長期影響。
首先要考慮的是語言是否適用於您要解決的特定問題陳述。重要的問題是:
- 您的特定用例的語言是否合適?
- 它會效能表現嗎?
- 它會在目標平臺上執行嗎?
這些應該是主要問題。但是還有其他因素可能影響您的決定,例如:
- 如何選擇特定語言會影響您從理念到現實的週轉時間?
- 使用特定語言有哪些成本優勢?
- 解決你可能偶然發現的新問題有多容易?
牢記這些問題,本文將嘗試解釋我們為新產品選擇Rust的原因。
用例
我們正在建立一種裝置,用於使用來自各種感測器的資料,並通過Web和移動應用程式提供實時分析和智慧幫助。我們需要一種語言,其速度足以允許最小的實時延遲並使用SoC裝置的有限資源。
以下是我們評估專案程式語言的方法。
1.效能
比較實際應用程式的跨語言效能是棘手的。我們通常沒有對多種語言擁有相同的專業知識,並且效能受到程式設計師選擇使用的演算法和資料結構的影響。但人們普遍認為Rust的表現與C ++相當。並且比其他直譯器或基於JIT的語言(如Lua或Python)執行得更好。資源
2.併發
如上面的用例所述,我們希望從多個感測器實時處理資料。我們的目標平臺SoC裝置使用基於ARM的CPU,通常有4個以上的核心。我們想要利用所有CPU核心,這意味著擁有多執行緒支援非常重要。
Lua沒有本機多執行緒支援。雖然有第三方解決方法,但這些方法的效能和可靠性值得懷疑。另一方面,Rust內建了對多執行緒的支援,它的所有權和借用規則幫助我們編寫非常安全的併發程式碼。
3.記憶安全
動態型別語言為您提供了很大的靈活性。型別更改不需要通過程式手動傳播。它還為您提供了更多的心理靈活性,因為您可以在轉換,操作和演算法方面進行更多思考。靈活性使您可以更快地移動,快速更改內容,並以更快的速度進行迭代。但它需要付出代價。錯過潛在問題要容易得多,這些問題通常很難除錯。此外,這些功能通常會帶來效能損失。
另一方面,在靜態型別語言中,在開發過程的早期階段捕獲了大量錯誤,靜態型別通常會導致編譯程式碼執行得更快,因為當編譯器知道正在使用的確切資料型別時,它可以生成優化的機器程式碼。靜態型別也可用作文件。
Rust超越了這些點。Rust非常嚴格且迂腐的編譯器會檢查您使用的每個變數以及您引用的每個記憶體地址。它避免了可能的資料競爭條件,並通知您未定義的行為。
下圖右側部分顯示了併發和記憶體安全問題。這些是最複雜和不可預測的錯誤類,從根本上不可能進入Rust的安全子集。此外,所有這些型別相關的錯誤都是危險的,並導致各種安全漏洞。
型別安全是Rust最大的賣點之一,也是Rust在StackOverflow調查中連續3年成為最受歡迎的語言的原因。
Rust實現這一壯舉的方式是使用變數所有權的概念。在Rust中,每個值都具有“擁有作用域”,並且傳遞或返回值意味著將所有權轉移到新作用域。您可以訪問您呼叫的函式,這稱為“借用”。Rust確保這些租約不會超過借來的物件。這不僅使它非常安全,而且還可以幫助您正面解決併發問題,因為記憶體安全和併發錯誤通常會導致程式碼訪問資料時不應該這樣做。
4. 開發經驗
Rust有一個陡峭的學習曲線。其中大部分是由於我們上面討論過的“所有權”和“借用”概念。與使用Lua或Python等語言相比,這使得Rust難以學習並且更耗時。它需要人們非常瞭解有關記憶體分配和併發性的基本計算原則,並且它要求您在實現時牢記這些原則。這應該是任何語言的情況,但特別是在Rust中,編譯器明確強制您編寫最佳的記憶體安全程式碼。
儘管您正在使用C ++進行手動記憶體管理,但Rust有許多功能和便利,幾乎讓它感覺像是一種高階語言。而且Rust有很多抽象,不再讓它感覺像是手動記憶體管理。
低階別控制和高階別安全性使開發人員能夠更好地控制效能,而無需承擔學習C / C ++的負擔,或承擔錯誤的風險。
Rust還通過其強大的庫(如貨物測試)促進在程式內編寫測試。與Bitbucket Pipelines相結合,可以非常輕鬆地設定持續整合和發貨程式碼。
結論
基於以上所述,Rust是我們專案的不錯選擇。當您想要實現資源佔用較少的高效能併發系統時,程式語言的選擇是有限的。基於直譯器的語言往往在高併發和低資源環境中表現不佳。系統程式語言是此類用例的理想候選者。
但是,當您沒有資源約束並且不需要高併發性或使用其他機制(如事件迴圈)實現時,基於直譯器的語言可能會更好。
C / C ++是系統程式語言的聖盃。但是,在StackOverflow Surveys中, C&C ++也是最可怕的語言之一。對於來自其他更高階語言的新程式設計師來說,接近C / C ++很難。學習曲線非常陡峭。大約有74種不同的構建系統和28個不同包管理器的拼湊框架,其中大多數只支援某個平臺/環境,並且在它之外是無用的。經過30多年的發展,新的程式設計師對他們投入太多了。
另一方面,Rust相對容易接近,擁有相當大的社群,沒有數十年的技術債務,但卻提供了相對的表現。記憶體安全性和簡單的併發性只是增加了好處。
相關文章
- 為什麼程式設計初學者會選擇 Python 作為入門語言?程式設計Python
- 為什麼選擇使用Rust?Rust
- Aembit為什麼選擇 Rust?Rust
- 程式語言這麼多,為什麼建議選擇Python?Python
- Golang vs Rust 為後端選擇哪種語言?GolangRust後端
- [精選] 為什麼要選擇Go語言作為PHP的黃金組合?而不是Java或PythonGoPHPJavaPython
- 嵌入式開發為什麼選擇C語言?C語言
- 為什麼機器學習會選擇Python語言?機器學習Python
- 為什麼選擇Java語言用作高頻交易?-JadJava
- 為什麼爬蟲語言選擇Python而不是Java?爬蟲PythonJava
- [譯] Rust 語言案例研究:社群使得 Rust 成為 npm 的簡單選擇RustNPM
- 何為程式語言?為什麼要學C語言?C語言
- 作為一門程式語言 Python為什麼如此受歡迎Python
- 為什麼Dark不選擇Rust/Clojure/Haskell/Scala? - darklangRustHaskell
- 為什麼選擇 Intellij IDEA 作為日常開發工具IntelliJIdea
- Rust是物聯網平臺語言? - y|sndrRust
- 物聯網路卡為什麼那麼火
- 進入IT行業,為什麼要選擇學習Python語言?行業Python
- 為什麼我不選擇React、Vue.js作為SAAS網站的前端框架ReactVue.js網站前端框架
- 為什麼選擇.NETCore?NetCore
- 為什麼機器學習會選擇Python語言?很簡單!機器學習Python
- 為什麼爬蟲語言大多都會選擇Python而不是Java?爬蟲PythonJava
- Rust for Linux 新補丁:為 Linux 核心增加對 Rust 作為第二語言的支援RustLinux
- 為什麼會有這麼多的程式語言?
- 為什麼選擇Linux作為伺服器呢?Linux優點!Linux伺服器
- 為什麼自制指令碼語言是程式語言的最高境界?指令碼
- 物聯網路卡為什麼那麼受歡迎
- 為什麼選擇Guice框架GUI框架
- 你知道為什麼物聯網需要LPWAN嗎?
- 為什麼選擇b+樹作為儲存引擎索引結構儲存引擎索引
- 2020學什麼好?如果只能選擇一門程式語言你會怎麼選擇?
- 如何選擇物聯網路卡
- 為什麼CentOS7選擇XFS作為預設的檔案系統?CentOS
- PHP熟手使用Rust作為後端開發語言PHPRust後端
- Python為什麼會成為人工智慧開發的首選語言?Python人工智慧
- 我們為何選擇 Cilium 作為 Kubernetes 的網路介面
- 為什麼基礎協作是物聯網革命成功的關鍵驅動力
- 物聯網路卡的選擇小技巧