SSS

Sorularınız varsa veya desteğe ihtiyacınız olursa Yardım Alma sayfasına göz atın.

Bazel nedir?

Bazel, yazılım derleme ve testlerini otomatikleştiren bir araçtır. Desteklenen derleme görevleri arasında, yürütülebilir programlar ve kitaplıklar üretmek için derleyiciler ve bağlayıcıların çalıştırılması ve Android, iOS ve diğer hedef ortamlar için dağıtılabilir paketleri derleme bulunur. Bazel; Make, Ant, Gradle, Buck, Pants ve Maven gibi diğer araçlara benziyor.

Bazel'i özel kılan şey ne?

Bazel, Google'da yazılım geliştirme yöntemine uyacak şekilde tasarlanmıştır. Aşağıdaki özelliklere sahiptir:

  • Çoklu dil desteği: Bazel birçok dili destekler ve rastgele programlama dillerini destekleyecek şekilde genişletilebilir.
  • Üst düzey derleme dili: Projeler BUILD dilinde tanımlanır. Bu metin, projeleri birbirine bağlı küçük kitaplıklar, ikili programlar ve testlerden oluşan kümeler olarak tanımlar. Buna karşılık, Make gibi araçlarla, dosyaları ve derleyici çağrılarını tek tek açıklamanız gerekir.
  • Çoklu platform desteği: Farklı mimariler ve hatta farklı platformlara yönelik yazılım derlemek için aynı araç ve aynı BUILD dosyaları kullanılabilir. Google'da, veri merkezlerimizdeki sistemlerde çalışan sunucu uygulamalarından cep telefonlarında çalışan istemci uygulamalarına kadar her şeyi oluşturmak için Bazel'i kullanıyoruz.
  • Yeniden oluşturulabilirlik: BUILD dosyalarında her kitaplık, test ve ikili program, doğrudan bağımlılıklarını tamamen belirtmelidir. Bazel, kaynak dosyada değişiklik yaptığınızda nelerin yeniden oluşturulması gerektiğini ve hangi görevlerin paralel olarak çalışabileceğini öğrenmek için bu bağımlılık bilgilerini kullanır. Bu, tüm derlemelerin artımlı olduğu ve her zaman aynı sonucu vereceği anlamına gelir.
  • Ölçeklenebilir: Bazel büyük derlemeleri işleyebilir. Google'da bir sunucu ikili programının 100.000 kaynak dosyasına sahip olması yaygın bir durumdur ve hiçbir dosyanın değiştirilmediği derlemelerin yaklaşık 200 ms.

Google neden kullanmaz?

  • Make, Ninja: Bu araçlar, dosya oluşturmak için hangi komutların çağrılacağı konusunda tam kontrol sağlar, ancak doğru kuralları yazmak kullanıcıya bağlıdır.
    • Kullanıcılar Bazel ile daha üst düzeyde etkileşimde bulunur. Örneğin, Bazel'in "Java testi", "C++ ikili programı" ve "hedef platform" ile "ana makine platformu" gibi kavramlar için yerleşik kuralları vardır. Bu kurallar, hatasız olduğu konusunda testlere tabi tutulmuştur.
  • Karınca ve Maven: Karınca ve Maven ağırlıklı olarak Java'ya yöneliktir. Bazel ise birden fazla dili kapsar. Bazel, yeniden kullanılabilen daha küçük birimlere bölünerek kod tabanlarını alt bölümlere ayırmayı teşvik eder ve yalnızca yeniden inşa edilmesi gereken kod tabanlarını yeniden oluşturabilir. Bu, daha büyük kod tabanlarıyla çalışırken geliştirmeyi hızlandırır.
  • Gradle: Bazel yapılandırma dosyaları Gradle'ınkinden çok daha yapılandırılmıştır ve Bazel'in her işlemin tam olarak ne yaptığını anlamasını sağlar. Bu da daha fazla paralellik ve daha iyi tekrarlama sağlıyor.
  • Pants, Buck: Her iki araç da sırasıyla Twitter ve Foursquare ve Facebook'taki eski Google çalışanları tarafından geliştirildi ve geliştirildi. Bazel'e göre modellendiler ancak özellik grupları farklı olduğundan bizim için uygun alternatifler değil.

Bazel nereden geldi?

Bazel, Google'ın sunucu yazılımını dahili olarak oluşturmak için kullandığı bir araçtır. Sunucularımıza bağlanan mobil uygulamalar (iOS, Android) gibi başka yazılımlar da geliştirmek için genişledi.

Dahili aracınızı açık kaynak olarak yeniden yazdınız mı? Çatal mı?

Bazel, kodunun çoğunu dahili araçla paylaşır ve kuralları her gün milyonlarca derlemede kullanılır.

