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

Базель
Базель logo.svg
Разработчики)Google
изначальный выпускМарт 2015 г.; 5 лет назад (2015-03)
Стабильный выпуск
3.7.0 / 20 октября 2020; 49 дней назад (2020-10-20)[1]
Репозиторий Отредактируйте это в Викиданных
Написано вЯва[2]
Операционная системаКроссплатформенность
ЛицензияЛицензия Apache 2.0
Интернет сайтбазель.строить Отредактируйте это в Викиданных

Базель это бесплатно программное обеспечение инструмент, позволяющий автоматизировать создание и тестирование программного обеспечения.[2] Компания Google использует инструмент сборки Пламя внутри[3] и выпустил часть инструмента Blaze с открытым исходным кодом под названием Bazel, названную как анаграмма пламени.[4] Bazel был впервые выпущен в марте 2015 года и получил статус бета-версии к сентябрю 2015 года.[5]

Подобно инструментам сборки, таким как Делать, Apache Ant, или же Apache Maven,[2][4] Базель строит программные приложения из исходный код используя набор правил. Правила и макросы созданы в Старларк язык (ранее назывался Skylark[6]), диалект Python.[4] Есть встроенные правила для создания программного обеспечения, написанного на языки программирования из Ява, C, C ++, Идти, Python, Цель-C и Оболочка Борна скрипты.[4][5] Bazel может производить пакеты программных приложений, подходящие для развертывания в операционных системах Android и iOS.[7]

При разработке Bazel упор был сделан на скорость сборки, правильность и воспроизводимость.[2][4] Инструмент использует распараллеливание, чтобы ускорить части процесса сборки.[4] Он включает Базель запрос язык, который можно использовать для анализа зависимостей сборки в сложных графах сборки.[4]

Обоснование

Одна из целей Bazel - создать систему сборки, в которой целевые входы и выходы сборки полностью определены и, следовательно, точно известны системе сборки.[7] Это позволяет более точно анализировать и определять устаревшие артефакты сборки в системе сборки. граф зависимостей. Повышение детерминированности анализа графа зависимостей приводит к потенциальному сокращению времени сборки за счет избежания повторного выполнения ненужных целей сборки. Надежность сборки повышается за счет исключения ошибок, когда цели сборки могут зависеть от устаревших входных артефактов.

Чтобы добиться более точного анализа графа зависимостей, Bazel использует дайджесты контента а не метки времени на основе файлов. Временные метки файлов обычно используются для обнаружения изменений в таких инструментах, как Make или Apache Ant. Отметки времени могут быть проблематичными, если сборки распределены по нескольким хостам из-за проблем с синхронизацией часов.[8] Одна из целей Bazel - обеспечить возможность распределенной и параллельной сборки в удаленной облачной инфраструктуре. Bazel также предназначен для масштабирования до очень больших репозиториев сборки, которые могут быть непрактичными для загрузки на рабочий компьютер отдельного разработчика.[9]

Bazel предоставляет инструменты, которые помогают разработчикам создавать воспроизводимые выходные данные сборки, идентичные битам. Реализованные в Bazel правила избегают типичных ошибок, таких как встраивание временных меток в сгенерированные выходные данные, чтобы гарантировать совпадение дайджеста контента. Это, в свою очередь, позволяет системе сборки надежно кэшировать (запоминать ) выходы промежуточных шагов сборки. Кроме того, воспроизводимая сборка позволяет обмениваться промежуточными результатами сборки между командами или отделами в организации, используя выделенные серверы сборки или распределенные кэши. Поэтому Bazel особенно хорошо подходит для крупных организаций и программных проектов, которые имеют значительное количество зависимостей сборки. Детерминированная сборка и способность точно анализировать входные и выходные артефакты сборки по графу зависимостей позволяют выполнять параллельное выполнение шагов сборки.

Bazel расширяется с помощью специального языка программирования Starlark. Старларк использует синтаксис, который является подмножеством синтаксиса языка программирования Python. Однако Starlark не реализует многие языковые функции Python, такие как возможность изменять коллекции или получать доступ к файловому вводу-выводу, чтобы избежать расширений, которые могут создавать побочные эффекты или создавать выходные данные сборки, неизвестные самой системе сборки. Такие побочные эффекты потенциально могут привести к некорректному анализу графа зависимостей сборки.

Bazel был разработан как многоязычная система сборки. Многие часто используемые системы сборки разработаны с предпочтением определенного языка программирования. Примеры таких систем включают Ant и Maven для Java, Leiningen за Clojure, сбт за Scala и т.д. В многоязычном проекте объединение отдельных систем сборки и достижение описанных выше преимуществ скорости сборки и корректности может быть трудным и проблематичным.

