rilascio di uno strumento di assemblaggio open source , sviluppato dagli ingegneri di Google e utilizzato per l'assemblaggio della maggior parte dei progetti interni di questa azienda. Il rilascio della versione 1.0 ha segnato il passaggio all'uso di versioning semantico e si distingue anche per l'introduzione di un ampio numero di modifiche che rompono la compatibilità all'indietro. Il codice del progetto sotto licenza Apache 2.0.
Bazel gestisce l'assemblaggio del progetto, avviando i compilatori e i test necessari. Il sistema di assemblaggio è stato progettato sin dall'inizio per l'ottimizzazione dell'assemblaggio dei progetti Google, compresi progetti molto grandi e progetti contenenti codice in più linguaggi di programmazione, che richiedono test estesi e sono assemblati per più piattaforme. Supporta l'assemblaggio e il test del codice in Java, C++, Objective-C, Python, Rust, Go e molti altri linguaggi, nonché l'assemblaggio di applicazioni mobili per Android e iOS. È supportato l'uso di file di assemblaggio unici per diverse piattaforme e architetture, ad esempio, un file di assemblaggio può essere utilizzato senza modifiche sia per un sistema server che per un dispositivo mobile.
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.
Fonte: opennet.ru
