Bazel (oprogramowanie)

Bazel
Deweloperzy Google
Pierwsze wydanie marzec 2015 ; 7 lat temu ( 2015-03 )
Wersja stabilna
6.0.0 / 19 grudnia 2022 ; 2 miesiące temu ( 2022-12-19 )
Magazyn
Napisane w Jawa
System operacyjny Międzyplatformowe
Licencja Licencja Apache 2.0
Strona internetowa bazel .buduj  Edit this on Wikidata

Bazel ( / bezpłatne narzędzie b z əl / ) to programowe służące do automatyzacji oprogramowania do budowania i testowania. Firma Google używa narzędzia do budowania Blaze wewnętrznie i wydała port narzędzia Blaze o otwartym kodzie źródłowym jako Bazel, nazwany jako anagram Blaze. Bazel został wydany po raz pierwszy w marcu 2015 roku i osiągnął status beta do września 2015 roku.

Podobnie jak narzędzia do budowania, takie jak Make , Apache Ant lub Apache Maven , Bazel buduje aplikacje z kodu źródłowego przy użyciu zestawu reguł. Reguły i makra są tworzone w języku Starlark (wcześniej nazywanym Skylark), będącym dialektem Pythona . Istnieją wbudowane reguły tworzenia oprogramowania napisanego w językach programowania Java , C , C++ , Go , Python , Objective-C i Bourne Shell scripts. Bazel może wyprodukować pakiety oprogramowania odpowiednie do wdrożenia dla systemów operacyjnych Android i iOS.

Racjonalne uzasadnienie

Jednym z celów Bazel jest stworzenie systemu kompilacji, w którym dane wejściowe i wyjściowe celu kompilacji są w pełni określone, a zatem dokładnie znane systemowi kompilacji. Pozwala to na dokładniejszą analizę i określenie nieaktualnych artefaktów kompilacji na wykresie zależności systemu kompilacji . Sprawienie, by analiza wykresu zależności była bardziej deterministyczna, prowadzi do potencjalnej poprawy czasu kompilacji dzięki uniknięciu ponownego wykonywania niepotrzebnych elementów docelowych kompilacji. Niezawodność kompilacji poprawia się, unikając błędów, w których cele kompilacji mogą zależeć od nieaktualnych artefaktów wejściowych.

Aby uzyskać dokładniejszą analizę wykresów zależności, Bazel używa skrótów treści zamiast znaczników czasu opartych na plikach. Sygnatury czasowe plików są powszechnie używane do wykrywania zmian w narzędziach takich jak Make lub Apache Ant. Sygnatury czasowe mogą być problematyczne, gdy kompilacje są dystrybuowane na wielu hostach z powodu problemów z synchronizacją zegara. Kolejnym celem Bazel jest umożliwienie rozproszonych i równoległych kompilacji w zdalnej infrastrukturze chmurowej. Jest również zaprojektowany do skalowania do bardzo dużych repozytoriów kompilacji, których pobranie na maszynę roboczą indywidualnego programisty może nie być praktyczne.

Bazel zapewnia narzędzia, które pomagają programistom tworzyć identyczne bitowo powtarzalne wyniki kompilacji. Zaimplementowane reguły Bazel pozwalają uniknąć typowych pułapek, takich jak osadzanie znaczników czasu w generowanych wynikach, aby zapewnić dopasowanie skrótu treści. To z kolei umożliwia systemowi kompilacji niezawodne buforowanie ( zapamiętywanie ) danych wyjściowych pośrednich kroków kompilacji. Ponadto powtarzalna kompilacja umożliwia udostępnianie pośrednich wyników kompilacji między zespołami lub działami w organizacji przy użyciu dedykowanych serwerów kompilacji lub rozproszonych pamięci podręcznych. Dlatego Bazel jest szczególnie odpowiedni dla większych organizacji i projektów oprogramowania, które mają znaczną liczbę zależności kompilacji. Deterministyczna kompilacja i możliwość precyzyjnej analizy artefaktów wejściowych i wyjściowych kompilacji na wykresie zależności nadaje się do równoległego wykonywania kroków kompilacji.

Język Starlark

