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 ()
Последнее исправление: leave (всего исправлений: 7)

Кат бы добавить.

xaizek ★★★★★
()

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

anonymous
()

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

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

nagibator
()

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

memnek
()

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

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

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

Make да.

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

Dendy ★★★★★
()

Опа, qmake-style

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

northerner ★★★
()

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

AVL2 ★★★★★
()

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

Weres ★★★
()

Это

Почему не...

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

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

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

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

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

Indexator ★★★
()

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

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

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

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

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

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

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

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

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

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

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

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

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

leave ★★★★★
()

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

Legioner ★★★★★
()

ещё одна?

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

anonymous
()

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

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

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

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

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

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

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

urandom
()

System Requirements
Java 8

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

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

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

alex_ac
()
Ответ на: комментарий от 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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.