Meson (МФА [ˈmiːzɒn]; с англ. — «мезон»[⇨]) — это кроссплатформенная консольная утилита, автоматизирующая процесс сборки программного обеспечения из исходного кода. Meson имеет открытый исходный код и распространяется под лицензией Apache. Основная идея Meson — совершать максимально быструю сборку и не затрачивать ни капли времени на отладку и тестирование, а так же на ожидание начала самого процесса компиляции. Утилита также имеет и более длинное, полное название — «The Meson build system» (Система сборки Мезон). Но, несмотря на то, что Meson официально позиционируется как система сборки, на самом деле таковой не является, так как в своей основе использует другую утилиту — систему сборки Ninja и ряд некоторых других утилит[6][7].

Meson
Логотип программы Meson
Скриншот программы Meson
Процесс сборки dav1d (кодек-декодер из проекта VideoLAN) с помощью Meson
Тип система сборки[d]
Разработчик Юсси Пакканен[d][2]
Написана на Python[3]
Операционные системы Unix-подобная операционная система[4] и Windows
Языки интерфейса английский
Первый выпуск 2 марта 2012
Аппаратная платформа кроссплатформенность[4]
Последняя версия
Репозиторий github.com/mesonbuild/me…
Состояние активное
Лицензия Apache License 2.0[5][2]
Сайт mesonbuild.com (англ.)
Логотип Викисклада Медиафайлы на Викискладе

История править

Создание править

Первая версия Meson появилась в период рождественских праздников 2012 года и была разработана финским физиком-программистом Юсси Пакканеном. Разработчик был удручён тем, в каком состоянии прибывали на тот период времени системы автоматизации сборки. Многие не понравились ему тем, что работали слишком медленно, некоторые были слишком сложны в практическом применении, а другие имели слишком переусложнённый и неясный синтаксис. Не найдя желаемой системы сборки, Юсси решился потратить своё свободное время в эти праздничные выходные и создать свою собственную систему сборки, которая удовлетворяла бы его потребности[8][9].

Этимология править

Название утилиты подбиралось с учётом того, что оно не должно было совпадать с названием какого-либо пакета из базы пакетного менеджера системы Debian или с каким-либо проектом в базе SourceForge. Так как Юсси физик-программист, в какой-то момент он решил использовать в качестве названия имя элементарной частицы — Глюон (англ. Gluon, от слова glue — клей), подразумевая, что «глюоны — это элементарные частицы, которые удерживают протоны и нейтроны вместе, подобно тому, как задача системы сборки состоит в том, чтобы взять фрагменты исходного кода и компилятора, а затем связать их в единое целое». Но, увы, данное имя уже было занято, затем, перебрав несколько оставшихся субатомных частиц, он выяснил, что имя частицы мезон оказалось свободным[10].

Возможности править

Заявленной целью Meson является содействие современным методам разработки. Таким как использование метода «единой сборки[en]», сборки с покрытием кода тестами, LTO оптимизации (link time optimization) и т. д. Без необходимости программиста писать для этого поддержку.

Переносимость править

Будучи написанным на Python, Meson изначально работает в Unix-подобных операционных системах, включая macOS, а также Microsoft Windows и в ряде других операционных систем.

Meson поддерживает языки Си, C++, CUDA, D, Objective-C, Фортран, Java, C#, Rust, Vala[11] и имеет механизм обработки зависимостей, так называемый «Wrap»[12].

Meson поддерживает GNU Compiler Collection, Clang, Microsoft Visual C++ и другие компиляторы, включая нетрадиционные компиляторы, такие как Emscripten и Cython[13][14]. При этом, Meson самостоятельно принимает решение о том, какой компилятор и с какими параметрами следует использовать. А кросс-компиляция проектов требует дополнительной конфигурации, которую Meson поддерживает в виде отдельного файла, который может быть внешним по отношению к проекту Meson[15].

Meson использует Ninja в качестве основной системы сборки, но также может использовать Microsoft Visual Studio или Xcode.

Подпроекты править

Meson может автоматически находить и использовать внешние зависимости с помощью pkg-config, CMake и поиска по конкретным проектам[16], но это позволяет находить только установленные зависимости, с которыми Meson ничего не может поделать. В качестве альтернативы или в качестве запасного варианта, зависимость может быть предоставлена в виде подпроекта — проекта Meson внутри другого, либо содержащегося в виде ссылки для внешней загрузки, возможно с патчами[12]. Это позволяет Meson разрешить «ад зависимостей» ради удобства обыкновенных пользователей, которые хотят скомпилировать проект, но также может способствовать раздуванию ПО в размерах, если вместо этого можно было использовать общую установленную зависимость. Таким образом, предпочтительный режим использования пакетов Linux уходит на второй план.

