SSS

Sorun bildir Kaynağı görüntüle Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Sorunuz varsa veya desteğe ihtiyacınız olursa Yardım Alma başlıklı makaleyi inceleyin.

Bazel nedir?

Bazel, yazılım derlemelerini ve testlerini otomatikleştirir. Desteklenen derleme görevleri arasında yürütülebilir programlar ve kitaplıklar oluşturmak için derleyicileri ve bağlayıcıları çalıştırma, Android, iOS ve diğer hedef ortamlar için dağıtılabilir paketler oluşturma yer alır. Bazel, Make, Ant, Gradle, Buck, Pants ve Maven gibi diğer araçlara benzer.

Bazel'i özel kılan nedir?

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

  • Birden fazla dil desteği: Bazel, birçok dili destekler ve rastgele programlama dillerini destekleyecek şekilde genişletilebilir.
  • Üst düzey derleme dili: Projeler, bir projeyi küçük, birbirine bağlı kitaplıklar, ikili dosyalar ve testler kümeleri olarak tanımlayan kısa bir metin biçimi olan BUILD dilinde açıklanır. Buna karşılık Make gibi araçlarda, tek tek dosyaları ve derleyici çağrılarını açıklamanız gerekir.
  • Çoklu platform desteği: Farklı mimariler ve hatta farklı platformlar için yazılım oluşturmak üzere 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ırız.
  • Yeniden üretilebilirlik: BUILD dosyalarında her kitaplık, test ve ikili program doğrudan bağımlılıklarını eksiksiz olarak belirtmelidir. Bazel, bir kaynak dosyasında değişiklik yaptığınızda neyin yeniden oluşturulması gerektiğini ve hangi görevlerin paralel olarak çalıştırılabileceğini bilmek 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 ikilisinin 100 bin kaynak dosyası olması yaygındır ve hiçbir dosyanın değiştirilmediği derlemeler yaklaşık 200 ms sürer.

Google neden... kullanmıyor?

  • Make, Ninja: Bu araçlar, dosyaları oluşturmak için hangi komutların çağrılacağı konusunda çok hassas bir kontrol sağlar ancak doğru kuralları yazmak kullanıcının sorumluluğundadır.
    • Kullanıcılar Bazel ile daha üst düzeyde etkileşim kurar. Örneğin, Bazel'da "Java testi", "C++ ikili" gibi yerleşik kurallar ve "hedef platform" ile "ana makine platformu" gibi kavramlar bulunur. Bu kurallar, hatasız oldukları kanıtlanana kadar test edilmiştir.
  • Ant ve Maven: Ant ve Maven öncelikle Java'ya yöneliktir. Bazel ise birden fazla dili destekler. Bazel, kod tabanlarının daha küçük ve yeniden kullanılabilir birimlere bölünmesini teşvik eder ve yalnızca yeniden oluşturulması gerekenleri yeniden oluşturabilir. Bu, daha büyük kod tabanlarıyla çalışırken geliştirme sürecini hızlandırır.
  • Gradle: Bazel yapılandırma dosyaları, Gradle'ın dosyalarına kıyasla çok daha yapılandırılmış olduğundan Bazel, her işlemin tam olarak ne yaptığını anlayabilir. Bu sayede daha fazla paralellik ve daha iyi tekrarlanabilirlik sağlanır.
  • Pants, Buck: Her iki araç da sırasıyla Twitter ve Foursquare'deki ve Facebook'taki eski Google çalışanları tarafından oluşturulup geliştirilmiştir. Bu araçlar Bazel'i temel alsa da özellik setleri farklı olduğundan bizim için uygun alternatifler değildir.

Bazel'in kökeni nedir?

Bazel, Google'ın sunucu yazılımını şirket içinde oluşturmak için kullandığı aracın bir türüdür. Sunucularımıza bağlanan mobil uygulamalar (iOS, Android) gibi başka yazılımlar da geliştirmek için genişletildi.

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

