Практичне введення в Alire#
Alire - це пакетний менеджер для мови Ada орієнтований на використання вихідних текстів програм у розробці. Його використання полегшує такі операції
Встановлення компілятора
Створення нової бібліотеки або програми
Керування залежностями
Встановлення Alire#
Поставити його не складно. Достатньо завантажити архів із сайту
alire.ada.dev або з
релізів GitHub,
розархівувати і додати папку bin
у PATH
.
Залежностей у Alire небагато і, найімовірніше, вони вже встановлені
у кожного розробника - git
, curl
, unzip
.
Перший запуск#
Тепер одразу можна спробувати щось зібрати. Для цього є тренувальний додаток класу "hello, world":
alr get --build hello
У цей момент Alire зробить таке
Якщо у вас Windows, завантажить і встановить
msys2
Скачає ком'юніті індекс бібліотек і програм
Знайде в ньому останню версію компілятора і запропонує його поставити
Коли ви погодитеся, поставить компілятор і
gprbuild
Завантажує додаток
hello
і його залежності (libhello
)Побудує виконуваний модуль
hello
Результат ви зможете знайти в папці hello_версія_хеш
(наприклад
hello_1.0.2_5715870b
), а виконуваний модуль - у підкаталозі bin
.
Налаштування#
Хоча Alire не вимагає налаштування, я зазвичай виконую
alr settings --global --set dependencies.shared false
Це забороняє йому зберігати залежності поза робочою папкою. Наприклад,
під час складання hello
, він завантажує і збирає libhello
в каталозі
$HOME/.local/share/alire/{builds,releases}
. Мені здається, це захаращує
домашній каталог. Якщо таку поведінку заборонити, то залежності
розташовуються в робочій папці (наприклад
hello_1.0.2_5715870b/alire/cache/dependencies
) і я завжди впевнений, що,
видаливши робочу папку, не залишу зайвого сміття. Мені також здається,
що цей режим надійніший.
Створення нової бібліотеки#
Створення нової бібліотеки вимагає деяких рутинних дій (створення файлу
проєкту, структури каталогів для вихідних текстів, файлу маніфесту
alire.toml
і т.п.) На щастя, Alire може допомогти в цьому. Плюсом тут
також буде те, що створені файли будуть схожі на бібліотеки інших
проектів і користувачам буде простіше в них орієнтуватися. Запустіть
alr init --lib mylib
При цьому Alire зробить папку з відповідним ім'ям і заповнить її
файлами та каталогами із заготівлею проєкту. У папці будуть alire.toml
,
mylib.gpr
, src/mylib.ads
, .gitignore
і кілька службових файлів.
Побудувати бібліотеку можна командою cd mylib; alr build
(або alr -C mylib build
).
Так само можна побудувати і будь-який інший проєкт, що має
файл маніфесту alire.toml
. Ознайомившись із фалом проекту (mylib.gpr
),
ви помітите, що він використовує config/mylib_config.gpr
. Останній
перестворюється Alire-ом під час додавання залежностей, зміни режиму
збірки (development
, release
, т.п.), зміні ключів компіляції у файлі
маніфесту та інше. Його не рекомендується редагувати, на відміну від
головного файлу проекту, який ви можете переробити на свій розсуд.
Каталоги alire
і config
, як правило, навіть не зберігають у репозиторії
вихідних кодів, оскільки alr build
створить їх сам.
Керування залежностями#
Управління залежностями - це те, де Alire особливо корисний. Якщо ви ходите використовувати якусь бібліотеку, яка вже в індексі, достатньо запустити
alr with libhello
Alire завантажить бібліотеку, запам'ятає залежність у файлі маніфесту
alire.toml
і змінить ваш config/xxx_config.gpr
.
Це можна зробити іншим способом - відредагувавши alire.toml
і запустивши
alr build
.
Alire використовує схему семантичного ведення версій, складаючи номер
версії з трьох чисел. Перше має змінюватися, якщо змінюється API
бібліотеки. Якщо змінюється лише друге число, то в API можуть з'явиться
нові функції, але решта API залишається сумісною з минулою версією. Коли
змінюється тільки третє число, то API не змінюється взагалі, а
змінюється тільки реалізація, виправляються помилки тощо. З огляду на це
ви можете точно описати залежності між бібліотеками, використовуючи
звичайні оператори порівняння, наприклад >= 1.2.3
. Є спеціальні
оператори
^1.0
- будь-яка версія починаючи із зазначеної, але не змінюючи старше число версії~1.2
- будь-яка версія, починаючи із зазначеної, але не змінюючи старше і середнє число версії
Коли вам потрібно використовувати бібліотеку (або її версію), якої ще немає в індексі, на допомогу приходить alr pin. За допомогою цього ви можете вказати, де брати необхідну версію бібліотеки. Це може бути
шлях до каталогу
посилання на репозиторій (можливо із зазначенням гілки або конкретного коміту
Наприклад, ви зробили клон libhello
і виправили там щось. Ви можете
завантажити її в каталог, а в каталозі головного проєкту запустити
alr pin libhello -use=<шлях-до-libhello>
Або не завантажувати, а дати це зробити alire:
alr pin libhello \
--use=https://gihub.com/user/libhello --branch=my-fix
Не важко зробити це і модифікуючи файл маніфесту alire.toml
.
Якщо у вас накопичитися багато таких залежностей, можливо, настав час зібрати їх у свій власний індекс. Щоб дати знати Alire про новий індекс, достатньо запустити
alr index --name=index --add=https://github.com/user/alire-index.git#branch
Перечитати всі індекси з мережі можна командою alr index --update-all
.
Активація оточення#
Ще одна корисна команда, яку варто згадати це alr exec <command>
.
З її допомогою можна запустити команду в оточенні, створеному Alire для
поточного проєкту. У цьому оточенні налаштовані шляхи до компілятора
і залежностей, змінні оточення задані у файлах-маніфестах всіх переметрів.
За допомогою цієї команди ви можете запустити shell, редактор
або середовище розробки. Використовуйте два мінуси (--
) щоб задати
аргументи команди.
alr exec bash # Створити новий shell.
alr exec -- gnatstudio -P gnat/my_lib.gpr
Висновки#
Думаю цього достатньо, щоб почати використовувати у вашій роботі. Опанувавши установку збірку і створення своїх бібліотек, ви побачите, наскільки простіше стало створювати системи на Аді. Ба більше, ви зможете ділитися своїми напрацюваннями, поповнювати ком'юніті індекс, а іншим розробникам буде легко використовувати ваш код.
Напевно у вас виникнуть запитання. Alire має непогану документацію, з якою можна ознайомитися на сайті.