Facebook опубликовал систему сборки Buck2

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3261
Зарегистрирован: 20.08.2022

#

Facebook опубликовал систему сборки Buck2
Дата публикации:Fri, 07 Apr 2023 12:49:49 +0300




Facebook представил новую сборочную систему Buck2, ориентированную на организацию сборки проектов из очень крупных репозиториев, включающих код на разных языках программирования. Ключевыми отличиями новой реализации от ранее применявшейся в Facebook системы Buck является использование языка Rust вместо Java и существенное увеличение эффективности и производительности сборочного процесса (во внутренних тестах в той же инфраструктуре Buck2 выполняет сборочные задания быстрее Buck в два раза). Код распространяется под лицензией Apache 2.0.



Система не привязана к сборке кода на конкретных языках и из коробки поддерживает сборку проектов, написанных на языках C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell и OCaml, используемых в Facebook. Для оформления дополнений, сборочных сценариев и правил применяется язык Starlark, основанный на Python (как в Bazel). Starlark позволяет расширять возможности сборочной системы и абстрагироваться от конкретных языков, применяемых в собираемых проектах.





Высокая производительнось достигается за счёт кэширования результатов, распараллелирования работ и поддержки удалённого выполнения заданий (Remote Build Execution). В сборочном окружении применяется концепция "гермитичности" - собираемый код отрезан от внешнего мира, в процессе сборки извне ничего не загружается, а повторные выполнения работ на разных системах приводят к одному и тому же результату (повторяемые сборки, например, результат сборки проекта на машине разработчика будет полностью совпадать со сборкой на сервере непрерывной интеграции). Ситуация отсутствия зависимости воспринимается в Buck2 как ошибка.



Ключевые особенности Buck2:
  • Правила поддержки языков программирования и ядро сборочной системы полностью разделены. Для правил используется язык Starlark, а инструментарий и реализация Starlark написаны на Rust.

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

    Опубликованный на GitHub код Buck2 и правила поддержки языков программирования почти идентичны со внутренней версией, применяемой в инфраструктуре Facebook (отличия только в привязке к редакциям компиляторов и сборочным серверам, применяемым в Facebook).

    Сборочная система спроектирована с оглядкой на интеграцию с системами удалённого выполнения заданий, позволяющими запускать работы на удалённых серверах. API для удалённого выполнения совместим с Bazel и протестирован на совместимость с Buildbarn и EngFlow.

    Обеспечена интеграция с виртуальными файловыми системами, в которых представлено содержимое всего репозитория, но фактически работа осуществляется с актуальным локальным срезом части репозитория (разработчик видит весь репозиторий, но из репозитория извлекаются только востребованные файлы, к которым выполняется обращение). Поддерживаются VFS на базе EdenFS и Git LFS, которые используются в Sapling.


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=58933

Жизнь за Нер'зула!

Ответить