这是serialize
crate,这是rustc-serialize
crate。
我在使用Encodable
包中的Decodable
和serialize
特征时,会收到编译器的弃用警告。编译器告诉我使用RustcEncodable
包中的RustcDecodable
和rustc-serialize
。
这似乎只会使相同功能的可读性降低(除了base64
中提供的rustc-serialize
编码)。这些板条箱之间有什么区别?
答案 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}将来自前面提到的链接)。
目前暂时停止使用serde2
和rustc-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
。