Есть ли какой-то недостаток в ссылках на модули через `core` вместо` std`? - PullRequest
0 голосов
/ 16 декабря 2018

Стандартная библиотека Rust представлена ​​в виде двух пакетов: std и core.С точки зрения API, функциональность в core является подмножеством std, которое может поддерживаться независимо от какой-либо интеграции операционной системы или выделения кучи.При написании импорта для моих библиотек у меня возникало желание всегда ссылаться на модули через более совместимые core вместо std, если они доступны в обоих.

Однако, это было неясномне, могут ли их реализации той же функциональности отличаться.Если я использую core::cell::RefCell, могу ли я получить реализацию, которая менее эффективна, чем если бы я ссылался на std::cell::RefCell?

Есть ли какой-либо недостаток для ссылок на модули через core вместо std, если онидоступны в обоих?

1 Ответ

0 голосов
/ 16 декабря 2018

Rust стремится быть языком общего назначения, который может работать на многих типах архитектур (x86_64, i686, PowerPC, ARM, RISC-V) и системах (Windows, macOS, Linux) и даже встраиваемых системах без O perating S ystem .

Но если у вас нет ОС, вам не обязательно иметь распределитель памяти или обработку файлов, потому чтоэто то, что ОС обычно делает.

Здесь #![no_std] вступает в игру.Если вы поместите эту директиву в свой lib.rs , вы скажете компилятору Rust не связывать ящик std, а вместо этого использовать только core.Как вы сказали, core является подмножеством std и содержит (в основном) все, что не требует выделения памяти или других вещей, требующих базовой ОС.

Нет никакой разницы в фактической реализации.Если функция предоставляется в core, функция в std является просто реэкспортом .

TL; DR: используйте std, если у вас работает операционная система, иначеиспользуйте core.Нет необходимости смешивать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...