Подтвердить что ты не робот

Какая разница между ящиками "serialize" и "rustc-serialize"?

Это serialize crate, и это rustc-serialize.

Я получаю предупреждения от устаревания от компилятора при использовании признаков Encodable и Decodable из ящика serialize. Компилятор говорит мне использовать RustcEncodable и RustcDecodable из ящика rustc-serialize.

Похоже, это просто делает вещи менее читабельными для той же функциональности (кроме base64 кодирования, представленного в rustc-serialize). Какая разница между этими ящиками?

4b9b3361

Ответ 1

Ящик serialize является внутренней частью стандартного распределения ржавчины. Он не будет доступен в стабильных/бета-каналах Rust 1.0.

Ячейкой rustc-serialize было serialize, но оно было перемещено в отдельный репозиторий и загружено в ящики .io, чтобы оно могло развиваться самостоятельно.

Это было сделано, потому что полезность rustc-serialize огромна, но было нереально добиться ее стабилизации во времени для Rust 1.0. Поскольку распределение Rust запретит неустойчивые функции на стабильном канале, единственный способ продолжить использование инфраструктуры сериализации - 1) стабилизировать то, что у нас есть, или 2) перенести его на crates.io, где неустойчивые ограничения не применяются.

rustc-serialize имеет много известных недостатков, а работает над, поэтому стабилизация того, что там действительно существует, не является вариантом.

Но функции Decodable/Encodable требуют поддержки компилятора (поскольку плагины компилятора не будут стабильными ни для Rust 1.0). В качестве меры пресечения RustcDecodable/RustcEncodable были изобретены как временная мера для ящика rustc-serialize для использования явно. Это немного странно, но оно оставляет имена Decodable/Encodable доступными для будущей совместимой версии serialize, которая лучше, чем у нас сейчас (возможно, это то, что serde2 станет из вышеупомянутой ссылки).

Итак, пока не используйте rustc-serialize и RustcDecodable/RustcEncodable.

(Я прошу прощения, что я не могу придумать ссылку, чтобы привести все это. Это знание, которое я накопил с течением времени из проблем GitHub. Может быть, есть RFC, который все это выдает, не помню.)

Ответ 2

Чтобы развернуть ответ BurntSushi5, на момент написания этой статьи компилятор Rust в обоих стабильных и бета-каналах выдает следующую ошибку при попытке использовать vanilla serialize:

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;
  | ^^^^^^^^^^^^^^^^^^^^^^^

связанная проблема Github не очень помогает. Короче говоря, используйте rustc-serialize.