This article contains promotional content. (October 2019) |
Разработчик(и) | |
---|---|
Первоначальный выпуск | Март 2015 (2015-03) |
Стабильный релиз | 8.0.0 / 9 декабря 2024 г. (2024-12-09) [1] |
Репозиторий |
|
Написано в | Ява [2] |
Операционная система | Кроссплатформенный |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | bazel.build |
Bazel ( / ˈ b eɪ z əl / [3] ) — это бесплатный программный инструмент с открытым исходным кодом, используемый для автоматизации разработки и тестирования программного обеспечения. [2]
Подобно инструментам сборки, таким как Make , Apache Ant и Apache Maven , [2] [4] Bazel собирает программные приложения из исходного кода с использованием правил. Правила и макросы создаются на языке Starlark, [5] диалекте Python . [4] Существуют встроенные правила для сборки программного обеспечения, написанного на Java , Kotlin , Scala , C , C++ , Go , Python , Rust , JavaScript , Objective-C и скриптах bash . [4] [6] Bazel может создавать пакеты программных приложений, подходящие для развертывания в операционных системах Android и iOS . [7]
В 2006 году [8] Google начала разработку инструмента сборки под названием Blaze . [9] Мотивацией было создание системы сборки, которая обеспечивала бы как скорость, так и корректность в большом монорепозитории . [10]
Bazel был создан как порт Blaze с открытым исходным кодом, используя его анаграмму в качестве названия. [4] Bazel был впервые выпущен в марте 2015 года и вошел в стадию бета-тестирования в сентябре 2015 года. [6] Версия 1.0 была выпущена в октябре 2019 года. [11]
Bazel описывается как «одна из первых систем облачной сборки с открытым доступом». Она способна сохранять историю ранее выполненных команд и делиться результатами между несколькими пользователями. [12] Для этого Bazel требует, чтобы входы и выходы целевых объектов сборки были полностью указаны.
Bazel расширяем с помощью языка программирования Starlark. [13] Starlark — это встроенный язык, синтаксис которого является подмножеством синтаксиса Python . Однако он не реализует многие языковые возможности Python, такие как возможность доступа к файловому вводу-выводу, чтобы избежать расширений, которые могут создавать побочные эффекты или создавать выходные данные сборки, неизвестные самой системе сборки. Такие побочные эффекты могут потенциально привести к неправильному анализу графика зависимостей сборки.
Bazel был разработан как многоязыковая система сборки. Он способен собирать программное обеспечение, объединяя несколько языков программирования в одном репозитории .
Многие часто используемые системы сборки разработаны с предпочтением определенного языка программирования. Примерами таких систем являются Ant и Maven для Java, Leiningen для Clojure , sbt для Scala и т. д. В репозитории с несколькими языками объединение отдельных систем сборки и достижение описанных выше преимуществ скорости и корректности сборки может быть сложным и проблематичным.
Системы сборки, наиболее похожие на Bazel, — это Pants, [14] Buck , [15] Please, [16] и система сборки Brazil, используемая внутри Amazon . [17] Pants и Buck нацелены на те же технические цели дизайна, что и Bazel, при этом Pants вдохновлена системой сборки Blaze, используемой внутри Google.
Bazel, Pants, Buck и Please приняли Starlark в качестве анализатора файлов BUILD, в соответствии с его синтаксисом файлов BUILD. Независимо разработанные системы сборки с аналогичным использованием в эффективном анализе графа зависимостей и автоматизированном отслеживании артефактов сборки были реализованы в системах сборки, таких как tup. [18]
Bazel использует песочницу для этапов компиляции. Когда Bazel выполняет отдельную компиляцию, он создает новый каталог и заполняет его символическими ссылками на явные входные зависимости для правила. Для таких языков, как C или C++, это требует от пользователя явного указания зависимостей и предотвращает неожиданное включение похоже названного заголовочного файла из другого включающего каталога.
Этот подход песочницы приводит к проблемам с общими инструментами сборки, что приводит к ряду обходных путей, необходимых для правильной компиляции кода в различных архитектурах. Например, при выполнении отдельной компиляции для архитектур Mac/Darwin компилятор записывает входные пути в символы SO и OSO в двоичном файле Mach-O , что можно увидеть с помощью команды типа nm -a mybinary | grep SO
. Эти пути необходимы для поиска символов во время отладки. В результате сборки в Bazel должны исправлять скомпилированные объекты постфактум, пытаясь исправить проблемы, связанные с путями, которые возникли при построении песочницы, с помощью флагов типа -fdebug-prefix-map
и -oso_prefix
, последний стал доступен в Xcode 11.0 . Подобная обработка должна иметь место на этапах связывания, переписывая значения rpath в библиотеках общих объектов с помощью команды типа install_name_tool
. [19]
С момента первоначального выпуска Bazel логотип представлял собой зеленую букву «b», стилизованную под стебель базилика с двумя листьями. 5 июля 2017 года блог Bazel анонсировал новый логотип [20] , состоящий из трех зеленых строительных блоков, расположенных в форме сердца.
Bazel обычно используется компаниями. [21] Несколько известных пользователей включают Google , SpaceX , [22] Stripe , [23] Tinder , [24] и Uber . [25]
{{cite journal}}
: CS1 maint: multiple names: authors list (link)