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

Пакеты, крейты и модули

По мере написания больших программ организация кода будет становиться все важнее. Группируя связанную функциональность и разделяя код с разными возможностями, вы яснее показываете, где найти код, реализующий конкретную возможность, и куда перейти, чтобы изменить то, как эта возможность работает.

Программы, которые мы писали до сих пор, находились в одном модуле в одном файле. По мере роста проекта следует организовывать код, разделяя его сначала на несколько модулей, а затем на несколько файлов. Пакет может содержать несколько бинарных крейтов и необязательно один библиотечный крейт. По мере роста пакета можно выносить его части в отдельные крейты, которые становятся внешними зависимостями. Эта глава охватывает все эти приемы. Для очень больших проектов, состоящих из набора взаимосвязанных пакетов, которые развиваются вместе, Cargo предоставляет рабочие пространства, которые мы рассмотрим в разделе «Рабочие пространства Cargo» главы 14.

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

Связанное понятие – область видимости: вложенный контекст, в котором написан код, имеет набор имен, определенных как «находящиеся в области видимости». При чтении, написании и компиляции кода программистам и компиляторам нужно знать, относится ли конкретное имя в конкретном месте к переменной, функции, структуре, enum, модулю, константе или другому элементу, и что этот элемент означает. Вы можете создавать области видимости и менять, какие имена входят в область видимости или выходят из нее. В одной области видимости нельзя иметь два элемента с одним и тем же именем; для разрешения конфликтов имен доступны инструменты.

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

  • Пакеты: возможность Cargo, которая позволяет собирать, тестировать и распространять крейты
  • Крейты: дерево модулей, которое создает библиотеку или исполняемый файл
  • Модули и use: позволяют управлять организацией, областью видимости и приватностью путей
  • Пути: способ назвать элемент, например структуру, функцию или модуль

В этой главе мы рассмотрим все эти возможности, обсудим, как они взаимодействуют, и объясним, как использовать их для управления областью видимости. К концу главы у вас должно сложиться прочное понимание системы модулей, и вы сможете работать с областями видимости как профессионал!