在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 參與的其他開源專案。
相關文章
- [專案積累]後端專案之Koa2經驗整理後端
- Redis在專案中合理使用經驗總結Redis
- 三個Rust程式碼庫的經驗分享:何時開始使用Rust? - convexRust
- 分享我在前後端分離專案中Gitlab-CI的經驗後端Gitlab
- 專案經驗分享:在 JustAuth Plus 中新增 HTTP API 的登陸方式HTTPAPI
- Matlab專案經驗分享-去除震盪點Matlab
- Go專案實戰之驗證碼的生成和使用(易擴充套件方式)【goshop開源專案 | 20220516更新】Go套件
- 有php轉go專案經驗者優先?PHPGo
- 基於 SAP BTP 平臺的 AI 專案經驗分享AI
- 【經驗分享】如何守住專案管理的質量“底線”?專案管理
- 手記系列之七 ----- 分享Linux使用經驗Linux
- Polymer使用經驗分享
- 資深架構師的經驗分享——軟體專案開發和決策架構
- 2010.03.23 MSN群討論之服裝行業的ERP專案實施經驗分享行業
- 【專案經驗】--環保專案
- 「Vue實戰」武裝你的專案 - 開發經驗分享Vue
- 小程式·雲開發 專案開發經驗分享
- Java,Go和Rust之間的比較 - DexterJavaGoRust
- 軟體測試外包專案經驗分享:歷經7個月的OA系統專案驗收測試情況
- 軟體開發專案管理經驗分享:專案全生命週期管理專案管理
- java/go/python/go/rust/nodejs/c/c++基礎知識分享JavaGoPythonRustNodeJSC++
- 專案實戰之gradle在實際專案中的使用Gradle
- 《不可思議之夢蝶》專案從PC版移植到Nintendo Switch經驗分享
- Spark 雜記1-專案使用經驗Spark
- 波音公司架構師分享MDM專案成功經驗FJ架構
- 【專案管理經驗分享】為什麼專案計劃難以完美執行?專案管理
- Go語言專案編譯之後找不到配置檔案Go編譯
- 專案實戰之Rxjava、RxBinding在實際專案中的使用RxJava
- 前端寫專案經驗前端
- 十年網際網路專案實戰經驗分享:專案經理成長之路的三個層次
- 過來人的自學python經驗分享Python
- 在Go和Python之間通過ActiveMQ通訊GoPythonMQ
- 經驗&教訓分享:我的第一個機器學習專案機器學習
- 8Manage PMO:多專案管理工作經驗分享專案管理
- Laravel 專案中 PCM 音波檔案轉 WAV 音訊檔案案例【經驗分享】Laravel音訊
- Cloudflare 從 PHP 到 Go:遷移與經驗分享CloudPHPGo
- 在非Laravel專案中使用Validator驗證器Laravel
- 建立“防洪系統” ! 製作人分享做好專案前期管理的10條經驗