Meta* выпустила новую версию Buck, своей системы сборки с открытым исходным кодом. Buck2 описывается как вдвое более быстрая, чем ее предшественница. Buck2 поддерживает сборку проектов на языках C++, Python, Rust, Kotlin, Swift, Objective-C, Haskell, OCaml и других.
Buck — это система сборки, разработанная и используемая Meta еще тогда, когда она называлась Facebook*. Buck была оптимизирована для создания небольших, многократно используемых модулей, состоящих из кода и ресурсов, и поддерживает различные языки и платформы. Изначально проект был запущен десять лет назад, и с тех пор совершенствовался как Facebook, так и разработчиками сообщества.
Buck2 — это переработанная версия Buck, которая стремится сохранить лучшие части Buck1 (с высокой степенью совместимости), но также заимствует идеи из академических исследований и систем сборки, включая Bazel, Pants, Shake и Tup.
Meta утверждает, что среди отличий Buck2 самое главное — это быстрота. Во внутренних тестах он завершает сборку в два раза быстрее, чем Buck1. Во-вторых, вторая версия также написана в первую очередь для удаленного выполнения — локальное выполнение считается частным случаем удаленного, в отличие от Buck1, где оно было добавлено после. Это означает, что такие вещи, как хэши каталогов, могут быть предварительно вычислены и отправлены на удаленное выполнение, что повышает эффективность.
Кроме того, Buck2 написан на языке Rust, в отличие от Java в Buck1. Это позволяет избежать пауз в GC. Кроме того, все правила Buck2 написаны на Starlark — в Buck1 они были написаны на Java как часть бинарного файла, что делает итерацию правил намного быстрее. А поскольку правила являются внешними по отношению к двоичному файлу, разработчики смогли сделать двоичный файл Buck2 полностью независимым от языка.