LINUX.ORG.RU

Google открыла внутреннюю систему сборки — Bazel

 , , ,


4

4

Основные возможности

  • Поддержка разных языков программирования: Bazel поддерживает Java, Objective-C и C++, а также может быть расширен для поддержки других языков.
  • Высокоуровневый язык конфигурирования сборки: проекты конфигурируются с помощью языка BUILD-файлов, в компактном текстовом формате, который описывает проекты как наборы небольших, взаимосвязанных библиотек, исполняемых файлов и тестов. В отличии от Bazel, Makefile, например, содержат описания конкретных файлов и параметров запуска компилятора.
  • Поддержка множества платформ: один и тот же инструмент используется для сборки ПО для различных архитектур и даже разных платформ. Google использует Bazel для сборки как серверного ПО, так и клиентских приложений на мобильных телефонах.
  • Воспроизводимость результатов: в BUILD файлах каждая библиотека, тест или исполняемый файл прямо указывают свои непосредственные зависимости. Bazel использует эту информацию, чтобы определять, как пересобирать двоичные файлы и параллельно выполнять тесты. Это означает, что все сборки инкрементальны и приводят к одинаковым результатам.
  • Масштабируемость: Bazel легко справляется с большими сборками. В Google достаточно часто серверные приложения занимают 100k строк кода и сборки ветки без отличий от кода основного репозитория могут занимать около 200 мс.
  • Make, Ninja? Эти приложения дают доступ к очень низкоуровневому контролю над выполнением сборки, но пользователь обязан следить за малейшими нюансами и их обеспечивать их правильность. Пользователи взаимодействуют с Bazel на высоком уровне. Примерами правил являются «Javа-тест», «исполняемый файл C++», также существует понятие «целевая платформа». Эти правила показали себя очень удобными на практике и легкими в использовании.
  • Ant и Maven? Ant и Maven в основном используются для Java, в то время как Bazel поддерживает множество языков. Bazel поощряет разделение кодовой базы на мелкие и легко используемые модули и может пересобирать только те модули, которые нуждаются в сборке. Это значительно увеличивает скорость разработки.
  • Gradle? Конфигурационные файлы Bazel значительно более структурированы, позволяя Bazel делать исключительно то, что описывается в тех правилах, которые он поддерживает. Это улучшает параллелизм и повторяемость результатов сборки.
  • Buck, Pants? Обе эти системы сборки были созданы бывшими сотрудниками Google, работающими в Twitter и Facebook. Они были основаны на Bazel, но их функциональность так и не смогла сравниться с оригиналом, потому они никогда не стали возможными альтернативами для самой Google.

Внутри Google используются большие кластеры сборки, они не входят в открытую версию Bazel, которая работает на локальной машине пользователя. В то же время существует поддержка добавления пользовательских удаленных кластеров сборки или кешей двоичных файлов. Такие системы значительно ускоряют сборку двоичных файлов из исходных кодов, которые незначительно отличаются от огромной кодовой базы в основной ветке.

Пример BUILD-файла, который на самом деле является скриптом на Python.

cc_library(
    name = "sign-in",
    srcs = ["sign_in.cc"],
    hdrs = ["sign_in.h"],
    deps = ["//external:openssl"],
)

java_binary(
    name = "java-tool",
    srcs = [
        "RunTool.java",
    ],
)

>>> Подробности

★★★★☆

Проверено: leave ()

Питохон поверх жабы... Система сборки... Гугел совсем из ума выжил. NIH синдром, не иначе.

anonymous ()

