Перейти до вмісту

Erlang.mk

Матеріал з Вікіпедії — вільної енциклопедії.
Erlang.mk
ТипІнструмент автоматизації складання
АвторLoïc Hoguin
РозробникNine Nines та учасники проєкту
Операційна системаLinux, FreeBSD, macOS, Microsoft Windows
ЛіцензіяISC
РепозиторійGitHub
Вебсайтerlang.mk

Erlang.mk — вільний інструмент автоматизації збірки програм мовою Erlang, побудований на основі GNU Make. Він дає змогу компілювати код, завантажувати залежності, запускати тести, створювати документацію та готувати випуски застосунків Erlang/OTP. На відміну від інструментів, для яких потрібна окрема програма керування збиранням, Erlang.mk поширюється переважно як файл правил erlang.mk, що підключається до звичайного Makefile проєкту.[1][2]

Проєкт започаткував 2013 року розробник Loïc Hoguin під час роботи над HTTP-сервером Cowboy. Erlang.mk став одним з альтернативних засобів збирання в екосистемі Erlang поряд із Rebar і Rebar3.[3][1]

Історія

[ред. | ред. код]

Erlang.mk виник із прагнення спростити збирання й тестування Cowboy. Спочатку цей проєкт використовував Rebar, однак Hoguin вважав його тодішню роботу із тестами надто повільною. 5 січня 2013 року розробник прибрав залежність Cowboy від Rebar, а 1 травня створив окремий репозиторій Erlang.mk. Згодом інструмент вийшов за межі Cowboy: до нього додали підтримку різних способів отримання залежностей, каталог пакетів, перевірки та додаткові засоби збирання.[3]

Упродовж 2015 року розширили документацію та сумісність із проєктами, які використовували Rebar. Зокрема, з'явився механізм autopatch, який пристосовує завантажені залежності до збирання через Erlang.mk. Одним із великих проєктів, що перейшли на цей інструмент, став брокер повідомлень RabbitMQ: за свідченням автора Erlang.mk, його використовували починаючи з випуску RabbitMQ 3.6.0.[3] Представники команди RabbitMQ згодом відзначали зручність розширення Makefile власними правилами як одну з причин вибору Erlang.mk.[4]

Принцип роботи

[ред. | ред. код]

Основою Erlang.mk є правила GNU Make, які описують, які файли потрібно отримати, які команди виконати і від яких інших файлів залежить результат. Зазвичай достатньо помістити erlang.mk до каталогу проєкту та включити його в Makefile. Наприклад, конфігурація застосунку з бібліотекою Cowboy може виглядати так:[5][6]

PROJECT = webchat
DEPS = cowboy
include erlang.mk

Змінна PROJECT задає назву застосунку, а DEPS — потрібні зовнішні бібліотеки. Команда make отримує залежності, компілює їх і код самого проєкту. Окремі цілі, зокрема make tests, make docs і make rel, відповідають за перевірки, документацію й підготовку випуску.[1][5]

Erlang.mk використовує механізм відстеження залежностей між файлами, передбачений GNU Make. Після першого повного збирання він зазвичай повторно компілює лише ті частини проєкту, які потребують оновлення, наприклад після зміни модуля або підключеного заголовкового файлу. Це зменшує обсяг роботи під час послідовних збирань у процесі розробки.[7] Ще 2013 року Erlang-розробник Єспер Луїс Андерсен наводив результати власного порівняння з тодішнім Rebar, звертаючи увагу передусім на швидкість повторного збирання без змін; ці вимірювання стосувалися конкретного проєкту та версій інструментів того часу.[8]

Можливості

[ред. | ред. код]

Керування залежностями

[ред. | ред. код]

Erlang.mk завантажує й компілює бібліотеки, потрібні проєкту. Залежності можна отримувати з репозиторіїв Git, Mercurial і Subversion, із каталогу пакетів Hex або з локальних каталогів. Вбудований індекс дає змогу знаходити відомі бібліотеки командою make search, проте сам проєкт не позиціонує Erlang.mk як окрему повноцінну систему керування пакунками.[9]

Залежності розрізняються за призначенням: окремо можна вказати бібліотеки для роботи застосунку (DEPS), збирання (BUILD_DEPS), тестування (TEST_DEPS) та документації (DOC_DEPS). Для відтворюваного збирання передбачене закріплення версій залежностей, зокрема за допомогою файлу lock.mk і команди make lock.[9]

Тестування, аналіз і документація

[ред. | ред. код]

Erlang.mk інтегрується із засобами модульного тестування EUnit та системного тестування Common Test. Для статичного аналізу коду доступні Dialyzer і Xref, а для оцінювання покриття тестами — інструменти Erlang/OTP. Команди перевірки можуть використовуватися в процесах неперервної інтеграції. Документацію можна створювати за допомогою EDoc та AsciiDoc.[2]

Для збирання застосунків з компонентами мов C або C++ передбачена підтримка нативних функцій (NIF) і портових драйверів. Erlang.mk також може створювати виконувані сценарії escript та самодостатні випуски Erlang/OTP за допомогою інструмента relx.[2][10]

Порівняння з Rebar3

[ред. | ред. код]

На відміну від Erlang.mk, який використовує правила GNU Make, Rebar3 написаний мовою Erlang і керується переважно конфігураційним файлом rebar.config. Обидва інструменти забезпечують типові завдання розробки Erlang-застосунків: компіляцію, керування залежностями, тестування та створення випусків. Erlang.mk дозволяє розширювати процес збирання безпосередньо правилами Makefile та підключати додаткові модулі; Rebar3 має власну систему конфігурації й розширень.[1]

Erlang.mk може використовувати залежності, підготовлені для Rebar, а також генерувати допоміжні файли для сумісності в іншому напрямку. Водночас різні правила отримання й вибору версій залежностей у цих інструментах можуть призвести до відмінностей у результатах збирання.[11] В обговореннях розробники серед переваг Erlang.mk називали простоту додавання власних правил, а серед недоліків — незручності оновлення закріплених залежностей та складність підтримки великих Makefile.[4]

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. 1 2 3 4 Benavides, Brujo (6 вересня 2019). 10 Essential Erlang Tools for Erlang Developers. Pluralsight (англ.). Процитовано 21 жовтня 2026.
  2. 1 2 3 Overview. Erlang.mk User Guide (англ.). Процитовано 21 жовтня 2026.
  3. 1 2 3 Hoguin, Loïc. Short history. Erlang.mk User Guide (англ.). Процитовано 21 жовтня 2026.
  4. 1 2 Erlang.mk — have you used it?. Erlang Forums (англ.). 27 жовтня 2021. Процитовано 21 жовтня 2026.
  5. 1 2 Getting started. Erlang.mk User Guide (англ.). Процитовано 21 жовтня 2026.
  6. ↑ ninenines/erlang.mk. GitHub (англ.). Процитовано 21 жовтня 2026.
  7. ↑ Building. Erlang.mk User Guide (англ.). Процитовано 21 жовтня 2026.
  8. ↑ Andersen, Jesper L. (28 жовтня 2013). Why I use erlang.mk: instead of rebar. Medium (англ.). Процитовано 21 жовтня 2026.
  9. 1 2 Packages and dependencies. Erlang.mk User Guide (англ.). Процитовано 21 жовтня 2026.
  10. ↑ Hébert, Fred. Building Open Source Erlang Software. Stuff Goes Bad: Erlang in Anger (PDF) (англ.). с. 14. Процитовано 21 жовтня 2026.
  11. ↑ Compatibility with other build tools. Erlang.mk User Guide (англ.). Процитовано 21 жовтня 2026.

Посилання

[ред. | ред. код]