Google neden Bazel'i geliştirdi?

Uzun zaman önce Google, yazılımını büyük boyutlu Makefiles kullanarak geliştirdi. Bunlar yavaş ve güvenilir olmayan derlemelere yol açıyordu. Bu da geliştiricilerimizin üretkenliğini ve şirketin çevikliğini olumsuz etkilemeye başladı. Bazel bu sorunları çözmenin bir yoluydu.

Bazel için derleme kümesi gerekir mi?

Bazel, derleme işlemlerini varsayılan olarak yerel olarak çalıştırır. Bununla birlikte, Bazel daha da hızlı derleme ve testler için derleme kümesine bağlanabilir. Daha ayrıntılı bilgi için uzaktan yürütme ve önbelleğe alma ve uzaktan önbelleğe alma ile ilgili dokümanlarımıza bakın.

Google geliştirme süreci nasıl çalışır?

Sunucu kod tabanımız için aşağıdaki geliştirme iş akışını kullanırız:

  • Sunucu kodumuzun tamamı tek, devasa bir sürüm kontrol sistemindedir.
  • Herkes yazılımını Bazel ile oluşturur.
  • Farklı ekipler, kaynak ağacının farklı bölümlerine sahiptir ve bileşenlerini BUILD hedefleri olarak kullanılabilir hale getirir.
  • Dallara ayırma öncelikle sürümleri yönetmek için kullanılır, böylece herkes yazılımını baş revizyonda geliştirir.

Bazel bu felsefenin temel taşıdır: Bazel tüm bağımlılıkların tam olarak belirtilmesini gerektirdiğinden, hangi program ve testlerin değişiklikten etkileneceğini tahmin edip göndermeden önce bunları inceleyebiliriz.

Google'daki geliştirme süreciyle ilgili daha fazla bilgiyi mühendis araçları blogunda bulabilirsiniz.

Bazel'i neden açtınız?

Yazılım oluşturmak eğlenceli ve kolay olmalıdır. Yavaş ve öngörülemeyen derlemeler, programlamanın eğlencesini yitirir.

Neden Bazel kullanmak isteyeyim?

  • Bazel yalnızca yeniden derlenmesi gereken dosyaları yeniden derleyebildiğinden daha hızlı derleme süreleri sağlayabilir. Benzer şekilde, değişmediğini bildiği testleri yeniden çalıştırmayı atlayabilir.
  • Bazel deterministik sonuçlar elde ediyor. Bu, artımlı ve temiz derlemeler, dizüstü bilgisayar ve CI sistemi vb. arasındaki sapmaları ortadan kaldırır.
  • Bazel, aynı çalışma alanında aynı aracı kullanarak farklı istemci ve sunucu uygulamaları oluşturabilir. Örneğin, tek bir kayıtta istemci/sunucu protokolünü değiştirebilir ve güncellenmiş mobil uygulamanın güncellenmiş sunucuyla çalışıp çalışmadığını test edebilir ve aynı araçla her ikisini de Bazel'in yukarıda bahsedilen tüm avantajlarından yararlanabilirsiniz.

Örnek görebilir miyim?

Evet; basit bir örneğe bakın veya daha karmaşık bir örnek için Bazel kaynak kodunu okuyun.

Bazel'in en iyisi ne?

Bazel, aşağıdaki özelliklere sahip projeleri oluşturma ve test etme konusunda uzman:

  • Geniş kod tabanına sahip projeler
  • Derlenmiş (birden çok) dilde yazılmış projeler
  • Birden çok platformda dağıtım yapan projeler
  • Kapsamlı testlerin yapıldığı projeler

Bazel'ı nereden koşabilirim?

Bazel; Linux, macOS (OS X) ve Windows'da çalışır.

Platformda bir JDK bulunduğu sürece, diğer UNIX platformlarına taşıma işlemi nispeten kolay olmalıdır.

Bazel'i ne için kullanmamalıyım?

  • Bazel, önbelleğe alma konusunda akıllıca davranmaya çalışıyor. Bu, çıkışlarının önbelleğe alınmaması gereken derleme işlemlerini çalıştırmak için uygun olmadığı anlamına gelir. Örneğin, aşağıdaki adımlar Bazel'den çalıştırılmamalıdır:
    • İnternetten veri getiren bir derleme adımı.
    • Sitenizin KG örneğine bağlanan bir test adımı.
    • Sitenizin bulut yapılandırmasını değiştiren bir dağıtım adımı.
  • Derlemeniz art arda birkaç uzun adımdan oluşuyorsa Bazel pek yardımcı olamayabilir. Uzun adımları Bazel'ın paralel olarak ilerleyebileceği küçük, ayrı hedeflere bölerek hızınızı artıracaksınız.