CYB3R, сорри, я, возможно, затер какие-то твои правки (

leave ★★★★★ ()

Чем оно лучше cmake (если для c++)?

anonymous ()

клиентских приложений на мобильных телефонах

в смысле «программы собираются на телефоне» или «собираются программы для телефонов»?

nagibator ()

Вроде годно. Если будет хорошая интеграция с идешками и качественные плагины, можно будет уйти с gradle.

memnek ()
Ответ на: комментарий от leave

Не, я пока только длинное тире в заголовок поставил.

CYB3R ★★★★★ ()

Т.е. чтобы собрать проект на плюсах надо ставить jdk? Круто, чо.

Shadow1251 ()

В Google достаточно часто серверные приложения занимают 100k строк кода и сборки ветки без отличий от кода основного репозитория могут занимать около 200 мс.

Причём здесь вообще количество строк кода? Главное количество файлов в которых этот код.

Почему не ... Make, Ninja? Эти приложения дают доступ к очень низкоуровневому контролю над выполнением сборки, но пользователь обязан следить за малейшими нюансами и их обеспечивать их правильность.

Make да.

А к чему они сюда прилепили Ninja? У которого основной целью заявлено НЕ быть высокоуровневым языком и тем более мета системой сборки. А как раз наоборот, быть ассемблером сборки с высокоуровневой частью такой как Bazel.

Dendy ★★★★★ ()

Опа, qmake-style

Интересно про параллелизм и кластеры сборки.

northerner ★★★ ()

Никчемный отстой для организации корпоративного быдлокодинга.

AVL2 ★★★★★ ()

Звучит интересно, надо будет повнимательнее посмотреть. Особенно понравилась часть «почему не...», побольше бы людей так оформляло.

Weres ★★★ ()

Это

Почему не...

от автора новости или от авторов утилиты? Почему нет сравнения с cmake?

Такое ощущение от новости, как будто гугл совершил великое открытие, а по факту похоже очередной велосипед и ненужно. А открыли только из-за микрософта, который еще одну свою NIH систему сборки только что опубликовал под свободной лицензией.

Displacer ★★ ()
Последнее исправление: Displacer (всего исправлений: 1)

Лучше чем кложурий Leiningen сборщика ещё не придумали.

Hertz ★★★★★ ()

ненужно, autoconf и automake наше фсио :)

Harald ★★★★★ ()

Кто там в новости про MSBuild говорил, что нужно больше систем сборки?

Спасибо за новость, вертухай, будем посмотреть!

Indexator ★★★ ()
Ответ на: комментарий от anonymous

Тем же что и Tesla Car лучше повозки на паровой машине

vertexua ★★★★☆ ()

Какая огроомная простыня на главной. Уберите под кат, пожалуйста. Сабжем кто-то из присутствующих пробовал пользоваться?

sehellion ★★★★★ ()
Ответ на: комментарий от Displacer

от автора новости или от авторов утилиты?

Очевидно от авторов утилиты: http://bazel.io/docs/FAQ.html

Сравнение с Make и Ninja это как сравнивать дом с кирпичом, из которых этот дом сделан. Очевидно и сам продукт рассчитан на пользователей Make, им то точно любая альтернатива будет как Феррари после самоката.

Dendy ★★★★★ ()
Ответ на: комментарий от Weres

Это перевод домашней страницы, на авторство не претендую, просто посчитал это важной штукой

vertexua ★★★★☆ ()
Ответ на: комментарий от Displacer

Google открыла внутреннюю систему сборки — Bazel (комментарий)

Суть в том, что эту штуку откатали в бою много лет, работать очень удобно, особенно если для большой организации и кто-то выкатит оперсорс реализацию билд-кластера.

Представь дерево с тысячами библиотек, а ты поменял полтора файла в проекте вроде Chromium. Собираешь и у тебя бинарь собирается пару секунд потому что остальные двоичные файлы качнулись с кеша

vertexua ★★★★☆ ()
Ответ на: комментарий от nagibator

