在Python和Go專案之後使用Rust的經驗分享 - scaleway
我於 2021 年 1 月加入 Scaleway,建立新的網路系統和自動化團隊,負責所有工具和基礎設施,以幫助網路工程師團隊。在這一點上,我主要使用 Python 和 Go 進行編碼,我正在尋找一個有用的、非關鍵的專案來開始試驗 Rust 並評估它是否對我們的內部堆疊開發感興趣。
Scaleway 在我們的日常工作中使用了許多不同的內部系統,並維護所有系統的正常工作。
我們長期使用的其中之一是著名的Netbox,作為我們的 DCIM/IPAM,用於管理我們所有的硬體庫存和 IP 定址計劃。我們最近部署了另一個鮮為人知的開源產品Netshot,以滿足我們的網路配置合規性和備份需求,同時也替換了我們舊的 RANCID,它只做配置備份並且更難維護。
由於 Netbox 是我們庫存的真實來源,而且我們有大量的網路裝置(交換機、路由器等)需要管理,因此在 Netshot 上手動新增所有現有和新裝置是不可能的每次我們在 Netbox 中新增一些東西時。
我們搜尋了可以將裝置從 Netbox 同步到 Netshot 的現有工具,但找不到任何東西。
我在 Python 和 Go 方面有很多經驗,但我想在一個新的非關鍵專案中試驗 Rust,對於這個專案是一個很好的候選。
Rust vs. Python vs. Go
我希望與 Rust 合作,因為它似乎是一種專注於安全性和良好效能的語言。
我喜歡使用靜態型別安全,IDE 可以用幾種語言幫助解決這個問題。但是由於 Python 的 IDE 在型別安全、重構和完成功能方面並不總是最佳的(它提供了一種帶有型別提示的靜態型別 - 但它沒有被強制執行,並不總是可用,因為 Python 是動態的,並不總是可預測的,它不提供最終任何真正的安全)。所以,我選擇了 Rust。
我還在尋找一種可以在單個無執行時二進位制檔案中編譯或打包的語言,這樣我們就不必管理任何 Python 或庫版本要求。
我喜歡泛型、可選型別、模式匹配和適當的錯誤管理等高階功能,所以 Rust 似乎比 Go 更合適。
- 如果該專案在 Python 上執行:必須在我們想要部署它的任何地方管理依賴項的麻煩,或者必須為它建立大量的容器映像 - 部署速度較慢且難以維護。
- 如果該專案在 Go 上執行,但錯誤管理不會那麼有效:Go 中缺少泛型有時也會讓你做一些骯髒的變通方法,而 Rust 會給你一些有趣的功能方法(模式匹配、強大的集合)庫包)。
總結:這個專案在 Python 或 Go 中的工作方式相同,但在 Rust 中編碼更有效!
體驗報告
對於使用新語言的第一個專案來說,這種體驗很好。編譯失敗時的錯誤資訊非常明確,通常直接包含問題的解決方案。這些庫通常有很好的文件,比如reqwest、serde和structopt在我的例子中,這使得它們易於使用,並且與您從 Python 等動態語言中可以獲得的相比,各種 IDE 幫助的自動完成功能(型別提示不是精確到真正的靜態型別)
當您來自其他語言時,將測試作為子模組直接包含在每個 Rust 檔案中的事實有點令人驚訝。但它易於管理,並且來自cargo的整合測試系統是使用者友好的。
我在記憶體管理方面遇到了一些麻煩,因為當您習慣於使用垃圾收集器(如 Python 或 Go)使用語言進行編碼時,您已經習慣了編譯器給出一些提示但並不總是指向問題的根源。因為這對我來說不是一個持續存在的問題,所以我不時使用 .clone() 以避免過多地增加複雜性。
我還喜歡這樣一個事實,即有 Cargo 外掛可以直接建立 deb 和 rpm 檔案,以便在各種 Linux 發行版上輕鬆分發應用程式。
這是一次很好的體驗,我喜歡使用 Rust,我將在下一個專案中再次使用它。可能有些程式碼直接在 Cisco Nexus 裝置上執行,以避免使用舊的 Python 2。Rust 將成為團隊中的預設語言之一,因為我們一直對其功能感到滿意。
由於不必手動新增所有新裝置,開發此工具為我們節省了大量時間和麻煩。該專案可在此處獲得,旁邊還有 Scaleway 參與的其他開源專案。
相關文章
- Android開發之專案經驗分享Android
- [專案積累]後端專案之Koa2經驗整理後端
- 一次非常成功的專案經驗分享和糟糕專案的對比
- Redis在專案中合理使用經驗總結Redis
- 專案經驗分享:在 JustAuth Plus 中新增 HTTP API 的登陸方式HTTPAPI
- 分享我在前後端分離專案中Gitlab-CI的經驗後端Gitlab
- 三個Rust程式碼庫的經驗分享:何時開始使用Rust? - convexRust
- 與你分享我在開發專案管理中的一些經驗 之測試管理薦專案管理
- 有php轉go專案經驗者優先?PHPGo
- Node API經驗與種子專案分享 (一)專案綜述API
- Matlab專案經驗分享-去除震盪點Matlab
- Android開發之ListView使用經驗分享AndroidView
- 經驗&教訓分享:我的第一個機器學習專案機器學習
- 【經驗分享】如何守住專案管理的質量“底線”?專案管理
- 基於 SAP BTP 平臺的 AI 專案經驗分享AI
- 資深架構師的經驗分享——軟體專案開發和決策架構
- 小程式·雲開發 專案開發經驗分享
- 手記系列之七 ----- 分享Linux使用經驗Linux
- 「Vue實戰」武裝你的專案 - 開發經驗分享Vue
- Java,Go和Rust之間的比較 - DexterJavaGoRust
- 專案分享一:在專案中使用 IScroll 所碰到的那些坑
- Polymer使用經驗分享
- 【專案經驗】--環保專案
- .net的經驗和心得分享
- 軟體開發專案管理經驗分享:專案全生命週期管理專案管理
- 軟體測試外包專案經驗分享:歷經7個月的OA系統專案驗收測試情況
- 《不可思議之夢蝶》專案從PC版移植到Nintendo Switch經驗分享
- 專案經理之專案經理的基本特徵特徵
- 專案經理之專案經理的選拔
- 經驗分享-20天輕鬆搞定一個6000的小專案
- 光鮮背後!聊聊Pokemon Go在使用者體驗上的優點和不足Go
- Spark 雜記1-專案使用經驗Spark
- python開發的專案學習 適合缺少python專案實戰經驗的人Python
- 過來人的自學python經驗分享Python
- 【專案管理經驗分享】為什麼專案計劃難以完美執行?專案管理
- java/go/python/go/rust/nodejs/c/c++基礎知識分享JavaGoPythonRustNodeJSC++
- 分享net面試題和經驗面試題
- Go語言專案編譯之後找不到配置檔案Go編譯