【Rust 日报】2023-04-20 Rust 的 serde 库如此独特吗?

Rust 1.69.0发布

Rust编程语言在今天(2023年4月20日)发布了1.69.0版本,致力于帮助开发者构建高效可靠的软件。

  • Cargo现在会建议开发者使用cargo fixcargo clippy --fix命令来自动修复一些警告。

  • 为了提高编译速度,构建脚本中不再默认包含调试信息。

  • 一些API在const上下文中得到了稳定。

  • 该版本包含超过500名开发者提交的3000多个小改进,进一步巩固了Rust在高性能和安全性方面的优势。

Rust官方博客:https://blog.rust-lang.org/2023/04/20/Rust-1.69.0.html

Rust的强大模式匹配

来自reddit的一个网友发帖称赞Rust里的模式匹配很强大,简单概括是:

  • Rust 中的 | 运算符在模式匹配中非常强大,能够简化代码并提高可读性和可维护性。

  • | 运算符在所有的模式匹配上下文中使用,包括嵌套在元组和结构体中的模式。

  • 在模式匹配语句中,使用 | 运算符可以将多个匹配条件合并为一个,从而简化代码。

  • 在 if-let 语句中,也可以使用 | 运算符简化模式匹配代码。

  • 在模式匹配中,多个 | 运算符会尝试所有可能的组合。

总之,使用 | 运算符可以让我们更加灵活地编写模式匹配语句,提高代码的可读性和可维护性。

原帖: https://www.reddit.com/r/rust/comments/12sbjyj/power_of_the_operator_in_pattern_matching/

Rust社区动态:This Week in Rust 491

本周,Rust社区持续推进着各项项目和工具的更新和改进。以下是一些值得关注的内容:

  • Rust基金会发布了商标政策草案,并开始征求社区反馈。

  • Nutype发布了v0.2版本,支持更多的文本格式。

  • tuxedo-rs正式宣布发布,这是一个用于快速构建Web API的Rust库。

  • rust-analyzer更新至177版,增加了一些新的特性和改进。

  • Rust开发者分享了一些关于优化derive宏编译时间的方法。

  • Rust开发者使用Rust重写了一个Python项目bmap-tools。

  • Rust的Traits不仅仅是接口。

  • Rust添加了Optional If表达式。

  • Rust开发者分享了如何使用meson构建GStreamer插件。

  • 有两个好用的Rust库Rutie和Magnus,可以用于构建Ruby扩展。

  • Rust开发者分享了在其他语言中想念Rust的两个特性。

  • Rust Analyzer的开发者Lukas Wirth分享了一些关于Rust Analyzer的内容。

  • Wasmer的开发者Syrus Akbary分享了一些关于Wasmer的内容。

  • 了解Rust的线程安全性。

  • 如何在circuit playground classic/atmega32u4上运行Rust代码。

  • 用#[no_core]和编译器补丁在m68k上编写Rust的Hello World。

  • Rust开发者分享了一个支持分支控制流和同步共享可变借用的异步join宏。

  • 用Rust构建Lua解释器的教程。

  • Rust开发者Zino分享了一个使用100行代码实现带有跟踪功能的错误类型的实现。

  • Shuttle Batch 2.0发布。

本周的Crate of the Week是onlyerror,这是一个#[derive(Error)]宏,支持在nightly编译器上使用no_std。

此外,本周也有一些Rust社区的贡献机会,包括帮助Quickwit升级clap、实现quickwit数据集CLI命令,帮助Hyperswitch迁移enum_dispatch以减少运行时开销等。

本周动态: https://this-week-in-rust.org/blog/2023/04/19/this-week-in-rust-491/

Rust 的 serde 库如此独特吗?

一位Rust开发者在Reddit上问到,是否有其他编程语言中的序列化/反序列化库可以与Rust的serde库相媲美。他表示,他曾经使用过C#,Java,JS,Dart等语言,但是没有看到过像serde.rs这样的生态系统,其中所有库之间都有一种共同的序列化和反序列化数据的一致模式,而这一切都是由Rust的trait系统支持的。

对于高赞评论的作者来说,Rust具有几个方面的特点,使得这种组合和通用的库特别可行:

  • Trait不会强制执行内存布局或类型层次结构限制,不像接口和纯虚基类。

  • Serde可以声明核心和标准类型,如u8和&str,实现Serialize和Deserialize。没有需要奇怪的反射。

  • 派生宏意味着第三方库可以轻松支持通过派生Serialize和Deserialize来支持crate。因此,他们很可能会付出最小的努力。如果添加对serde的支持很麻烦,第三方crate将不太愿意这样做。

  • 特性的组合,易于使用的cfg_attr,允许第三方crate选择性地实现Serialize和Deserialize,即#[cfg_attr(feature = "serde_support", derive(Serialize, Deserialize))]。这意味着如果crate的用户不需要此功能,第三方crate不需要拉取大量的依赖项。这得益于依赖项可以是可选的,只有在启用功能时才包括。

  • Cargo的易用性鼓励开发者将crate拆分为几个组件,允许serde单独存在,但与serde-json、toml、quick-xml、postcard等链接。

  • 不会有破坏性。serde非常早就在Rust的生态中创建了,这意味着它很快成为了事实上的标准,尽管说到这里,我开始看到对tracing crate的第三方支持,例如color-eyre捕获跟踪跨度,因此较新的crate变得标准也是完全可行的。

综上所述,Rust的serde库确实是一个非常独特和强大的工具,它的设计和实现使得其在序列化和反序列化方面表现出色,并且在Rust生态系统中被广泛使用。

原帖: https://www.reddit.com/r/rust/comments/12so3j9/is_rust_serde_unique/

From 日报小组 Cupnfish

社区学习交流平台订阅:

  • Rust.cc 论坛: 支持 rss

  • 微信公众号:Rust 语言中文社区

你可能感兴趣的:(rust,开发语言,后端)