Uzantılara Genel Bakış

Sorun bildirin Kaynağı göster

Bu sayfada, makrolar ve kurallar kullanarak BUILD dilinin nasıl genişletileceği açıklanmaktadır.

Bazel uzantıları .bzl ile biten dosyalardır. Bir uzantıdan simgeyi içe aktarmak için load ifadesi kullanın.

Daha ileri düzey kavramları öğrenmeden önce şunları yapın:

Makrolar ve kurallar

Makro, kuralları örneklendiren bir işlevdir. BUILD dosyası çok tekrar eden veya karmaşık hale geldiğinde bazı kodları yeniden kullanmanıza olanak tanıdığından bu özellik kullanışlıdır. BUILD dosyası okunur okunmaz işlev değerlendirilir. BUILD dosyasının değerlendirilmesinden sonra Bazel, makrolar hakkında çok az bilgiye sahip olur: Makronuz bir genrule oluşturuyorsa Bazel genrule öğesini yazmışsınız gibi davranır. Bu nedenle, bazel query yalnızca oluşturulan genrule öğesini listeler.

Kural makrodan daha güçlüdür. Bazel dahililerine erişebilir ve neler olup bittiğini tam olarak denetleyebilir. Örneğin, bilgileri diğer kurallara iletebilir.

Basit mantığı yeniden kullanmak isterseniz bir makroyla başlayın. Bir makro karmaşık hale gelirse bunu bir kural haline getirmek genellikle iyi bir fikirdir. Yeni dil desteği genellikle bir kurala göre yapılır. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcının bir kural yazması gerekmez; yalnızca mevcut kuralları yükleyip çağırırlar.

Değerlendirme modeli

Yapı üç aşamadan oluşur.

  • Yükleme aşaması. İlk olarak, derleme için gereken tüm uzantıları ve tüm BUILD dosyalarını yükleyip değerlendirin. BUILD dosyalarının yürütülmesi yalnızca kuralları gösterir (bir kural her çağrıldığında bir grafiğe eklenir). Makrolar burada değerlendirilir.

  • Analiz aşaması. Kuralların kodu yürütülür (implementation işlevleri) ve işlemler örneklenir. İşlem, bir dizi girdiden bir çıkış kümesinin nasıl oluşturulacağını açıklar (ör. "hello.c'de gcc'yi çalıştır ve gethello.o"). Gerçek komutları çalıştırmadan önce hangi dosyaların oluşturulacağını açık bir şekilde listelemeniz gerekir. Başka bir deyişle analiz aşamasında, yükleme aşamasından oluşturulan grafik alınır ve bir eylem grafiği oluşturulur.

  • Yürütme aşaması. Çıkışlarından en az biri gerekli olduğunda işlemler yürütülür. Bir dosya eksikse veya bir komut bir çıkış oluşturamıyorsa derleme başarısız olur. Bu aşamada testler de yürütülür.

Bazel, .bzl dosyaları ile BUILD dosyalarını okumak, ayrıştırmak ve değerlendirmek için paralellik kullanır. Bir dosya, derleme başına en fazla bir kez okunur ve değerlendirmenin sonucu önbelleğe alınır ve yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load() ifadeleri) çözüldükten sonra değerlendirilir. Tasarım gereği, bir .bzl dosyası yüklemenin görünür bir yan etkisi yoktur. Yalnızca değerleri ve işlevleri tanımlar.

Bazel akıllı davranmaya çalışır. Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini belirlemek için bağımlılık analizinden yararlanır. Örneğin, bir kural geçerli derleme için ihtiyacınız olmayan işlemler oluşturursa bu işlemler yürütülmez.

Uzantı oluşturma

Kendi uzantılarınızı yazarken aşağıdaki iki bağlantı çok yararlı olacaktır. Kullanıcılara ulaşabilecekleri bir yerde olsun:

Daha ileri gidiyoruz

Makrolar ve kurallara ek olarak unsurlar ve depo kuralları yazmak isteyebilirsiniz.