< 返回版块

rust 日报 babpstep 发表于 2024-01-09 23:27

这位高级开发者从他的第一个大型 Rust 项目中学到了什么

这篇文章是一位拥有十多年编程经验的高级顾问分享的,关于他在假期间使用 Rust 语言开发一个物联网(IoT)最小可行产品(MVP)的经历。作者之前主要使用 C++ 进行数据分析和可视化,并在过去四年里主要使用 Scala 进行开发。他将 Rust 视为 C++ 和 Scala 之间的一个实用的中间地带,并通过构建小型项目和领导每周的读书会来学习 Rust。

项目目标是构建一些资源消耗很少的服务,能够在 Java运行环境(JRE) 过大而不适用 Scala 或 Java 开发的环境中运行。这些服务应该能在网络上的不同节点上运行,并能够相互发现而无需硬编码的 IP 地址。服务之间应该能够相互发送和接收消息,并且系统中应该有一些模拟数据,可以进行可视化或至少导出到电子表格中进行可视化。

作者和另外两名开发者在五个工作日内完成了项目的基础部分,并在接下来的两周内独立完成了项目的其余部分。他们避免使用大型框架,以保持生成的二进制文件和容器尽可能小。项目的最终成果是四个二进制文件的大小在 3.6MB 到 4.8MB 之间,远小于 JRE 的 50-100MB。容器大小在 13.5MB 到 13.7MB 之间,也比 Scala 项目的容器小得多。

作者在项目中遇到了一些挑战,如跨线程数据共享时频繁使用 Arc<Mutex<...>>,以及在新线程中移动数据前需要克隆数据。最后,作者总结了他在这个项目中学到的一些经验教训,包括对未来 Rust 社区的期望和对其他 Rust 开发者的建议:

  • 不应该在所有的 Err 变体中使用 String。作者建议在开始产生错误时就构建错误枚举,以便库的用户能够在不必解析字符串消息的情况下处理错误;
  • 作者期待Rust社区能够解决在移动闭包之前显式克隆的问题,使其更加符合人体工程学;
  • 尽可能在公共数据类型上实现 PartialEq,crate 的用户可能会感谢你;
  • 不要害怕使用S: Into<String>而不是&str,虽然可能性能稍差,但更符合人体工程学;
  • 启用 clippy 的 unwrap_used 和 expect_used lint,以迫使自己直面错误场景,而不是将它们搁置以后处理

原文链接
github项目地址

2023 Rust 调查问卷填写即将截止

已经是最后可以填写调查问卷的一周了,欢迎没有填写问卷的小伙伴积极参与,并提出宝贵的建议。

问卷链接

egui 发布 0.25 版本

egui 是一个用 Rust 编写的易于使用的 GUI 库,它可以在 Web 和原生环境中运行,近日发布了 0.25 版本,来看看主要的更新内容:

重大变更:

  • 忽略额外的 SHIFT 和 ALT 键匹配修饰符
  • 替换Key::PlusEqualsKey::PlusKey::Equals
  • 移除WidgetTextGalleyWidgetTextJob
  • 重命名TextBuffer::replacereplace_with

新增了一些功能,在 Keyboard 方面有很多较为实用的更新:

  • 添加剪切、复制、粘贴等键盘快捷键
  • 添加Key::from_nameKey::ALL
  • 用小部件后备颜色替换Color32::PLACEHOLDER
  • ...

还包括了一些别的新增功能和 bug 修复,感兴趣的可以参考:

github更新日志

-- From 日报小组 RustPlumber

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页