9. Глоссарий

Проект (Project): дерево исходного кода со стандартной структурой, включающее каталог src для основного тела кода Julia, каталог test для тестирования проекта, каталог docs для файлов документации и (необязательно) каталог deps для скрипта сборки и его результатов. Как правило, проект также имеет файл проекта и (необязательно) файл манифеста:

  • Файл проекта: файл в корневом каталоге проекта с именем Project.toml (или JuliaProject.toml), описывающий метаданные о проекте, включающие его имя, UUID (для пакетов), авторов, лицензию, а также имена и UUID пакетов и библиотек, от которых он зависит.

  • Файл манифеста: файл в корневом каталоге проекта с именем Manifest.toml (или JuliaManifest.toml), описывающий полный граф зависимостей и точные версии каждого пакета и библиотеки, используемых проектом.

Пакет (Package): проект, предоставляющий многократно применяемую функциональность, которая может быть использована другими проектами Julia с помощью import X или using X. Пакет должен иметь файл проекта с записью uuid, указывающей UUID пакета. Этот UUID используется для идентификации пакета в проектах, которые от него зависят.

По соображениям совместимости с предыдущими версиями можно загрузить пакет без файла проекта или UUID из REPL или верхнего уровня скрипта. Однако невозможно загрузить пакет без файла проекта или UUID из проекта, их содержащего. Если вы выполнили загрузку из файла проекта, всем компонентам требуются файл проекта и UUID.

Приложение (Application): проект, предоставляющий отдельную функциональность, не предназначенную для повторного использования в других проектах Julia. Например, веб-приложение или программа командной строки либо код моделирования/аналитики, приводимый в научной статье. Приложение может иметь UUID, но необязательно. Приложение также может устанавливать и изменять глобальные конфигурации пакетов, от которых оно зависит. С другой стороны, пакеты не могут изменять глобальное состояние своих зависимостей, поскольку это может привести к конфликту с конфигурацией основного приложения.

Проекты (Projects), пакеты (packages), приложения applications)

  1. Проект — это обобщающий термин: пакеты и приложения являются разновидностями проектов.

  2. Пакеты должны иметь идентификаторы UUID, приложения могут иметь идентификаторы UUID, но не нуждаются в них.

  3. Приложения могут предоставлять глобальную конфигурацию, а пакеты — нет.

Среда (Environment): комбинация сопоставления имен верхнего уровня, предоставляемая файлом проекта в сочетании с графом зависимостей и сопоставлением из пакетов с их точками входа, предоставляемым файлом манифеста. Более подробную информацию можно найти в разделе руководства, посвященном загрузке кода.

  • Явная среда: среда в виде сочетания явного файла проекта и необязательного соответствующего файла манифеста в каталоге. Если файл манифеста отсутствует, то подразумеваемый граф зависимостей и схемы расположений пусты.

  • Неявная среда: среда, предоставляемая в виде каталога (без файла проекта или файла манифеста), содержащего пакеты с точками входа вида X.jl, X.jl/src/X.jl или X/src/X.jl. Сопоставление имен верхнего уровня подразумевается этими точками входа. Граф зависимостей подразумевается существованием файлов проекта внутри этих каталогов пакетов, например X.jl/Project.toml или X/Project.toml. Зависимости пакета X — это зависимости в соответствующем файле проекта, если таковой имеется. Схема расположения подразумевается самими точками входа.

Реестр (Registry): дерево исходного кода со стандартной структурой, записывающее метаданные о зарегистрированном наборе пакетов, их доступных версиях с метками, а также о том, какие версии пакетов совместимы или не совместимы друг с другом. Реестр индексируется по имени пакета и UUID и имеет каталог для каждого зарегистрированного пакета, содержащий следующие метаданные о нем:

  • имя — например, DataFrames

  • UUID — например, a93c6f00-e57d-5684-b7b6-d8193f3e46c0

  • репозиторий — например, https://github.com/JuliaData/DataFrames.jl.git

  • версии — список тегов всех зарегистрированных версий

Для каждой зарегистрированной версии пакета предоставляется следующая информация:

  • номер семантической версии — например, v1.2.3.

  • хэш SHA-1 дерева git — например, 7ffb18ea3245ef98e368b02b81e8a86543a11103.

  • сопоставление имен с UUID зависимостей

  • с какими версиями других пакетов он совместим или несовместим

Зависимости и совместимость хранятся в сжатом, но удобочитаемом формате с использованием диапазонов версий пакетов.

Хранилище (Depot): каталог в системе, в котором хранятся различные ресурсы, связанные с пакетами, включая:

  • environments: общие именованные среды (например, v1.0, devtools)

  • clones: чистые клоны репозиториев пакетов

  • compiled: кэшированные скомпилированные образы пакетов (файлы .ji)

  • config: файлы глобальной конфигурации (например, startup.jl)

  • dev: каталог по умолчанию для разработки пакетов

  • logs: файлы журналов (например, manifest_usage.toml, repl_history.jl)

  • packages: установленные версии пакетов

  • registries: клоны реестров (например, General)

Путь загрузки (Load path): стек сред, где осуществляется поиск идентификаторов пакетов, их зависимостей и точек входа. В Julia путь загрузки контролируется глобальной переменной LOAD_PATH, которая заполняется при запуске на основе значения переменной среды JULIA_LOAD_PATH. Первая запись — это основная среда, часто текущий проект, а последующие записи содержат дополнительные пакеты, которые можно использовать из REPL или скриптов верхнего уровня.

Путь к хранилищу (Depot path): стек расположений хранилищ, где диспетчер пакетов, а также механизмы загрузки кода Julia выполняют поиск реестров, установленных пакетов, именованных сред, клонов репозиториев, кэшированных скомпилированных образов пакетов, файлов конфигурации. В Julia путь к хранилищу контролируется глобальной переменной DEPOT_PATH, которая заполняется при запуске на основе значения переменной среды JULIA_DEPOT_PATH. Первая запись — это «хранилище пользователя». Она должна быть доступна для записи и принадлежать текущему пользователю. В пользовательском хранилище клонируются реестры, устанавливаются новые версии пакетов, создаются и обновляются именованные среды, клонируются репозитории пакетов, сохраняются только что скомпилированные файлы образов пакетов, записываются файлы журналов, по умолчанию проверяются пакеты разработки, а также сохраняются данные глобальной конфигурации. Последующие записи в пути к хранилищу рассматриваются как доступные только для чтения и подходят для реестров, пакетов и т. д., установленных и управляемых системными администраторами.