Bazel, kodunun büyük bir kısmını dahili araçla paylaşır ve kuralları her gün milyonlarca derleme için kullanılır.

Google, Bazel'i neden geliştirdi?

Google, uzun zaman önce yazılımlarını büyük ve oluşturulmuş Makefiles dosyalarını kullanarak geliştiriyordu. Bu durum, yavaş ve güvenilir olmayan derlemelere yol açtı. Bu da geliştiricilerimizin üretkenliğini ve şirketin çevikliğini 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. Ancak Bazel, daha da hızlı derlemeler ve testler için bir derleme kümesine de bağlanabilir. Daha fazla bilgi için uzaktan yürütme ve önbelleğe alma ile uzaktan önbelleğe alma hakkındaki dokümanlarımızı inceleyin.

Google'ın geliştirme süreci nasıl işler?

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

  • Tüm sunucu kodumuz tek ve devasa bir sürüm kontrol sistemindedir.
  • Herkes yazılımını Bazel ile geliştirir.
  • Farklı ekipler, kaynak ağacının farklı bölümlerine sahiptir ve bileşenlerini BUILD hedefi olarak kullanıma sunar.
  • Dallanma, öncelikli olarak sürümleri yönetmek için kullanılır. Bu nedenle herkes yazılımını en son düzeltmede geliştirir.

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

Google'daki geliştirme süreci hakkında daha fazla bilgiyi eng tools blogunda bulabilirsiniz.

Bazel'i neden kullanıma sundunuz?

Yazılım geliştirmek eğlenceli ve kolay olmalıdır. Yavaş ve tahmin edilemeyen derlemeler, programlamanın eğlencesini kaçırır.

Neden Bazel kullanmak isteyebilirim?

  • Bazel, yalnızca yeniden derlenmesi gereken dosyaları yeniden derleyebildiğinden daha hızlı derleme süreleri sunabilir. Benzer şekilde, değişmediğini bildiği testleri yeniden çalıştırmayı atlayabilir.
  • Bazel, deterministik sonuçlar üretir. Bu sayede artımlı ve temiz derlemeler, dizüstü bilgisayar ve CI sistemi vb. arasındaki çarpıklık ortadan kaldırılır.
  • Bazel, aynı çalışma alanındaki aynı araçla farklı istemci ve sunucu uygulamaları oluşturabilir. Örneğin, tek bir işlemde bir istemci/sunucu protokolünü değiştirebilir ve güncellenen mobil uygulamanın güncellenen sunucuyla çalıştığını test edebilirsiniz. Her ikisini de aynı araçla oluşturarak Bazel'in yukarıda belirtilen tüm avantajlarından yararlanabilirsiniz.

Örnekleri görebilir miyim?

Evet. Basit bir örneğe göz atın veya daha karmaşık bir örnek için Bazel kaynak kodunu inceleyin.

Bazel'in en iyi olduğu alanlar nelerdir?

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

  • Büyük kod tabanına sahip projeler
  • (Birden fazla) derlenmiş dilde yazılan projeler
  • Birden fazla platformda dağıtılan projeler
  • Kapsamlı testleri olan projeler

Bazel'i nerede çalıştırabilirim?

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

Platform için JDK mevcut olduğu sürece diğer UNIX platformlarına taşıma işlemi nispeten kolay olmalıdır.

Bazel'i hangi amaçlarla kullanmamalıyım?

  • Bazel, önbelleğe alma konusunda akıllı davranmaya çalışır. Bu nedenle, çıktıları önbelleğe alınmaması gereken derleme işlemlerini çalıştırmak için uygun değildir. Örneğin, aşağıdaki adımlar Bazel'den çalıştırılmamalıdır:
    • İnternetten veri getiren bir derleme adımı.
    • Sitenizin kalite güvencesi örneğine bağlanan bir test adımı.
    • Sitenizin bulut yapılandırmasını değiştiren bir dağıtım adımı.
  • Derlemeniz birkaç uzun ve sıralı adımdan oluşuyorsa Bazel fazla yardımcı olamayabilir. Uzun adımları, Bazel'in paralel olarak çalıştırabileceği daha küçük ve ayrı hedeflere bölerek daha fazla hız elde edebilirsiniz.

