Базель (программное обеспечение)

Программный инструмент, автоматизирующий сборку и тестирование программного обеспечения
Базель
Разработчик(и)Google
Первоначальный выпускМарт 2015 ; 9 лет назад (2015-03)
Стабильный релиз
8.0.0 / 9 декабря 2024 г. ; 54 дня назад [1] (2024-12-09)
Репозиторий
  • github.com/bazelbuild/bazel
Написано вЯва [2]
Операционная системаКроссплатформенный
ЛицензияЛицензия Apache 2.0
Веб-сайтbazel.build 

Bazel ( / ˈ b 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]

Смотрите также

Ссылки

  1. ^ "Релизы · bazelbuild/bazel". GitHub .
  2. ^ abc Yegulalp, Serdar (11 сентября 2015 г.). "Google open-sources language-agnostic, scalable software tool". InfoWorld . Архивировано из оригинала 25 октября 2017 г. . Получено 25 июня 2016 г. .
  3. ^ "FAQ - Bazel". bazel.build . Архивировано из оригинала 2016-11-06.
  4. ^ abcd Болтон, Дэвид (27 апреля 2015 г.). «Bazel, система сборки с открытым исходным кодом от Google — новый стек». thenewstack.io . Новый стек. Архивировано из оригинала 24 октября 2017 г. . Получено 25 июня 2016 г. .
  5. ^ "Starlark - Bazel". blog.bazel.build . Получено 2018-10-18 .
  6. ^ ab Daws, Ryan (10 сентября 2015 г.). «Bazel, инструмент для сборки программного обеспечения от Google, выходит в бета-версию». www.developer-tech.com . Developer Tech. Архивировано из оригинала 23 октября 2017 г. . Получено 25 июня 2016 г. .
  7. ^ "FAQ - Bazel". bazel.build . Получено 25 июня 2016 г. .
  8. ^ Вермёлен, Стив (21 ноября 2023 г.). «Bazel, от Blaze до Buck2 — краткая история современных систем сборки Monorepo».
  9. ^ Бейер, Бетси; Джонс, Крис; Петофф, Дженнифер; Мерфи, Ниалл Ричард (23 марта 2016 г.). Инженерия надежности сайта: как Google управляет производственными системами. "O'Reilly Media, Inc.". стр. 90. ISBN 9781491951187. Получено 25 июня 2016 г.
  10. ^ Уинтерс, Титус; Маншрек, Том; Райт, Хайрам. Разработка программного обеспечения в Google . O'Reilly. стр. 372.
  11. ^ "Bazel 1.0". blog.bazel.build . Получено 29.10.2023 .
  12. ^ Мохов, Андрей и Митчелл, Нил и Пейтон Джонс, Саймон (2018). «Build Systems à la Carte». Труды ACM по языкам программирования . 2 (ICFP): 1– 29. doi : 10.1145/3236774 .{{cite journal}}: CS1 maint: multiple names: authors list (link)
  13. ^ "Язык Starlark". bazel.build .
  14. ^ «Pants: Быстрая, масштабируемая система сборки».
  15. ^ «Buck: Высокопроизводительный инструмент сборки».
  16. ^ Пожалуйста, FAQ
  17. ^ Система сборки Amazon
  18. ^ Шал, Майк (2009). «Правила и алгоритмы систем сборки» (PDF) .
  19. ^ "tools/cpp/osx_cc_wrapper.sh". Github. 5 февраля 2022 г.
  20. ^ Джаннини, Стерен (5 июля 2017 г.). «Новый логотип и домашняя страница для Bazel».
  21. ^ «Кто использует Bazel».
  22. ^ «Создание систем реального времени с Bazel и SpaceX». 11 декабря 2017 г. – через YouTube .
  23. ^ «Быстрые сборки, безопасные сборки. Выберите два». 4 мая 2022 г.
  24. ^ «Bazel Hermetic Toolchain и миграция инструментов». 13 июня 2022 г.
  25. ^ https://www.uber.com/en-DE/blog/go-monorepo-bazel/
  • Официальный сайт
Retrieved from "https://en.wikipedia.org/w/index.php?title=Bazel_(software)&oldid=1270588406"