“序列化”和“rustc-serialize”板条箱之间有什么区别?

时间:2015-02-11 14:29:24

标签: rust

这是serialize crate,这是rustc-serialize crate

我在使用Encodable包中的Decodableserialize特征时,会收到编译器的弃用警告。编译器告诉我使用RustcEncodable包中的RustcDecodablerustc-serialize

这似乎只会使相同功能的可读性降低(除了base64中提供的rustc-serialize编码)。这些板条箱之间有什么区别?

2 个答案:

答案 0 :(得分:19)

serialize包是标准Rust分发的内部部分。它不会在Rust 1.0 stable / beta频道中提供。

rustc-serialize crate曾经是serialize,但它被移出到一个单独的存储库并上传到crates.io,以便它可以自行发展。

这样做是因为rustc-serialize的效用很大但是为了使Rust 1.0及时稳定下来是不现实的。由于Rust分发将禁止稳定通道上的不稳定功能,继续使用序列化基础设施的唯一方法是1)稳定我们拥有的或2)将其移动到crates.io,其中不稳定的限制不适用

rustc-serialize有许多已知的缺点,it is being worked on,所以稳定那里真的不是一个选项。

Decodable/Encodable功能需要编译器支持(因为编译器插件在Rust 1.0中不会稳定)。作为权宜之计,RustcDecodable/RustcEncodable被发明为rustc-serialize箱明确使用的临时措施。它有点奇怪,但是它为Decodable/Encodable crate的未来向后兼容版本提供了serialize名称,它比我们现在拥有的更好(也许这就是{{1}将来自前面提到的链接)。

目前暂时停止使用serde2rustc-serialize

(我很抱歉,我无法提出一个引用所有这些内容的链接。这是我从GitHub问题中产生的知识。也许有一个RFC可以解决所有问题。尽管如此。我无法记住。)

答案 1 :(得分:0)

要扩展BurntSushi5's answer,截至撰写本文时,在尝试使用vanilla serialize时,Stable和Beta通道中的Rust编译器都会引发以下错误:

error: use of unstable library feature 'rustc_private': deprecated in favor of rustc-serialize on crates.io (see issue #27812)
 --> src/main.rs:2:1
  |
2 | extern crate serialize;
  | ^^^^^^^^^^^^^^^^^^^^^^^

linked Github issue不是很有帮助。简而言之,请使用rustc-serialize