< 返回版块

rust 日报 babpstep 发表于 2022-05-24 20:15

Tags:flutter, memory leak, blaze

通过 flutter_rust_bridge 使用 Flutter

近日 Flutter 发布了 3.0 版本,如何同时享受 Flutter 和 Rust 的双重优势呢?答案是 flutter_rust_bridge

该项目将 Flutter 和 Rust 之间进行了高级绑定,带来了以下好处:

  1. 内存安全:永远不需要考虑 malloc/free。
  2. 功能丰富:针对特定平台优化的 Vec、可递归的 struct、零拷贝大数组、Stream(迭代器)抽象、错误(Result)处理、可取消任务、并发控制等。
  3. 异步编程:Rust 代码永远不会阻塞 Flutter。
  4. 轻量级:这不是一个包含所有内容的庞大框架,因此您可以自由使用您最喜欢的 Flutter 和 Rust 库。例如,可以优雅而简单地使用 Flutter 库(例如 MobX)的状态管理;在 Rust 中实现快速且安全的照片处理算法。
  5. 跨平台:Android、iOS、Windows、Linux、MacOS(Web即将推出)
  6. 易于代码审查:这个包只是模拟人类如何编写样板代码。没有任何魔法!
  7. 快速:它只是一个精简(尽管功能丰富)的包装器,没有诸如 protobuf 序列化之类的开销,因此具有高性能。(稍后进行更多基准测试)(丢弃线程池等组件以使其更快)
  8. 兼容 Pure-Dart:该项目与 Pure-Dart 100% 兼容。

github 地址

blaze:Apache Spark 的矢量化查询加速器

作为 Apache Spark 的加速器,blaze 利用矢量化执行来加速查询处理。它从 Spark 获取一个完全优化的物理计划,将其映射到 DataFusion 的执行计划中,并在 Spark 执行器中执行本机计划计算,同时结合了DataFusion 库的强大功能和 Spark 分布式计算框架的可扩展性。

github 地址

OneSignal 是如何解决 Rust 内存泄露问题的

在 OneSignal 公司,大家都喜欢 Rust,并且将很多核心业务功能转换成了 Rust 技术栈开发,Journeys 就是其中一个项目。其由几个 gRPC 服务和一个用 Rust 编写的 Kafka 消费者组成,允许客户使用无代码 UI 轻松构建复杂的消息传递工作流。随着 Journeys 的采用率开始增加,以及其开始处理更多事件,他们开始注意到,其内存使用情况令人不安,并不断导致 JourneyX 进程被 OOM Killer 杀死、重启。

事实上,与很多人的第一印象相反,根据 Rust 的规则,内存泄漏是完全安全的,例如我们可以使用 std::mem::forget 故意泄漏尽可能多的内存,尽管最终会导致程序被内核杀死。

OneSignal 最终排查到,导致内存泄露的是对于 tracing 库和析构特性的不当使用,如果你尚未遇到这个问题,不妨来借鉴一下他们的经验教训,也许以后就能避免这类错误。

原文链接

-- From 日报小组 RustPlumber

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页