Meson помимо собственной системы подпроектов, поддерживает и систему подпроектов CMake. Файл сборки Meson может также ссылаться на службу Wrap DB[17].

Интеграция с ИСР править

Meson изначально имеет встроенную поддержку Visual Studio и XCode, но для упрощения интеграции с самыми разными ИСР, было разработано специальное API решающие данную проблему. Для этого, каждый раз при запуске сборки Meson создаёт папку «meson-info» и помещает в ней информационные файлы формата JSON. С помощью данных файлов любая программа может получит подробную информацию о собираемых проектах[18].

Язык править

Синтаксис файлов описания сборки Meson (язык Meson) заимствован от Python, но сам не является языком Python. Он был создан таким образом, что его можно повторно реализовать на любом другом языке[19][20]. Например, Meson++[21] является реализацией на языке C++, зависимость от языка Python является лишь деталью реализации.

Язык Meson целенаправленно не является тьюринг-полным и следовательно не может выражать произвольную программу[22]. Вместо этого произвольные этапы сборки, выходящие за рамки компиляции поддерживаемых языков, могут быть представлены в виде пользовательских целей[23].

Язык Meson строго типизирован, так что встроенные типы, такие как библиотека, исполняемый файл, строки и их списки, не являются взаимозаменяемыми[24]. Переменные не имеют видимого типа, что также делает Meson динамически типизированным. В отличие от того же Make, тип списка не разделяет строки на пробелы[25].

Пример править

Создадим «Hello, World!» проект на языке Си, файл будет называться «main.c».

#include <stdio.h>

int main()
{
    puts("Hello, World!");
    return 0;
}

Далее рядом с ним создаём файл — «meson.build».

project('tutorial', 'c')      # tutorial — имя проекта,
                              # c — язык программирования

executable('demo', 'main.c')  # demo — имя исполняемого файла,
                              # «main.c» — файл исходного кода

Для начала инициализируем проект.

$ meson setup builddir

Появится каталог «builddir», перейдём в него и соберём наш проект.

$ cd builddir
$ meson compile

Исполняемый файл готов, осталось лишь запустить.

$ ./demo

Программные проекты использующие Meson править

Из списка программных проектов можно отметить наиболее значимые и влиятельные[26]:

См. также править

Примечания править

  1. Release 1.4.0 — 2024.
  2. 1 2 The Meson Build system: Legal information (англ.)
  3. Meson build system on Open Hub: Languages Page (англ.)
  4. 1 2 The Meson Build system (англ.)
  5. GitHub: COPYING (англ.)
  6. Выпуск сборочной системы Meson 0.58. Проект по созданию реализации Meson на языке Си. OpenNET (2 мая 2021). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  7. Meson manual: Running Meson — Building from the source. Building directory with ninja (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  8. Tim Schürmann. Meson — новая система сборки программного обеспечения. rus-linux.net (18 апреля 2017). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  9. Tim Schürmann. Meson — a new build system (англ.). Linux Magazine (1 сентября 2014). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  10. Why is it called Meson? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  11. The Meson Build System: Functions — project() (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 10 февраля 2022 года.
  12. 1 2 The Meson Build System: Wrap dependency system manual (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  13. The Meson Build System: Compiler ids (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 21 февраля 2022 года.
  14. Jussi Pakkanen. How compilation works (англ.) (PDF). meson-manual.com (2020). Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  15. The Meson Build System: Cross compilation (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  16. The Meson Build System: Dependencies — Dependencies with custom lookup functionality (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 21 февраля 2022 года.
  17. The Meson Build System: Meson WrapDB packages (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  18. The Meson Build System: Manual — IDE integration (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  19. The Meson Build System: FAQ — Why is Meson implemented in Python (rather than programming language X)? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  20. The Meson Build System: FAQ — But I really want a version of Meson that doesn't use python! (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  21. Meson++ (англ.). GitHub. Дата обращения: 22 января 2022. Архивировано 6 января 2022 года.
  22. The Meson Build System: FAQ — Why is Meson not just a Python module so I could code my build setup in Python? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  23. The Meson Build System: FAQ — I have proprietary compiler toolchain X that does not work with Meson, how can I make it work? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  24. The Meson Build System: Syntax (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  25. The Meson Build System: FAQ — Why is there not a Make backend? (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.
  26. The Meson Build System: Additional documentation — List of projects using Meson (англ.). mesonbuild.com. Дата обращения: 22 января 2022. Архивировано 23 января 2022 года.

Ссылки править