Bazel'in özellikleri ne kadar kararlı?

Temel özellikler (C++, Java ve kabuk kuralları) Google'da yoğun bir şekilde kullanıldığından bu özellikler kapsamlı bir şekilde test edilmiştir ve kayıpları çok azdır. Benzer şekilde, regresyonları bulmak için her gün yüz binlerce hedefte Bazel'in yeni sürümlerini test ediyor ve her ay birkaç kez yeni sürümleri yayınlıyoruz.

Kısacası, deneysel olarak işaretlenmiş özellikler haricinde Bazel Hemen Çalışmalıdır. Deneysel olmayan kurallarda yapılan değişiklikler geriye dönük uyumluluğa sahiptir. Özellik destek durumlarının daha ayrıntılı bir listesini destek belgemizde bulabilirsiniz.

Bazel ikili program olarak ne kadar kararlı?

Google içinde, Bazel kilitlenmelerinin çok nadir olmasını sağlarız. Bu, açık kaynak kod tabanımız için de geçerli olacaktır.

Bazel'i kullanmaya nasıl başlayabilirim?

Başlarken bölümüne bakın.

Docker, çoğaltılabilirlik sorunlarını çözemiyor mu?

Docker sayesinde, Ubuntu 12.04, Fedora 21 gibi sabit işletim sistemi sürümlerine sahip korumalı alanları kolayca oluşturabilirsiniz. Bu, sistem ortamı için yeniden oluşturulabilirlik sorununu çözer. Yani “/usr/bin/c++ uygulamasının hangi sürümüne ihtiyacım var?”

Docker, kaynak koddaki değişikliklerle ilgili olarak yeniden oluşturulabilirlik konusu ele alınmaz. Makefile ile Docker container'ı içinde kusursuz şekilde yazılmış bir Makefile çalıştırılması öngörülemeyen sonuçlar doğurabilir.

Google'da, kaynak kontrolü araçlarını yeniden oluşturulabilirlik açısından kontrol ederiz. Bu şekilde, temel kitaplıklardaki değişikliklerle aynı mekanizmayı kullanarak araçlardaki değişiklikleri inceleyebiliriz ("GCC'yi 4.6.1'e yükseltme").

Docker'da dağıtım için ikili programlar oluşturabilir miyim?

Bazel ile C/C++'da bağımsız, statik olarak bağlantılı ikili programlar ve Java için bağımsız jar dosyaları oluşturabilirsiniz. Bunlar, normal UNIX sistemlerinde az sayıda bağımlılıkla çalışır ve bu nedenle, bir Docker container'ının içine kurulumu kolay olmalıdır.

Bazel'in, bir dizi veri dosyasını tüketen veya alt işlem olarak başka bir programı çalıştıran bir Java programı gibi daha karmaşık programları yapılandırma kuralları vardır. Bu tür ortamları bağımsız arşivler olarak paketlemek mümkündür. Böylece Docker görüntüleri de dahil olmak üzere farklı sistemlere dağıtılabilir.

Bazel ile Docker görüntüleri oluşturabilir miyim?

Evet, yeniden oluşturulabilir Docker görüntüleri oluşturmak için Docker kurallarımızı kullanabilirsiniz.

Bazel yapılarımı otomatik olarak yeniden oluşturulabilir hale getirecek mi?

