- PVSM.RU - https://www.pvsm.ru -
Трудность с поиском необходимых библиотек. Проблемы с универсальной кросс-платформенной сборкой проекта. Разделение и контроль зависимостей.
Всё вышеперечисленное нередко упоминалось новичками, пытающимися использовать D [1], как значимое препятствие к созданию новых проектов. Популярность таких проектов как NPM [2] и Ruby Gems [3] формируют определённые ожидания у современных программистов. В то же время, мир нативно компилируемых программ имеет свою специфику.
DUB [4] это попытка создать подобный инструмент для программистов на D, проект, который пользуюется огромной популярностью в сообществе и, вероятно, скоро станет официальным.
DUB [4] это:
dub build
dub run
, не засоряя системуПри этом DUB не предоставляет инструментов по дистрибуции и установке программ среди конечных пользователей и не является менеджером пакетов в полном смысле этого слова. Этот инструмент предназначен для облегчения самого процесса разработки и фокусируется исключительно на этом.
Изначально DUB был создан Sönke Ludwig в рамках проекта vibe.d [6], однако через некоторое время был переписан в качестве самостоятельного проекта и на данный момент является стандартом de facto для проектов на D. Предполагается, что с какого-то момента утилита станет распространятся вместе с компилятором и получит статус стандартного инструмента de jure — эта идея уже предварительно одобрена авторами языка и вопрос исключительно в более стабилизации API / формата проектов.
Для установки DUB можно использовать один из следующих вариантов:
build.sh
)
По умолчанию, все временные файлы и кэш регистра хранится в ~/.dub
или аналогичной директории локального пользователя, прав администратора для работы не требуется.
Самый простой способ создать каркас для нового проекта, это использовать подкоманду init
:
dub init proj1
find proj1
# proj1/
# proj1/dub.json
# proj1/source
# proj1/source/app.d
cd proj1
dub run
# proj1: ["proj1"]
# Building proj1 configuration "application", build type debug.
# Compiling...
# Linking...
# Running ./proj1
# Edit source/app.d to start your project.
Команда dub run
компилирует и запускает текущий проект согласно настройкам из dub.json, файла описания проекта. Обычно компилируются все файлы из подкаталога ./source/
, а так же импортируемые ими модули. Команда dub build
делает то же самое, но не запускает исполняемый файл.
Ключевая возможность dub, ради которой он прежде всего и был написан — автоматическая загрузка зависимостей при компиляции. Для этого нужно указать необходимые библиотеки в dub.json:
{
"name": "proj1",
"description": "A minimal D application.",
"dependencies": {
"vibe-d" : ">=0.7.18",
"cerealed" : ">=0.5.0"
}
}
Все зависимости зависимостей будут загружены неявно. При первой сборке приложения в логе действий будет указано, какие пакеты dub загружает и куда они сохраняются. В дальнейшем будет использовать локальный кэш до тех пор, пока не будет изменена версия зависимости в dub.json
или же явно вызвана команда dub upgrade
.
В коде самого приложения можно импортировать любые модули из библиотек-зависимостей, не прилагая никаких дополнительных усилий. Генерация необходимых флагов компилятора выполняется самим dub.
module app;
import vibe.d; // just works
Зависимостями могут быть не только библиотеки, но и приложения. В таком случае они будут скомпилированы перед вашим проектом и доступны для использования через dub:
dub run <package name> <application arguments ...>
Команда dub test
скомпилирует и выполнит все юнит-тесты вашего приложения (имеется в виду нативная возможность D: inline unittests [10]). Однако обычно хочется держать тесты более высокого уровня, например, интеграционные, отдельно от основного приложения. Это можно добиться, использовав такую возможность dub.json, как конфигурации:
{
"name": "proj1",
"description": "A minimal D application.",
"sourcePaths" : [ ],
"configurations" : [
{
"name" : "app",
"targetType" : "executable",
"sourcePaths" : [ "./source" ],
},
{
"name" : "tests",
"sourcePaths" : [ "./tests" ],
"targetType" : "executable",
"targetName" : "app-tests",
}
]
}
find ./
# ./dub.json
# ./source
# ./source/app.d
# ./tests
# ./tests/app.d
dub build --config=tests
dub build --config=app # default
По сути, конфигурация — это просто именованый блок опций. В только что приведённом примере используется такой параметр dub.json, как sourcePaths
— список директорий с исходниками для используемой конфигурации. По умолчанию в этом списке всегда есть директория "./source", поэтому необходимо сбросить этот параметр в глобальной секции dub.json:
"sourcePaths" : [ ]
Первая из конфигураций в списке всегда используется как конфигурация по умолчанию, поэтому практично использовать её для параметров обычной сборки приложения. В случае, если используется только одна конфигурация, само собой, все эти параметры можно просто указывать в глобальной секции.
Исходники проекта-примера можно и нужно потрогать: github.com/Dicebot/examples/tree/master/dub/proj1 [11]
Приведённой выше информации должно хватить для конвертации большинства простых проектов. Для удовлетворения реальных рабочих потребностей, конечно же, может понадобиться куда больше. Рекомендации для дальнейшего изучения:
Наиболее полное описание формата dub.json: code.dlang.org/package-format [12]
Подборка примеров в репозитории проекта: github.com/rejectedsoftware/dub/tree/master/examples [13]
Вопросы / предложения / пожелания: forum.rejectedsoftware.com/groups/rejectedsoftware.dub/ [14]
… а так же задавайте вопросы здесь.
Должен предупредить, что вся инфраструктуры развивается усилиями сообщества и пакеты, доступные через регистр, не модерируются. Лучшее, что можно сделать при обнаружении проблем с конкретным пакетом — написать об этом его автору или завести соответствующий Issue в репозитории проекта.
Happy coding.
Автор: Dicebot
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/58337
Ссылки в тексте:
[1] D: http://dlang.org
[2] NPM: https://www.npmjs.org/
[3] Ruby Gems: http://en.wikipedia.org/wiki/RubyGems
[4] DUB: https://github.com/rejectedsoftware/dub/
[5] регистра проектов: http://code.dlang.org
[6] vibe.d: http://vibed.org
[7] code.dlang.org/download: http://code.dlang.org/download
[8] Arch Linux: https://www.archlinux.org/packages/community/i686/dub/
[9] Ubuntu/Debian: http://d-apt.sourceforge.net/
[10] inline unittests: http://dlang.org/unittest.html
[11] github.com/Dicebot/examples/tree/master/dub/proj1: https://github.com/Dicebot/examples/tree/master/dub/proj1
[12] code.dlang.org/package-format: http://code.dlang.org/package-format
[13] github.com/rejectedsoftware/dub/tree/master/examples: https://github.com/rejectedsoftware/dub/tree/master/examples
[14] forum.rejectedsoftware.com/groups/rejectedsoftware.dub/: http://forum.rejectedsoftware.com/groups/rejectedsoftware.dub/
[15] Источник: http://habrahabr.ru/post/218125/
Нажмите здесь для печати.