Bazel jest rozszerzalny dzięki niestandardowemu językowi programowania Starlark. Starlark używa składni, która jest podzbiorem składni języka programowania Python. Jednak nie implementuje wielu funkcji języka Python, takich jak możliwość mutowania kolekcji lub dostępu do plików I/O, aby uniknąć rozszerzeń, które mogłyby powodować efekty uboczne lub tworzyć wyniki kompilacji nieznane samemu systemowi kompilacji . Takie skutki uboczne mogą potencjalnie prowadzić do nieprawidłowej analizy wykresu zależności kompilacji.

Bazel został zaprojektowany jako wielojęzyczny system kompilacji. Wiele powszechnie używanych systemów kompilacji jest projektowanych z preferencją dla określonego języka programowania. Przykładami takich systemów są Ant i Maven dla Javy, Leiningen dla Clojure , sbt dla Scali itp. W projekcie wielojęzycznym połączenie oddzielnych systemów kompilacji i osiągnięcie opisanych powyżej korzyści w zakresie szybkości i poprawności kompilacji może być trudne i problematyczne.

Bazel zapewnia również wykonywanie kompilacji w trybie piaskownicy. Można to wykorzystać, aby upewnić się, że wszystkie zależności kompilacji zostały poprawnie określone, a kompilacja nie zależy na przykład od bibliotek zainstalowanych tylko lokalnie na komputerze roboczym programisty. Pomaga to zapewnić, że kompilacje pozostaną przenośne i będą mogły być wykonywane w innych (zdalnych) środowiskach.

Systemy budowania najbardziej podobne do Bazel to Pants, Buck i Please. Spodnie i Buck mają podobne cele techniczne jak Bazel i zostały zainspirowane systemem kompilacji Blaze używanym wewnętrznie w Google. Blaze jest także poprzednikiem Bazela. Bazel, Pants, Buck i Please przyjęli Starlark jako parser pliku BUILD, zgodnie ze składnią pliku BUILD. Niezależnie opracowane systemy kompilacji z podobnymi celami wydajnej analizy wykresów zależności i automatycznego śledzenia artefaktów kompilacji zostały zaimplementowane w systemach kompilacji, takich jak tup.

Piaskownica

Jedną z kluczowych cech odróżniających Bazel i podobne systemy od wcześniejszych systemów kompilacji jest użycie piaskownicy do kroków kompilacji. Kiedy Bazel wykonuje oddzielną kompilację, tworzy nowy katalog i wypełnia go dowiązaniami symbolicznymi do jawnych zależności wejściowych dla reguły. W przypadku języków takich jak C/C++ zapewnia to istotne zabezpieczenie dołączania plików nagłówkowych: zapewnia, że ​​programista jest świadomy plików używanych w kompilacji i zapobiega nieoczekiwanemu dołączeniu pliku nagłówkowego o podobnej nazwie z innego w tym katalog.

Takie podejście do piaskownicy prowadzi do problemów z typowymi narzędziami do kompilacji, co skutkuje szeregiem obejść wymaganych do poprawnego skompilowania kodu w różnych architekturach. Na przykład, wykonując osobną kompilację dla architektur Mac/Darwin, kompilator zapisuje ścieżki wejściowe do symboli SO i OSO w pliku binarnym Mach-O, co można zobaczyć za pomocą polecenia takiego jak nm -a mybinary | grep SO . Te ścieżki są potrzebne do znajdowania symboli podczas debugowania. W rezultacie kompilacje w Bazel muszą poprawiać skompilowane obiekty po fakcie, próbując naprawić problemy związane ze ścieżką, które powstały w wyniku konstrukcji piaskownicy przy użyciu flag takich jak -fdebug- prefix-map i -oso_prefix , które stały się dostępne w Xcode 11.0 . Podobna obsługa musi mieć miejsce w fazach łączenia, przepisując wartości rpath we współdzielonych bibliotekach obiektów za pomocą polecenia takiego jak nazwa_instalacji_narzędzie .

Logo Starego Bazela

Od pierwszego wydania Bazela logo było zieloną literą „b” stylizowaną na łodygę bazylii z dwoma liśćmi.

5 lipca 2017 r. Bazel Blog ogłosił nowe logo, składające się z trzech zielonych klocków ułożonych w kształcie serca.

Zobacz też

Linki zewnętrzne