Java ve C++ ikili kodları için evet. Araç zincirini değiştirmediğiniz varsayılır. Özel tarifler içeren derleme adımlarınız varsa (örneğin, bir kural içindeki kabuk komut dosyası aracılığıyla ikili programları yürütme) biraz daha dikkatli olmanız gerekir:

  • Bildirilmemiş bağımlılıkları kullanmayın. Korumalı alanlı yürütme (–spawn_strategy=sandboxed, yalnızca Linux'ta), bildirilmemiş bağımlılıkları bulmaya yardımcı olabilir.
  • Oluşturulan dosyalarda zaman damgalarını ve kullanıcı kimliklerini depolamaktan kaçının. ZIP dosyaları ve diğer arşivlerde özellikle sık karşılaşılan bir durumdur.
  • Ağa bağlanmaktan kaçının. Korumalı alana alınan yürütme de bu noktada yardımcı olabilir.
  • Rastgele sayılar kullanan işlemlerden kaçının; özellikle de sözlük geçişi birçok programlama dilinde rastgele hale getirilir.

İkili program sürümleriniz var mı?

Evet, en son sürüm ikili programlarını bulabilir ve sürüm politikamızı inceleyebilirsiniz.

Eclipse/IntelliJ/XCode kullanıyorum. Bazel, IDE'lerle nasıl birlikte çalışıyor?

IntelliJ için IntelliJ with Bazel eklentisine göz atın.

XCode için Tulsi'ye göz atın.

Eclipse için E4B eklentisine göz atın.

Diğer IDE'ler için bu eklentilerin işleyiş şekliyle ilgili blog yayınına göz atın.

Jenkins/CircleCI/TravisCI kullanıyorum. Bazel, CI sistemleriyle nasıl birlikte çalışıyor?

Derleme veya test çağrısı başarısız olursa Bazel sıfır olmayan bir çıkış kodu döndürür ve bunun temel CI entegrasyonu için yeterli olması gerekir. Bazel'in doğruluk için temiz derlemelere ihtiyacı olmadığından, CI sistemi bir derleme/test çalıştırması başlatmadan önce temizlenecek şekilde yapılandırılmamalıdır.

Çıkış kodlarıyla ilgili daha ayrıntılı bilgiyi Kullanım Kılavuzu'nda bulabilirsiniz.

Bazel'de gelecekte ne gibi özellikler bekleyebiliriz?

Yol haritalarımıza göz atın.

DİL EKLEME projem için Bazel'i kullanabilir miyim?

Bazel genişletilebilir. Herkes yeni diller için destek ekleyebilir. Birçok dil desteklenir: Önerilerin listesi için ansiklopedi oluştur sayfasına, daha kapsamlı liste için ise awesomebazel.com adresine göz atın.

Uzantı geliştirmek veya nasıl çalıştıklarını öğrenmek istiyorsanız Bazel'ı genişletme dokümanlarına bakın.

Bazel kod tabanına katkıda bulunabilir miyim?

Katkıda bulunma yönergelerimizi inceleyin.

Neden tüm geliştirmeler açık havada yapılmıyor?

Yine de Bazel'deki herkese açık kod ile dahili uzantılarımız arasındaki arayüzleri sık sık yeniden düzenlememiz gerekiyor. Bu da açık havada geliştirme yapmayı zorlaştırır.

Bazel'i açık kaynaklı hale getirmeyi bitirdiniz mi?

Bazel'i açık kaynaklı hale getirme çalışmalarımız devam etmektedir. Özellikle, hâlâ açık kaynak sağlama çalışmalarımız devam ediyor:

  • Birim ve entegrasyon testlerimizin çoğu (bunların katkıda bulunan yamalar daha kolay olmasını sağlar).
  • Tam IDE entegrasyonu.

Kodlamanın da ötesinde, tüm kod incelemelerinin, hata izleme ve tasarım kararlarının, nihayetinde Bazel topluluğuyla birlikte herkese açık bir şekilde gerçekleşmesini istiyoruz. Henüz burada değiliz. Bu nedenle, bazı değişiklikler Bazel deposunda net bir açıklama olmadan görünecek. Bu şeffaflık olmamasına rağmen şirket dışı geliştiricileri desteklemek ve iş birliği yapmak istiyoruz. Bu nedenle, geliştirme sürecinin bir kısmı hâlâ Google'ın içinde gerçekleşse de kodu açıyoruz. Açık modele geçiş sırasında net olmayan veya haksız bir noktaların olduğunu fark ederseniz lütfen bize bildirin.

Bazel'in hiçbir zaman açık kaynaklı olmayacak kısımları var mı?

Evet, kod tabanının bir kısmı ya Google'a özel teknolojiyle entegre oluyor ya da ondan kurtulmak için bir bahane arıyorduk (ya da bu ikisinin bir birleşimi). Kod tabanının bu bölümleri GitHub'da mevcut değildir ve muhtemelen hiçbir zaman kullanılamaz.

Ekiple nasıl iletişime geçebilirim?

Bize bazel-talk@googlegroups.com adresinden ulaşabilirsiniz.

Yazılım hatalarını nereden bildirebilirim?

GitHub'da bir sorunu açın.

Kod tabanındaki "Blaze" kelimesine ne oldu?

Bu, aracın dahili adıdır. Lütfen Bazel olarak Bazel ifadesini kullanın.

Diğer Google projeleri (Android, Chrome) neden diğer derleme araçlarını kullanıyor?

İlk (Alfa) sürüme kadar Bazel harici olarak kullanıma sunulmamıştı, bu yüzden Chromium ve Android gibi açık kaynaklı projelerde Bazel kullanılamıyordu. Ayrıca, başlangıçta Windows desteğinin olmaması, Chrome gibi Windows uygulamalarının oluşturulmasında bir soruna nedendi. Proje olgunlaşıp daha kararlı hale geldiği için Android Açık Kaynak Projesi, Bazel'e taşınma sürecindedir.

“Bazel” nasıl telaffuz edilir?

Amerikan İngilizcesi "basil" (bitki) ile aynı şekilde: "BAY-zel". "hazel" ile kafiyeli. IPA: /はbeɪzɌ durumuyla/