在Python和Go项目之后使用Rust的经验分享 - scaleway

解道jdon 2021-11-25 15:38:52
Python 项目 使用 rust 之后

我于 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 中编码更有效!

 

体验报告

对于使用新语言的第一个项目来说,这种体验很好。编译失败时的错误信息非常明确,通常直接包含问题的解决方案。这些库通常有很好的文档,比如reqwestserdestructopt在我的例子中,这使得它们易于使用,并且与您从 Python 等动态语言中可以获得的相比,各种 IDE 帮助的自动完成功能(类型提示不是精确到真正的静态类型)

当您来自其他语言时,将测试作为子模块直接包含在每个 Rust 文件中的事实有点令人惊讶。但它易于管理,并且来自cargo的集成测试系统是用户友好的。

我在内存管理方面遇到了一些麻烦,因为当您习惯于使用垃圾收集器(如 Python 或 Go)使用语言进行编码时,您已经习惯了编译器给出一些提示但并不总是指向问题的根源。因为这对我来说不是一个持续存在的问题,所以我不时使用 .clone() 以避免过多地增加复杂性。

我还喜欢这样一个事实,即有 Cargo 插件可以直接创建 deb 和 rpm 档案,以便在各种 Linux 发行版上轻松分发应用程序。

这是一次很好的体验,我喜欢使用 Rust,我将在下一个项目中再次使用它。可能有些代码直接在 Cisco Nexus 设备上运行,以避免使用旧的 Python 2。Rust 将成为团队中的默认语言之一,因为我们一直对其功能感到满意。

由于不必手动添加所有新设备,开发此工具为我们节省了大量时间和麻烦。该项目可在此处获得,旁边还有 Scaleway 参与的其他开源项目。

版权声明
本文为[解道jdon]所创,转载请带上原文链接,感谢
https://www.jdon.com/57757

  1. Using Python 3 to make practical software for drawing modification
  2. About HTML (acceptable to Python)
  3. Python集成學習:自己編寫構建AdaBoost分類模型可視化决策邊界及sklearn包調用比較
  4. PYTHON用LSTM長短期記憶神經網絡的參數優化方法預測時間序列洗發水銷售數據
  5. Python Integrated Learning: Writing and Constructing adaboost Classification Model Visualized decision Boundary and sklearn package Calling Comparison
  6. Python prédit les données de vente de shampooing de séries chronologiques en utilisant la méthode d'optimisation des paramètres du réseau neuronal de mémoire à court et à long terme lstm
  7. [zero basics of Python to introduction] a prerequisite for Python preparatory knowledge -- basic coding specification of Python
  8. OpenCV对比度亮度变换竟能用来去水印(附Python/C++源码)
  9. [zero basics of Python to getting started] a prerequisite for Python preparatory knowledge -- installing the visualization tool pycharm
  10. The test modifies main.py in micro python
  11. Microphoton experimental circuit board based on mm32f3273 - does not work normally
  12. Run micropathon on mm32f3273 to test performance
  13. Design mm32f3277 micro Python experimental board with SD card
  14. Mm32f3277 corresponding interface files during microphoton migration
  15. Mm32f3277 microphoton experimental board design and software testing
  16. Making and testing mm32f3277 microphoton minimum circuit board
  17. Download mm32-link program automatically with Python simulated mouse
  18. A curriculum of "artificial intelligence Python machine learning and deep learning"
  19. Test the basic functions of mm32 microphoton test circuit board
  20. Test the basic functions of the mm32f3277 micro Python development board flying one by one
  21. Debugging mm32f3277 from zhufei, transplanted with micro Python development board
  22. Recognizing numbers using OpenCV and python
  23. 真的太香了,Python速查表终于出中文版了
  24. Django REST Framework(DRF)教程:快速入门
  25. python django objects filter过滤查询:startswith year
  26. Data encapsulation of Excel test cases in Python
  27. 学员管理系统python
  28. 肝了一夜,8000字概括精髓,pandas必知必会50例!
  29. Python竟然可以画漫画!漫画版的故宫导游图,来袭!
  30. Networkx graph theory Dijkstra algorithm shortest path implementation, Python
  31. Draw a HelloWorld with Python turtle Library
  32. 运行django的服务器内存使用偶尔跳高一点,重启服务马上下来,是内存泄露吧
  33. Basic usage of Python tqdm module in machine learning training
  34. Python -- basic usage method and basic template of argparse module
  35. python-sockertserver并发编程思想
  36. Programmation simultanée du serveur de sockets Python
  37. Vue+Django 旅游网项目 首页前端实现
  38. [learning notes] Python - pyecarts
  39. Python automated operation and maintenance -- actual combat (I)
  40. Classic usage of pandas: iloc and LOC of data filtering
  41. Python 多分支语句的三种结构
  42. Calendar module of Python time series
  43. Python 输出指定范围的闰年
  44. A super easy to use Python standard library. It's great to operate directories and files
  45. Fatal Python error: init_ fs_ encoding: failed to get the Python codec of the filesystem encoding
  46. Using Python to obtain a video address is as simple as
  47. #yyds干货盘点# 6. Python 元组,不可变的列表,滚雪球学 Python
  48. Yyds Dry Inventory # 6. Python tuples, invariant List, snowball Learning Python
  49. You cannot enter the registration page using Django registration redux
  50. 笨办法学Python第十八天:更多文件操作
  51. Python编辑代码,帮个忙呗
  52. pandas转换object为int失败了,有人能解答吗
  53. python解释题,解释这串,所代表的意思
  54. 用python用while语句写1000以内能被5和9整除的数和个数
  55. #python 我写了一个“饭店”程序
  56. Comprehensive application of Python foundation -- Development
  57. Écrivez en python le nombre et le nombre d'entiers qui peuvent être divisés par 5 et 9 jusqu'à 1000 dans une instruction while
  58. You can learn Python articles without reading online classes (day 4)
  59. You can learn Python articles without reading online classes (the third day)
  60. You can learn Python articles without reading online classes (the next day)