Bazel'in özellik grubu ne kadar kararlı?

Temel özellikler (C++, Java ve kabuk kuralları) Google içinde yoğun olarak kullanıldığından kapsamlı bir şekilde test edilir ve çok az değişiklik gösterir. Benzer şekilde, regresyonları bulmak için her gün yüz binlerce hedefte Bazel'in yeni sürümlerini test ediyor ve her ay birden fazla yeni sürüm yayınlıyoruz.

Kısacası, deneysel olarak işaretlenen özellikler hariç Bazel sorunsuz çalışmalıdır. Deneysel olmayan kurallarda yapılan değişiklikler eski sürümlerle uyumlu olacaktır. Özellik destek durumlarının daha ayrıntılı bir listesini destek belgemizde bulabilirsiniz.

Bazel ikilisi ne kadar kararlı?

Google olarak Bazel'in kilitlenmesinin çok nadir olmasını sağlıyoruz. Bu durum, açık kaynak kod tabanımız için de geçerlidir.

Bazel'i kullanmaya nasıl başlayabilirim?

Başlarken başlıklı makaleyi inceleyin.

Docker, yeniden üretilebilirlik sorunlarını çözmüyor mu?

Docker ile sabit işletim sistemi sürümlerine (ör. Ubuntu 12.04, Fedora 21) sahip sanal ortamları kolayca oluşturabilirsiniz. Bu, sistem ortamının yeniden üretilebilirliği sorununu çözer. Yani "/usr/bin/c++'nın hangi sürümüne ihtiyacım var?" sorusunu yanıtlar.

Docker, kaynak kodundaki değişikliklerle ilgili olarak yeniden üretilebilirlik sorununu çözmez. Make'i bir Docker kapsayıcısında kusurlu yazılmış bir Makefile ile çalıştırmak yine de tahmin edilemeyen sonuçlar verebilir.

Google'da, araçların yeniden üretilebilirliği için kaynak kontrolü yapılır. Bu sayede, araçlardaki değişiklikleri ("GCC'yi 4.6.1'e yükselt") temel kitaplıklardaki değişikliklerle ("OpenSSL'de sınır kontrolünü düzelt") aynı mekanizmayla inceleyebiliriz.

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

Bazel ile C/C++'da bağımsız, statik olarak bağlanmış ikili dosyalar ve Java için bağımsız jar dosyaları oluşturabilirsiniz. Bunlar normal UNIX sistemlerinde çok az bağımlılıkla çalışır ve bu nedenle bir Docker container'ına kolayca yüklenebilir.

Bazel, daha karmaşık programları yapılandırmak için kurallara sahiptir. Örneğin, bir dizi veri dosyasını kullanan veya başka bir programı alt işlem olarak çalıştıran bir Java programı. 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ılabilirler.

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

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

Bazel, derlemelerimi otomatik olarak yeniden üretilebilir hale getirir mi?