Bazel также обеспечивает выполнение сборки в песочнице. Это можно использовать для обеспечения того, чтобы все зависимости сборки были правильно указаны и сборка не зависит, например, от библиотек, установленных только локально на рабочем компьютере разработчика. Это помогает гарантировать, что сборки остаются переносимыми и могут выполняться в других (удаленных) средах.

Системы сборки, наиболее похожие на Базель, - это Штаны,[10] Бак, и пожалуйста.[11][12] Брюки и Бак преследуют те же цели технического дизайна, что и Bazel, и были вдохновлены системой сборки Blaze, используемой внутри Google. Blaze также является предшественником Bazel. Bazel, Pants, Buck и Please приняли Starlark в качестве парсера файла BUILD в соответствии с его синтаксисом файла BUILD. Независимо разработанные системы сборки с аналогичными целями эффективного анализа графа зависимостей и автоматического отслеживания артефактов сборки были реализованы в таких системах сборки, как tup.[13]

Песочница

Одной из ключевых особенностей, отличающих Bazel от других систем сборки, является использование песочница для этапов компиляции. Когда Bazel выполняет отдельную компиляцию, он создает новый каталог и заполняет его символическими ссылками на явные входные зависимости для правила. Для таких языков, как C / C ++, это обеспечивает значительную безопасность для включения файлов заголовков: это гарантирует, что разработчик знает о файлах, которые используются при компиляции, и предотвращает неожиданное включение файла заголовка с таким же именем из другой каталог include.

Такой подход «песочницы» приводит к проблемам с общими инструментами сборки, что приводит к ряду обходных решений, необходимых для правильной компиляции кода для разных архитектур. Например, при выполнении отдельной компиляции для архитектур Mac / Darwin компилятор записывает входные пути в символы SO и OSO в двоичном файле Mach-O, что можно увидеть с помощью такой команды, как nm -a mybinary | grep SO. Эти пути нужны для поиска символов при отладке. В результате сборки в Bazel должны исправлять скомпилированные объекты постфактум, пытаясь исправить проблемы, связанные с путями, которые возникли при построении песочницы, используя такие флаги, как -fdebug-префикс-карта и -oso_prefix, последний, который стал доступен только недавно, XCode 11.0. Аналогичная обработка должна происходить на этапах компоновки, переписывая значения rpath в библиотеках общих объектов с помощью такой команды, как install_name_tool.[14]

Старый логотип Базель

С момента первого выпуска Bazel логотипом была зеленая буква «b», стилизованная под стебель базилика с двумя листьями.

5 июля 2017 года в блоге Bazel был анонсирован новый логотип,[15] состоящий из трех зеленых строительных блоков, расположенных в форме сердца.

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

Рекомендации

  1. ^ «Релизы · bazelbuild / bazel». GitHub.
  2. ^ а б c d Егулалп, Сердар (11 сентября 2015 г.). "Масштабируемый программный инструмент с открытым исходным кодом Google, не зависящий от языка". InfoWorld. В архиве из оригинала 25 октября 2017 г.. Получено 25 июн 2016.
  3. ^ Бейер, Бетси; Джонс, Крис; Петофф, Дженнифер; Мерфи, Найл Ричард. Разработка надежности сайта: как Google управляет производственными системами. "O'Reilly Media, Inc.". п. 90. ISBN  9781491951187. Получено 25 июн 2016.
  4. ^ а б c d е ж грамм Болтон, Дэвид (27 апреля 2015 г.). "Bazel, система сборки с открытым исходным кодом Google - новый стек". thenewstack.io. Новый стек. В архиве из оригинала 24 октября 2017 г.. Получено 25 июн 2016.
  5. ^ а б Доус, Райан. "Инструмент Google для создания программного обеспечения Bazel готовится к бета-версии". www.developer-tech.com. Разработчик Tech. В архиве из оригинала 23 октября 2017 г.. Получено 25 июн 2016.
  6. ^ «Старларк - Базель». blog.bazel.build. Получено 2018-10-18.
  7. ^ а б «FAQ - Базель». bazel.build. Получено 25 июн 2016.
  8. ^ "Что не так с GNU make?".
  9. ^ Натан Йорк (23 сентября 2011 г.). «Сборка в облаке: распределение этапов сборки». google-engtools.blogspot.com.
  10. ^ «Штаны: быстрая масштабируемая система сборки».
  11. ^ «Бак: высокопроизводительный инструмент для сборки».
  12. ^ Пожалуйста, FAQ
  13. ^ Майк Шал (2009). «Постройте системные правила и алгоритмы» (PDF).
  14. ^ "инструменты / cpp / osx_cc_wrapper.sh". Github.
  15. ^ Стерен Джаннини (5 июля 2017 г.). «Новый логотип и домашняя страница для Базэла».

внешняя ссылка