Uzantılara Genel Bakış

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 sembol içe aktarmak için yükleme ifadesi kullanın.

Daha ileri düzey kavramları öğrenmeden önce:

Makrolar ve kurallar

Makro, kuralları örnekleyen bir işlevdir. Bu özellik, BUILD dosyası çok fazla tekrar içerdiğinde veya çok karmaşık olduğunda kullanışlıdır. Çünkü bazı kodları yeniden kullanmanıza olanak tanır. İşlev, BUILD dosyası okunur okunmaz değerlendirilir. Bazel, BUILD dosyası değerlendirildikten sonra makrolar hakkında çok az bilgiye sahip olur: Makronuz bir BUILD oluşturursa Bazel, BUILD yazmışsınız gibi davranır.genrulegenrule Bu nedenle, bazel query yalnızca oluşturulan genrule listelenir.

Kural, makrodan daha güçlüdür. Bazel'in iç işleyişine erişebilir ve neler olup bittiği üzerinde tam kontrole sahip olabilir. Örneğin, bilgileri diğer kurallara iletebilir.

Basit mantığı yeniden kullanmak istiyorsanız makroyla başlayın. Bir makro karmaşık hale gelirse genellikle onu kurala dönüştürmek iyi bir fikirdir. Yeni bir dil için destek genellikle bir kural aracılığıyla sağlanır. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcı hiçbir zaman kural yazmak zorunda kalmaz. Yalnızca mevcut kuralları yükleyip çağırırlar.

Değerlendirme modeli

Derleme üç aşamadan oluşur.

  • Yükleme aşaması. Öncelikle, tüm uzantıları ve derleme için gereken tüm BUILD dosyaları yükleyip değerlendirin. BUILD dosyalarının yürütülmesi yalnızca kuralları başlatır (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 oluşturulur. Bir işlem, bir dizi girişten nasıl bir dizi çıkış oluşturulacağını açıklar. Örneğin, "hello.c üzerinde gcc'yi çalıştır ve hello.o'yu al". Gerçek komutları yürütmeden önce hangi dosyaların oluşturulacağını açıkça belirtmeniz gerekir. Başka bir deyişle, analiz aşaması, yükleme aşamasında oluşturulan grafiği alır ve bir işlem grafiği oluşturur.

  • Yürütme aşaması. İşlemler, çıkışlarından en az biri gerektiğinde yürütülür. Bir dosya eksikse veya bir komut bir çıkış oluşturamazsa derleme başarısız olur. Bu aşamada testler de yapılır.

Bazel, .bzl ve 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ınarak yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load() ifadeler) çözüldükten sonra değerlendirilir. .bzl dosyasının yüklenmesi, tasarım gereği görünür bir yan etkiye neden olmaz. Yalnızca değerleri ve işlevleri tanımlar.

Bazel akıllı olmaya çalışır: Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini bilmek için bağımlılık analizini kullanı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ıdan çok faydalanabilirsiniz. Erişebileceğiniz bir yerde saklayın:

Daha fazlasını yapma

Makrolara ve kurallara ek olarak yönler ve depo kuralları da yazmak isteyebilirsiniz.