Java ve C++ ikilileri için, araç zincirini değiştirmediğiniz varsayılarak evet. Özel tarifler içeren derleme adımlarınız varsa (örneğin, bir kuralın içindeki kabuk komut dosyası aracılığıyla ikili dosyaları yürütme) bazı ek önlemler almanız gerekir:

  • Beyan edilmemiş bağımlılıkları kullanmayın. Korumalı alanda yürütme (–spawn_strategy=sandboxed, yalnızca Linux'ta) bildirilmemiş bağımlılıkların bulunmasına yardımcı olabilir.
  • Oluşturulan dosyalarda zaman damgalarını ve kullanıcı kimliklerini depolamaktan kaçının. ZIP dosyaları ve diğer arşivler bu duruma özellikle yatkındır.
  • Ağa bağlanmaktan kaçının. Sandbox'ta yürütme de bu konuda yardımcı olabilir.
  • Rastgele sayılar kullanan işlemlerden kaçının. Özellikle birçok programlama dilinde sözlük geçişi rastgele yapılır.

İkili yayınlarınız var mı?

Evet, en son sürüm ikililerini bulabilir ve sürüm politikamızı inceleyebilirsiniz.

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

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 nasıl çalıştığıyla ilgili blog yayınına göz atın.

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

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

Çıkış kodları hakkında daha fazla bilgiyi Kullanım Kılavuzu'nda bulabilirsiniz.

Bazel'de gelecekte hangi özellikler kullanıma sunulabilir?

Yol Haritalarımızı inceleyin.

INSERT LANGUAGE HERE 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 yapı ansiklopedisine, daha kapsamlı bir liste için ise awesomebazel.com adresine bakın.

Uzantı geliştirmek veya bunların nasıl çalıştığını öğrenmek istiyorsanız Bazel'i genişletme ile ilgili belgelere bakın.

Bazel kod tabanına katkıda bulunabilir miyim?

Katkı yönergelerimize bakın.

Neden tüm geliştirme çalışmaları herkese açık olarak yapılmıyor?

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 durum, açık kaynaklı geliştirme yapmayı zorlaştırır.

Bazel'in açık kaynaklı hale getirilmesi tamamlandı mı?

Bazel'in açık kaynaklı hale getirilmesiyle ilgili çalışmalar devam etmektedir. Özellikle aşağıdaki alanlarda açık kaynaklı çözümler üzerinde çalışmaya devam ediyoruz:

  • Birçok birim ve entegrasyon testimiz (yama göndermeyi kolaylaştırır).
  • Tam IDE entegrasyonu.

Kodun yanı sıra, Bazel topluluğunun da katılımıyla tüm kod incelemelerinin, hata izlemenin ve tasarım kararlarının herkese açık olarak yapılmasını istiyoruz. Henüz bu aşamada değiliz. Bu nedenle, bazı değişiklikler Bazel deposunda net bir açıklama olmadan görünebilir. Bu şeffaflık eksikliğine rağmen harici geliştiricileri desteklemek ve onlarla işbirliği yapmak istiyoruz. Bu nedenle, geliştirme sürecinin bir kısmı hâlâ Google bünyesinde devam ediyor olsa da kodu açık kaynaklı hale getiriyoruz. Açık modele geçiş yaparken net olmayan veya gerekçesiz görünen bir durum olursa 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ı Google'a özgü teknolojiyle entegre oluyor veya onlardan kurtulmak için bahane arıyoruz (ya da ikisinin bir kombinasyonu). Kod tabanının bu bölümleri GitHub'da kullanılamaz ve muhtemelen hiçbir zaman kullanılamayacaktır.

Ekiple nasıl iletişime geçebilirim?

bazel-discuss@googlegroups.com adresinden bize ulaşabilirsiniz.

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

GitHub'da sorun bildirin.

Kod tabanındaki "Blaze" kelimesi ne anlama geliyor?

Bu, aracın dahili adıdır. Lütfen Blaze'e Bazel olarak atıfta bulunun.

Neden diğer Google projelerinde (Android, Chrome) farklı derleme araçları kullanılıyor?

İlk (alfa) sürüm yayınlanana kadar Bazel harici olarak kullanılamıyordu. Bu nedenle Chromium ve Android gibi açık kaynak projeleri Bazel'i kullanamıyordu. Ayrıca, başlangıçta Windows desteğinin olmaması Chrome gibi Windows uygulamalarının oluşturulmasında sorun yaratıyordu. Proje olgunlaştığı ve daha kararlı hale geldiği için Android Açık Kaynak Projesi, Bazel'e geçiş sürecindedir.

"Bazel" nasıl telaffuz edilir?

ABD İngilizcesinde "basil" (fesleğen) kelimesiyle aynı şekilde telaffuz edilir: "BAY-zel". "Hazel" ile kafiyelidir. IPA: /ˈbeɪzˌəl/