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 предоставляет рабочие пространства (workspaces), которые мы рассмотрим в главе 14 в разделе “Cargo Workspaces”.

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

Смежным понятием является область видимости (scope): вложенный контекст, в котором написан код, имеет набор имён, определённых как “находящиеся в области видимости”. При чтении, написании и компиляции кода программистам и компиляторам нужно знать, относится ли конкретное имя в конкретном месте к переменной, функции, структуре, перечислению, модулю, константе или другому элементу и что означает этот элемент. Вы можете создавать области видимости и изменять, какие имена находятся внутри или вне них. В одной области видимости нельзя иметь два элемента с одинаковым именем; существуют инструменты для разрешения конфликтов имён.

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

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

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