Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Керування зростаючими проєктами за допомогою пакетів, крейтів та модулів (Managing Growing Projects with Packages, Crates, and Modules)

Коли ви пишете великі програми, організація вашого коду ставатиме дедалі важливішою. Групуючи пов’язану функціональність і відокремлюючи код з окремими можливостями, ви зробите зрозумілішим, де знайти код, що реалізує певну можливість, і куди звернутися, щоб змінити те, як працює можливість.

Програми, які ми написали досі, були в одному модулі в одному файлі. Коли проект зростає, слід організовувати код, розділяючи його на кілька модулів, а потім на кілька файлів. Пакет може містити кілька двійкових крейтів і, необов’язково, один бібліотечний крейт. Коли пакет зростає, ви можете виділяти частини в окремі крейти, які стають зовнішніми залежностями. Цей розділ охоплює всі ці техніки. Для дуже великих проектів, що складаються з набору взаємопов’язаних пакетів, які розвиваються разом, Cargo надає робочі простори, які ми розглянемо в “Робочі простори Cargo” у розділі 14.

Ми також обговоримо інкапсуляцію деталей реалізації, що дає змогу вам повторно використовувати код на вищому рівні: щойно ви реалізували операцію, інший код може викликати ваш код через його публічний інтерфейс, не маючи потреби знати, як працює реалізація. Те, як ви пишете код, визначає, які частини є публічними для використання іншим кодом, а які частини — приватні деталі реалізації, які ви залишаєте за собою право змінювати. Це ще один спосіб обмежити обсяг деталей, які вам потрібно тримати в голові.

Пов’язане поняття — область видимості: вкладений контекст, у якому написано код, має набір імен, які визначені як “у межах області видимості”. Під час читання, написання та компіляції коду програмістам і компіляторам потрібно знати, чи певне ім’я в певному місці означає змінну, функцію, структуру, перелічення, модуль, константу або інший елемент, і що означає цей елемент. Ви можете створювати області видимості і змінювати, які імена перебувають у межах або поза межами області видимості. Ви не можете мати два елементи з однаковим іменем в одній області видимості; для розв’язання конфліктів імен доступні інструменти.

Rust має низку можливостей, які дають змогу вам керувати організацією вашого коду, зокрема тим, які деталі є доступними, які деталі є приватними, і які імена є в кожній області видимості у ваших програмах. Ці можливості, іноді разом називані системою модулів, включають:

  • Пакети (Packages): можливість Cargo, яка дає вам змогу будувати, тестувати і поширювати крейти
  • Крейти (Crates): дерево модулів, яке створює бібліотеку або виконуваний файл
  • Модулі (Modules) та use: дають вам змогу керувати організацією, областю видимості та приватністю шляхів
  • Шляхи (Paths): спосіб іменування елемента, такого як структура, функція або модуль

У цьому розділі ми охопимо всі ці можливості, обговоримо, як вони взаємодіють, і пояснимо, як використовувати їх для керування областю видимості. До кінця ви повинні мати надійне розуміння системи модулів і бути здатними працювати з областями видимості як професіонал!