сделал, только не с первой попытки :) В вики описание ката не соответствует его реальному поведению :(

leave ★★★★★ ()

никогда не стали

Какая красота.

Shtucer ()

Слышал много восторженных отзывов о Blaze от сотрудников Google. Интересно, оно только для огромных проектов, хостящихся на одном сервере подходит, или для небольших проектов с зависимостями из мавена тоже?

Legioner ★★★★★ ()
Ответ на: комментарий от vertexua

Тем же что и Tesla Car лучше повозки на паровой машине

Ну и зачем тогда нужна это паровая машина от гугла?

urandom ()

ещё одна?

можно было б посмотреть, если б это не был гугл. а так — нафиг, нафиг. обойдёмся всякими cmake/autotools.

anonymous ()

Пример BUILD-файла, который на самом деле является скриптом на Python.

Если это питоноскрипт, то за пробелы вокруг «=» при указании именованных аргументов функций надо бить ссаными тряпками.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от urandom

Ты же спросил чем оно лучше чем cmake, а не наоборот. Получается cmake - паровая машина

vertexua ★★★★☆ ()
Ответ на: комментарий от leave

пользователь обязан следить за малейшими нюансами и их обеспечивать их правильность

Вот тут кое-что затрите, товарищи модераторы.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от vertexua

Я и не спрашивал. А Bazel по сравнению с cmake тут даже не паровая машина, а потешный деревянный велосипед-костотряс.

urandom ()

System Requirements
Java 8

Скажем дружно - нафиг нужно.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)

Реквестирую в секцию «почему не?» сравнение со связкой gn+ninja. Хотя, подозреваю, что gn — это lite имплементация сабжа для сборки хромиума. А делать его, наверное, взялись, чтобы отказаться от чудовищной вложенности скобочек и тормознутости gyp, когда устали ждать, чтобы в опенсорс выложили сабж.

alex_ac ()

Окей, я даже не знаю теперь что страшнее. MSBuild или это.

ncrmnt ★★★★★ ()

О боже макаронный, еще одна, ну зачем?

nikolnik ★★★ ()

Вот и хорошо. Смерть CMake придёт быстрей 😸

EXL ★★★★★ ()
Ответ на: комментарий от anonymous

NIH синдром, не иначе.

учитывая что у Google есть придуманный им Ninja (NinjaBuild) — то это похоже на NIH следующего уровеня :)

user_id_68054 ★★★★★ ()
Ответ на: комментарий от ncrmnt

Окей, я даже не знаю теперь что страшнее. MSBuild или это.

думаешь есть что-то более страшное чем MSBuild ? :)

user_id_68054 ★★★★★ ()

Это ответ на msbuild ?

Reset ★★★★★ ()
Ответ на: комментарий от vertexua

cmake умеет генерацию RPM, DEB, NSIS, кажется, DMG, файлов проектов для разных IDE (CodeBlocks, Eclipse, KDevelop3, MSVC++, Xcode), сейчас можно работать с Qt Creator, есть модули для подключения дохрена библиотек.

В сабже всё это есть?..

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от alex_ac

сравнение со связкой gn+ninja.

gn + ninja умеет Windows и также создавался для поддержки разнообразных тулчейнов вроде NaCl'a и PNaCl'a. В gn можно один и тот же код скомпилировать 3 разными тулчейнами, а потом создать таргет, который зависит от всех 3 получившихся библиотек. В мире серверного софта таких извращений нет. Кроме того, у Хрома большое количество разнообразных параметров сборки, которых у серверного софта тоже нет. Поэтому Bazel полностью декларативный, а в gn можно программировать (правда без циклов). Соответсвенно, зато у Bazel нет промежуточного шага генерации зависимостей, что делает его проще и удобнее.

Хотя, подозреваю, что gn — это lite имплементация сабжа для сборки хромиума. А делать его, наверное, взялись, чтобы отказаться от чудовищной вложенности скобочек и тормознутости gyp,

Абсолютно верно.

когда устали ждать, чтобы в опенсорс выложили сабж.

Bazel к сожалению не подходит для Хрома, а то может и подождали бы.

halyavin ()
Ответ на: комментарий от hobbit

сейчас можно работать с Qt Creator

правда это так же удобно как поссать сходить в условиях невесомости, но формально - да, можно

shty ★★★★★ ()
Ответ на: комментарий от hobbit

Да ну, бред, эта штука вчера релизнулась, на нее через пару месяцев тебе еще не таких правил напишут. Важна только архитектура, в Google оно собирает гигантские проекты за секунды за счет кеширования двоичных файлов

vertexua ★★★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.