Базель (программное обеспечение)
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2024 г. ) |
![]() | Эта статья содержит контент, написанный как реклама . ( Октябрь 2019 г. ) |
![]() | |
Разработчик(и) | |
---|---|
Первоначальный выпуск | март 2015 г |
Стабильная версия | 7.1.1 / 21 марта 2024 г [1] |
Репозиторий | |
Написано в | Ява [2] |
Операционная система | Кросс-платформенный |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | Базель ![]() |
Базель ( / ˈ b eɪ z рука / [3] ) — это бесплатный инструмент с открытым исходным кодом, программный используемый для автоматизации создания и тестирования программного обеспечения. [2] Google использует инструмент сборки Blaze внутри компании [4] и выпустила порт инструмента Blaze с открытым исходным кодом под названием Bazel, названный как анаграмма Blaze. [5] Впервые Bazel был выпущен в марте 2015 года и вступил в бета-версию к сентябрю 2015 года. [6] Версия 1.0 была выпущена в октябре 2019 года. [7]
Подобно инструментам сборки, таким как Make , Apache Ant и Apache Maven , [2] [5] Bazel создает программные приложения из исходного кода с использованием правил. Правила и макросы создаются на языке Starlark (ранее называвшемся Skylark), [8] диалект Python . [5] Существуют встроенные правила для создания программного обеспечения, написанного на Java , Kotlin , Scala , C , C++ , Go , Python , Rust , JavaScript , Objective-C и bash . скриптах [5] [6] «Базель» может производить пакеты программных приложений, подходящие для развертывания для Android и iOS операционных систем . [9]
Обоснование [ править ]
Одна из целей Bazel — создать систему сборки, в которой входные и выходные данные целей сборки полностью определены, обеспечивая точные знания внутри системы сборки. [9] Это позволяет более точно анализировать и определять устаревшие артефакты сборки в графе зависимостей системы сборки . Повышение детерминированности анализа графа зависимостей приводит к потенциальному сокращению времени сборки за счет предотвращения повторного выполнения ненужных целей сборки. Надежность сборки повышается за счет исключения ошибок, в которых цели сборки могут зависеть от устаревших входных артефактов.
Bazel использует дайджесты контента, а не временные метки на основе файлов. Временные метки файлов обычно используются для обнаружения изменений в таких инструментах, как Make или Apache Ant. Временные метки могут быть проблематичными, когда сборки распространяются на несколько хостов из-за проблем с синхронизацией часов. [10] Еще одна цель Bazel — обеспечить возможность распределенного и параллельного построения удаленной облачной инфраструктуры. Он также предназначен для масштабирования до очень больших репозиториев сборок, загрузка которых на рабочую машину отдельного разработчика может оказаться непрактичной. [11]
Язык жаворонков [ править ]
Bazel расширяется за счет специального языка программирования Starlark. Starlark использует синтаксис, который является подмножеством синтаксиса языка программирования Python. Однако он не реализует многие функции языка Python, такие как возможность изменять коллекции или получать доступ к файловому вводу-выводу, чтобы избежать расширений, которые могут создавать побочные эффекты или создавать выходные данные сборки, неизвестные самой системе сборки. . Такие побочные эффекты потенциально могут привести к неправильному анализу графа зависимостей сборки.
Bazel был разработан как многоязычная система сборки. Многие широко используемые системы сборки разработаны с упором на определенный язык программирования. Примеры таких систем включают Ant и Maven для Java, Leiningen для Clojure , sbt для Scala и т. д. В многоязычном проекте объединение отдельных систем сборки и достижение описанных выше преимуществ в скорости и корректности сборки может оказаться трудным и проблематичным.
Bazel также обеспечивает выполнение сборки в песочнице. Это можно использовать для того, чтобы убедиться, что все зависимости сборки указаны правильно и сборка не зависит, например, от библиотек, установленных только локально на рабочем компьютере разработчика. Это помогает гарантировать, что сборки остаются переносимыми и могут быть выполнены в других (удаленных) средах.
Системы сборки, наиболее похожие на «Базель», — это «Штаны», [12] Бак , и пожалуйста. [13] [14] Pants и Buck преследуют схожие цели технического проектирования, поскольку Bazel и Pants были вдохновлены системой сборки Blaze, используемой внутри Google. Blaze также является предшественником Bazel. Bazel, Pants, Buck и Please использовали Starlark в качестве анализатора файлов BUILD в соответствии с синтаксисом файла BUILD. Независимо разработанные системы сборки с аналогичными целями эффективного анализа графов зависимостей и автоматического отслеживания артефактов сборки были реализованы в таких системах сборки, как tup. [15]
Песочница [ править ]
Одной из ключевых особенностей, отличающих 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
. [16]
Логотип [ править ]

С момента первого выпуска Bazel логотип представлял собой зеленую букву «b», стилизованную под стебель базилика с двумя листьями. 5 июля 2017 года блог Bazel анонсировал новый логотип: [17] состоит из трех зеленых строительных блоков, образующих сердце.
См. также [ править ]
Ссылки [ править ]
- ^ «Релизы · bazelbuild/bazel» . Гитхаб .
- ^ Перейти обратно: а б с Егулалп, Сердар (11 сентября 2015 г.). «Масштабируемый программный инструмент Google с открытым исходным кодом, независимый от языка» . Инфомир . Архивировано из оригинала 25 октября 2017 года . Проверено 25 июня 2016 г.
- ^ «FAQ-Базэл» . bazel.build . Архивировано из оригинала 06.11.2016.
- ^ Бейер, Бетси; Джонс, Крис; Петофф, Дженнифер; Мерфи, Найл Ричард (23 марта 2016 г.). Проектирование надежности сайта: как Google управляет производственными системами . «О'Рейли Медиа, Инк.». п. 90. ИСБН 9781491951187 . Проверено 25 июня 2016 г.
- ^ Перейти обратно: а б с д Болтон, Дэвид (27 апреля 2015 г.). «Bazel, система сборки Google с открытым исходным кодом — новый стек» . thenewstack.io . Новый стек. Архивировано из оригинала 24 октября 2017 года . Проверено 25 июня 2016 г.
- ^ Перейти обратно: а б Доус, Райан (10 сентября 2015 г.). «Инструмент для сборки программного обеспечения Google Bazel скоро выйдет в бета-версию» . www.developer-tech.com . Разработчик Тех. Архивировано из оригинала 23 октября 2017 года . Проверено 25 июня 2016 г.
- ^ «Базель 1.0» . blog.bazel.build . Проверено 29 октября 2023 г.
- ^ «Жаворонок – Базель» . blog.bazel.build . Проверено 18 октября 2018 г.
- ^ Перейти обратно: а б «FAQ-Базэл» . bazel.build . Проверено 25 июня 2016 г.
- ^ «Что не так с GNU make?» . Архивировано из оригинала 13 августа 2016 г. Проверено 23 апреля 2017 г.
- ^ Йорк, Натан (23 сентября 2011 г.). «Сборка в облаке: распределение этапов сборки» . google-engtools.blogspot.com .
- ^ «Штаны: быстрая и масштабируемая система сборки» .
- ^ «Бак: высокопроизводительный инструмент для сборки» .
- ^ Пожалуйста, часто задаваемые вопросы
- ^ Шал, Майк (2009). «Правила и алгоритмы создания системы» (PDF) .
- ^ "инструменты/cpp/osx_cc_wrapper.sh" . Гитхаб. 5 февраля 2022 г.
- ^ Джаннини, Стерен (5 июля 2017 г.). «Новый логотип и домашняя страница Базела» .