rilascio di uno strumento di assemblaggio open source , ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌΠΈ ΠΈΠ· Google ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Bazel ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π·Π°ΠΏΡΡΠΊΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈ ΡΠ΅ΡΡΡ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Java, C++, Objective-C, Python, Rust, Go ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ±ΠΎΡΠΊΠ° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Android ΠΈ iOS. ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° sotto licenza Apache 2.0.
ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°ΡΡΡΠ°ΡΡΠΈΡ
ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Bazel 2.0 Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌΡ Β«βincompatible_remap_main_repoΒ» (ΡΡΡΠ»ΠΊΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ΅ΡΠ΅Π· @ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ), Β«βincompatible_disallow_dict_lookupΒ»_(ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅Ρ
Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ
ΠΊΠ»ΡΡΠ΅ΠΉ),
Β«βincompatible_remove_native_maven_jarΒ» ΠΈ Β«βincompatible_prohibit_aapt1Β». Π‘ΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
- Π ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ ΡΠ΅Π΄Π°ΡΡΠΈΠΈ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΡΠ²ΠΎΠ΄Π° Β«protoΒ» (βoutput=proto), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ° ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (βincompatible_proto_output_v2) ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ;
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ»Π°Π³ Β«βincompatible_remove_enabled_toolchain_typesΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠΎΠ»Π΅ PlatformConfiguration.enabled_toolchain_types;
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈ ΡΠ°ΡΠΊΡΡΡΠΈΠΈ ΠΏΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ;
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π°Π³Π° Β«βdisk_cacheΒ» Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΊΡΡΠ°ΠΌΠΈ gRPC;
- Π ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ Debian ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΎΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΡΠ»ΡΡΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ°, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠ°Ρ ΡΠ°ΠΉΠ»Ρ ~/.bazelversion ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ $USE_BAZEL_VERSION;
- Π ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΠΌ runfiles Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ»Π°Π³ Β«βexperimental_skip_runfiles_manifestsΒ».
Tra le caratteristiche distintive di Bazel spiccano la velocitΓ elevata, l'affidabilitΓ e la ripetibilitΓ del processo di build. Per raggiungere alte velocitΓ di compilazione, Bazel utilizza attivamente tecniche di caching e parallelizzazione del processo di build. Nei file BUILD devono essere definite completamente tutte le dipendenze, sulla base delle quali vengono prese decisioni riguardo alla ricompilazione dei componenti dopo l'introduzione di modifiche (vengono rieseguiti solo i file modificati) e alla parallelizzazione del processo di build. Gli strumenti garantiscono anche la ripetibilitΓ del build, ovvero il risultato del compilazione del progetto sulla macchina dello sviluppatore sarΓ completamente identico a quello su sistemi esterni, come i server di integrazione continua.
A differenza di Make e Ninja, Bazel adotta un approccio di livello superiore nella definizione delle regole di build, dove invece di specificare il legame tra comandi e file da costruire, si applicano blocchi predefiniti piΓΉ astratti, come "costruzione di un eseguibile in C++", "costruzione di una libreria in C++" o "esecuzione di un test in C++", e si definiscono le piattaforme di destinazione e di build. Nel file di testo BUILD, i componenti del progetto sono descritti come un insieme di librerie, eseguibili e test, senza dettagli a livello di singoli file e comandi di invocazione del compilatore. Ulteriori funzionalitΓ sono implementate attraverso un meccanismo di estensione.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΡΡ ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΡΠ±ΠΎΡΠΊΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π‘Π±ΠΎΡΠΎΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Google, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΠΊΠΎΠ΄ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ.
Fonte: opennet.ru
