Пакет, крэйт, модуль
Теперь, когда мы знаем, что в одном проекте может быть и библиотека, и несколько исполняемых файлов, мы наконец можем осознанно ответить на вопрос “что такое крэйт?”.
Всё просто: крэйт — это единица компиляции. И, учитывая, как компилятор Rust обрабатывает модули (сначала включает модули, а потом компилирует один большой файл), можно говорить, что крэйт — это либо библиотека, либо исполняемый файл.
Подытожим:
Пакет — это проект, который мы создаём при помощи cargo new. У нас даже главная секция в Cargo.toml называется [package].
Пакет содержит один или более крэйтов, которые соответствуют файлу lib.rs и главным файлам для исполняемых программ: src/main.rs и src/bin/*.rs.
С модулями мы уже хорошо знакомы из главы Модули. Это просто блоки кода на Rust обрамлённые в секцию mod модуль {}, или файлы с исходным кодом (которым суждено быть включёнными в другие файлы при сборке крэйта).