หากมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดดูการรับความช่วยเหลือ
Bazel คืออะไร
Bazel เป็นเครื่องมือที่ทําให้การสร้างและทดสอบซอฟต์แวร์เป็นแบบอัตโนมัติ งานบิลด์ที่รองรับ ได้แก่ การเรียกใช้คอมไพเลอร์และโปรแกรมลิงก์เพื่อสร้างโปรแกรมและไลบรารีที่เรียกใช้ได้ ตลอดจนการประกอบแพ็กเกจที่นำไปใช้งานได้สำหรับ Android, iOS และสภาพแวดล้อมเป้าหมายอื่นๆ Bazel คล้ายกับเครื่องมืออื่นๆ เช่น Make, Ant, Gradle, Buck, Pants และ Maven
Bazel มีอะไรพิเศษ
Bazel ออกแบบมาเพื่อให้เหมาะกับวิธีพัฒนาซอฟต์แวร์ที่ Google ใช้ โดยจะมีฟีเจอร์ต่อไปนี้
- รองรับหลายภาษา: Bazel รองรับหลายภาษา และสามารถขยายการทำงานให้รองรับภาษาโปรแกรมแบบใดก็ได้
- ภาษาระดับสูงที่ใช้สร้าง: โปรเจ็กต์จะอธิบายเป็นภาษา
BUILD
ซึ่งเป็นรูปแบบข้อความที่กระชับซึ่งอธิบายโปรเจ็กต์เป็นชุดไลบรารี ไฟล์ไบนารี และการทดสอบเล็กๆ ที่เชื่อมโยงกัน ในทางตรงกันข้าม เมื่อใช้เครื่องมืออย่าง Make คุณต้องอธิบายไฟล์แต่ละไฟล์และการเรียกใช้คอมไพเลอร์ - การรองรับหลายแพลตฟอร์ม: คุณสามารถใช้เครื่องมือและไฟล์
BUILD
เดียวกันเพื่อสร้างซอฟต์แวร์สำหรับสถาปัตยกรรมที่แตกต่างกันและแพลตฟอร์มที่แตกต่างกันได้ ที่ Google เราใช้ Bazel เพื่อสร้างทุกอย่าง ตั้งแต่แอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานบนระบบในศูนย์ข้อมูลไปจนถึงแอปไคลเอ็นต์ที่ทำงานบนโทรศัพท์มือถือ - ความสามารถในการทําซ้ำ: ในไฟล์
BUILD
ห้องสมุด การทดสอบ และไบนารีแต่ละรายการต้องระบุการพึ่งพาโดยตรงอย่างครบถ้วน Bazel ใช้ข้อมูลนี้เกี่ยวกับข้อกำหนดในการทราบว่าต้องสร้างสิ่งใดใหม่เมื่อคุณทำการเปลี่ยนแปลงในไฟล์ต้นทาง และงานใดบ้างที่ทำงานพร้อมกันได้ ซึ่งหมายความว่าบิลด์ทั้งหมดจะเพิ่มขึ้นเรื่อยๆ และจะให้ผลลัพธ์แบบเดิมเสมอ - ปรับขนาดได้: Bazel จัดการบิลด์ขนาดใหญ่ได้ ที่ Google เป็นเรื่องปกติที่ไบนารีเซิร์ฟเวอร์จะมีไฟล์ต้นฉบับ 100,000 ไฟล์ และบิลด์ที่ไม่มีการเปลี่ยนแปลงไฟล์จะใช้เวลาประมาณ 200 มิลลิวินาที
ทำไม Google ถึงไม่ใช้...
- Make, Ninja: เครื่องมือเหล่านี้ให้การควบคุมที่แม่นยำมากเกี่ยวกับคําสั่งที่จะเรียกใช้เพื่อสร้างไฟล์ แต่ผู้ใช้ต้องเขียนกฎที่ถูกต้อง
- ผู้ใช้โต้ตอบกับ Bazel ที่ระดับที่สูงขึ้น เช่น Bazel มีกฎในตัวสำหรับ "การทดสอบ Java" "ไบนารี C++" และแนวคิดต่างๆ เช่น "แพลตฟอร์มเป้าหมาย" และ "แพลตฟอร์มโฮสต์" กฎเหล่านี้ได้รับการทดสอบอย่างหนักเพื่อให้มั่นใจว่าใช้งานได้จริง
- Ant และ Maven: Ant และ Maven มุ่งเน้นไปที่ Java เป็นหลัก ส่วน Bazel จัดการได้หลายภาษา Bazel แนะนำให้แบ่งโค้ดเบสออกเป็นหน่วยย่อยๆ ที่นํากลับมาใช้ซ้ำได้ และสามารถสร้างขึ้นใหม่ได้เฉพาะหน่วยที่ต้องสร้างขึ้นใหม่เท่านั้น ซึ่งจะช่วยเร่งการพัฒนาเมื่อทำงานกับฐานโค้ดขนาดใหญ่
- Gradle: ไฟล์การกําหนดค่า Bazel มีโครงสร้างมากกว่า Gradle มาก ซึ่งช่วยให้ Bazel เข้าใจสิ่งที่การดำเนินการแต่ละรายการทํา ซึ่งช่วยให้การทํางานแบบขนานมากขึ้นและทําซ้ำได้ดีขึ้น
- Pants, Buck: เครื่องมือทั้ง 2 รายการนี้สร้างขึ้นและพัฒนาโดยอดีตพนักงาน Google ที่ Twitter และ Foursquare รวมถึง Facebook ตามลำดับ เครื่องมือเหล่านี้มีพื้นฐานมาจาก Bazel แต่ชุดฟีเจอร์แตกต่างกันไป จึงไม่ใช่ทางเลือกที่ใช้งานได้จริงสำหรับเรา
Bazel มาจากไหน
Bazel เป็นเครื่องมือเวอร์ชันที่ Google ใช้สร้างซอฟต์แวร์เซิร์ฟเวอร์ภายใน และขยายการให้บริการไปยังซอฟต์แวร์อื่นๆ ด้วย เช่น แอปบนอุปกรณ์เคลื่อนที่ (iOS, Android) ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา
คุณได้เขียนเครื่องมือภายในใหม่เป็นแบบโอเพนซอร์สหรือไม่ เป็นการแยกทางไหม
Bazel ใช้โค้ดส่วนใหญ่ร่วมกับเครื่องมือภายใน และมีการใช้กฎของ Bazel กับบิลด์หลายล้านรายการทุกวัน
เหตุผลที่ Google สร้าง Bazel
เมื่อนานมาแล้ว Google ได้สร้างซอฟต์แวร์โดยใช้ Makefile ที่สร้างขึ้นขนาดใหญ่ ปัญหาเหล่านี้ส่งผลให้บิลด์ทำงานช้าและไม่เสถียร ซึ่งเริ่มรบกวนประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์และความยืดหยุ่นของบริษัท Bazel เป็นวิธีแก้ปัญหาเหล่านี้
Bazel ต้องใช้คลัสเตอร์การสร้างไหม
Bazel จะเรียกใช้การดำเนินการสร้างในเครื่องโดยค่าเริ่มต้น อย่างไรก็ตาม Bazel ยังเชื่อมต่อกับคลัสเตอร์การสร้างเพื่อให้การบิลด์และการทดสอบเร็วขึ้นได้อีกด้วย ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับการเรียกใช้และการแคชจากระยะไกลและการแคชจากระยะไกล
กระบวนการพัฒนาของ Google ทำงานอย่างไร
สำหรับฐานโค้ดเซิร์ฟเวอร์ เราใช้เวิร์กโฟลว์การพัฒนาต่อไปนี้
- โค้ดเซิร์ฟเวอร์ทั้งหมดอยู่ในระบบควบคุมเวอร์ชันขนาดใหญ่ระบบเดียว
- ทุกคนสร้างซอฟต์แวร์ด้วย Bazel
- ทีมต่างๆ เป็นเจ้าของส่วนต่างๆ ของต้นไม้แหล่งที่มา และทำให้คอมโพเนนต์ของตนพร้อมใช้งานเป็นเป้าหมาย
BUILD
- การแยกสาขามีไว้เพื่อจัดการรุ่นเป็นหลัก ดังนั้นทุกคนจะพัฒนาซอฟต์แวร์ในเวอร์ชันหลัก
Bazel เป็นรากฐานของปรัชญานี้ เนื่องจาก Bazel กำหนดให้ระบุการพึ่งพาทั้งหมดอย่างครบถ้วน เราจึงคาดการณ์ได้ว่าโปรแกรมและการทดสอบใดบ้างที่ได้รับผลกระทบจากการเปลี่ยนแปลง และตรวจสอบก่อนส่งได้
ดูข้อมูลเบื้องต้นเพิ่มเติมเกี่ยวกับกระบวนการพัฒนาที่ Google ได้ในบล็อกเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
ทำไมคุณถึงเปิด Bazel
การสร้างซอฟต์แวร์ควรเป็นเรื่องสนุกและง่าย การสร้างที่ช้าและคาดเดาไม่ได้ทำให้การเขียนโปรแกรมขาดความสนุก
เหตุผลที่ควรใช้ Bazel
- Bazel อาจทำให้เวลาสร้างเร็วขึ้นเนื่องจากจะคอมไพล์ซ้ำเฉพาะไฟล์ที่ต้องคอมไพล์ซ้ำเท่านั้น ในทํานองเดียวกัน ระบบจะข้ามการทดสอบที่รู้ว่าไม่มีการเปลี่ยนแปลง
- Bazel ให้ผลลัพธ์ที่แน่นอน วิธีนี้จะช่วยขจัดความคลาดเคลื่อนระหว่างบิลด์แบบเพิ่มและแบบสะอาด แล็ปท็อปและระบบ CI ฯลฯ
- Bazel สามารถสร้างแอปไคลเอ็นต์และเซิร์ฟเวอร์ที่แตกต่างกันด้วยเครื่องมือเดียวกันจากเวิร์กスペースเดียวกัน ตัวอย่างเช่น คุณสามารถเปลี่ยนโปรโตคอลไคลเอ็นต์/เซิร์ฟเวอร์ได้ในคอมมิตเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตแล้วทํางานร่วมกับเซิร์ฟเวอร์ที่อัปเดตแล้วได้ โดยสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกัน ซึ่งจะได้ประโยชน์ทั้งหมดของ Bazel ที่กล่าวไว้ข้างต้น
ฉันขอดูตัวอย่างได้ไหม
ได้ ดูตัวอย่างง่ายๆ หรืออ่านซอร์สโค้ด Bazel เพื่อดูตัวอย่างที่ซับซ้อนมากขึ้น
Bazel ทำอะไรได้ดีที่สุด
Bazel โดดเด่นในเรื่องการสร้างและทดสอบโปรเจ็กต์ด้วยพร็อพเพอร์ตี้ต่อไปนี้
- โปรเจ็กต์ที่มีโค้ดฐานขนาดใหญ่
- โปรเจ็กต์ที่เขียนด้วยภาษาคอมไพล์ (หลายภาษา)
- โปรเจ็กต์ที่ติดตั้งใช้งานในหลายแพลตฟอร์ม
- โปรเจ็กต์ที่มีการทดสอบอย่างละเอียด
ฉันจะเรียกใช้ Bazel ได้จากที่ใด
Bazel ทำงานได้บน Linux, macOS (OS X) และ Windows
การพอร์ตไปยังแพลตฟอร์ม UNIX อื่นๆ ควรทำได้ง่าย ตราบใดที่มี JDK สำหรับแพลตฟอร์มนั้น
ฉันไม่ควรใช้ Bazel ในกรณีใด
- Bazel พยายามใช้แคชอย่างชาญฉลาด ซึ่งหมายความว่าไม่เหมาะสำหรับการดำเนินการบิลด์ที่ไม่ควรแคชเอาต์พุต ตัวอย่างเช่น คุณไม่ควรเรียกใช้ขั้นตอนต่อไปนี้จาก Bazel
- ขั้นตอนการจัดทําที่จะดึงข้อมูลจากอินเทอร์เน็ต
- ขั้นตอนทดสอบที่เชื่อมต่อกับอินสแตนซ์ QA ของเว็บไซต์
- ขั้นตอนการติดตั้งใช้งานที่เปลี่ยนการกำหนดค่าระบบคลาวด์ของเว็บไซต์
- หากบิลด์ของคุณมีขั้นตอนต่อเนื่องกันยาวๆ เพียงไม่กี่ขั้นตอน Bazel อาจช่วยได้ไม่มากนัก คุณจะทำงานได้เร็วขึ้นด้วยการแบ่งขั้นตอนที่ยาวออกเป็นเป้าหมายเล็กๆ แยกกันซึ่ง Bazel สามารถทำงานพร้อมกันได้
ชุดฟีเจอร์ของ Bazel มีความเสถียรเพียงใด
ฟีเจอร์หลัก (C++, Java และกฎเชลล์) มีการใช้งานอย่างแพร่หลายภายใน Google จึงได้รับการทดสอบอย่างละเอียดและมีการเลิกใช้งานน้อยมาก ในทำนองเดียวกัน เราทดสอบ Bazel เวอร์ชันใหม่กับเป้าหมายหลายแสนรายการทุกวันเพื่อหาการถดถอย และเผยแพร่เวอร์ชันใหม่หลายครั้งทุกเดือน
กล่าวโดยย่อคือ Bazel ควรใช้งานได้ทันที ยกเว้นฟีเจอร์ที่มีสถานะเป็น "ทดลอง" การเปลี่ยนแปลงกฎที่ไม่ใช่เวอร์ชันทดลองจะใช้งานร่วมกับเวอร์ชันเก่าได้ ดูรายการสถานะการรองรับฟีเจอร์โดยละเอียดได้ในเอกสารสนับสนุน
Bazel เวอร์ชันไบนารีมีความเสถียรเพียงใด
ภายใน Google เราพยายามทำให้ Bazel ขัดข้องน้อยมาก หลักการนี้ควรใช้กับฐานโค้ดโอเพนซอร์สของเราด้วย
ฉันจะเริ่มใช้ Bazel ได้อย่างไร
โปรดดูหัวข้อเริ่มต้นใช้งาน
Docker ไม่ได้แก้ปัญหาการทําซ้ำใช่ไหม
Docker ช่วยให้คุณสร้างแซนด์บ็อกซ์ที่มีรุ่นระบบปฏิบัติการแบบคงที่ เช่น Ubuntu 12.04, Fedora 21 ได้อย่างง่ายดาย วิธีนี้ช่วยแก้ปัญหาการทําซ้ำสําหรับสภาพแวดล้อมของระบบได้ ซึ่งก็คือ "ฉันต้องใช้ /usr/bin/c++ เวอร์ชันใด"
Docker ไม่ได้กล่าวถึงความสามารถในการผลิตซ้ำสำหรับการเปลี่ยนแปลงในซอร์สโค้ด การเรียกใช้ Make ด้วย Makefile ที่เขียนไม่สมบูรณ์ภายในคอนเทนเนอร์ Docker อาจยังให้ผลลัพธ์ที่ไม่คาดคิด
ภายใน Google เราตรวจสอบเครื่องมือในการควบคุมแหล่งที่มาเพื่อดูความสามารถในการทำซ้ำ วิธีนี้ช่วยให้เราตรวจสอบการเปลี่ยนแปลงในเครื่องมือ ("อัปเกรด GCC เป็น 4.6.1") ด้วยกลไกเดียวกับการเปลี่ยนแปลงในไลบรารีพื้นฐาน ("แก้ไขการตรวจสอบขอบเขตใน OpenSSL") ได้
ฉันจะสร้างไบนารีสําหรับการทําให้ใช้งานได้ใน Docker ได้ไหม
เมื่อใช้ Bazel คุณจะสามารถสร้างไบนารีแบบสแตนด์อโลนที่ลิงก์แบบคงที่ใน C/C++ และไฟล์ jar แบบสแตนด์อโลนสำหรับ Java ได้ เครื่องมือเหล่านี้ทำงานโดยอาศัยส่วนที่ใช้อ้างอิงเพียงไม่กี่รายการในระบบ UNIX ปกติ จึงติดตั้งในคอนเทนเนอร์ Docker ได้ง่ายๆ
Bazel มีรูปแบบการจัดโครงสร้างโปรแกรมที่ซับซ้อนมากขึ้น เช่น โปรแกรม Java ที่ใช้ชุดไฟล์ข้อมูล หรือเรียกใช้โปรแกรมอื่นเป็นกระบวนการย่อย คุณสามารถแพ็กเกจสภาพแวดล้อมดังกล่าวเป็นไฟล์เก็บถาวรแบบสแตนด์อโลนได้ เพื่อให้นำไปใช้งานได้ในระบบต่างๆ ซึ่งรวมถึงอิมเมจ Docker
ฉันจะสร้างอิมเมจ Docker ด้วย Bazel ได้ไหม
ได้ คุณสามารถใช้กฎ Docker เพื่อสร้างอิมเมจ Docker ที่ซ้ำกันได้
Bazel จะทำให้ฉันสร้างบิลด์ซ้ำได้โดยอัตโนมัติไหม
สำหรับไบนารี Java และ C++ จะเป็นแบบนั้น ในกรณีที่คุณไม่เปลี่ยนเครื่องมือ หากคุณมีขั้นตอนการบิลด์ที่เกี่ยวข้องกับสูตรที่กำหนดเอง (เช่น การดำเนินการกับไบนารีผ่านสคริปต์เชลล์ภายในกฎ) คุณจะต้องระมัดระวังเป็นพิเศษ ดังนี้
- อย่าใช้ทรัพยากรที่ไม่ได้ประกาศ การดำเนินการในสภาพแวดล้อมจำลอง (–spawn_strategy=sandboxed ใน Linux เท่านั้น) จะช่วยค้นหาข้อกำหนดที่ไม่ประกาศ
- หลีกเลี่ยงการจัดเก็บการประทับเวลาและรหัสผู้ใช้ในไฟล์ที่สร้างขึ้น ไฟล์ ZIP และไฟล์เก็บถาวรอื่นๆ มีแนวโน้มที่จะเกิดปัญหานี้เป็นพิเศษ
- หลีกเลี่ยงการเชื่อมต่อกับเครือข่าย การดำเนินการในสภาพแวดล้อมจำลองก็ช่วยแก้ปัญหานี้ได้เช่นกัน
- หลีกเลี่ยงกระบวนการที่ใช้ตัวเลขสุ่ม โดยเฉพาะอย่างยิ่งการเรียกดูพจนานุกรมแบบสุ่มในภาษาโปรแกรมหลายภาษา
คุณมีรุ่นไบนารีไหม
ใช่ คุณสามารถดูไบนารีรุ่นล่าสุดและอ่านนโยบายรุ่นของเรา
ฉันใช้ Eclipse/IntelliJ/XCode Bazel ทำงานร่วมกับ IDE ได้อย่างไร
สำหรับ IntelliJ โปรดดูIntelliJ พร้อมปลั๊กอิน Bazel
สำหรับ XCode ให้ดู Tulsi
สำหรับ Eclipse ให้ดูปลั๊กอิน E4B
สําหรับ IDE อื่นๆ โปรดดูบล็อกโพสต์เกี่ยวกับวิธีการทำงานของปลั๊กอินเหล่านี้
ฉันใช้ Jenkins/CircleCI/TravisCI Bazel ทำงานร่วมกับระบบ CI ได้อย่างไร
Bazel จะแสดงรหัสออกที่ไม่ใช่ 0 หากการเรียกใช้การบิลด์หรือการทดสอบไม่สำเร็จ ซึ่งก็เพียงพอสำหรับการผสานรวม CI พื้นฐาน เนื่องจาก Bazel ไม่จำเป็นต้องมีการสร้างที่สะอาดเพื่อให้ถูกต้อง คุณจึงไม่ควรกำหนดค่าระบบ CI ให้ล้างก่อนเริ่มการเรียกใช้การสร้าง/การทดสอบ
โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสออกได้ในคู่มือผู้ใช้
เราจะคาดหวังฟีเจอร์อะไรในอนาคตใน Bazel ได้บ้าง
ดูแผนงาน
ฉันใช้ Bazel สำหรับโปรเจ็กต์ INSERT LANGUAGE HERE ได้ไหม
Bazel ขยายได้ ทุกคนสามารถเพิ่มการรองรับภาษาใหม่ได้ ระบบรองรับหลายภาษา โปรดดูรายการคำแนะนำใน build encyclopedia และดูรายการที่ครอบคลุมมากขึ้นใน awesomebazel.com
หากต้องการพัฒนาส่วนขยายหรือดูวิธีทํางาน ให้ดูเอกสารประกอบเกี่ยวกับการขยาย Bazel
ฉันจะมีส่วนร่วมในฐานโค้ดของ Bazel ได้ไหม
เหตุใดการพัฒนาทั้งหมดจึงไม่เปิดเผยต่อสาธารณะ
เรายังคงต้องรีแฟกทอริงอินเทอร์เฟซระหว่างโค้ดสาธารณะใน Bazel กับส่วนขยายภายในของเราอยู่บ่อยครั้ง ซึ่งทำให้การพัฒนาแบบเปิดเผยข้อมูลได้ยาก
คุณเปิดซอร์สโค้ด Bazel แล้วหรือยัง
การเปิดแหล่งที่มาของ Bazel ยังอยู่ระหว่างดำเนินการ โดยเฉพาะอย่างยิ่ง เรายังคงดำเนินการต่อไปนี้อยู่
- การทดสอบหน่วยและการผสานรวมจำนวนมาก (ซึ่งจะช่วยให้การส่งแพตช์ง่ายขึ้น)
- การผสานรวม IDE อย่างเต็มรูปแบบ
นอกจากโค้ดแล้ว เรายังต้องการให้การตรวจสอบโค้ด การติดตามข้อบกพร่อง และการตัดสินใจด้านการออกแบบทั้งหมดเกิดขึ้นแบบสาธารณะ โดยมีชุมชน Bazel เข้ามามีส่วนร่วมด้วย แต่เรายังไม่ถึงจุดนั้น การเปลี่ยนแปลงบางอย่างจึงจะปรากฏในที่เก็บ Bazel โดยไม่มีคำอธิบายที่ชัดเจน แม้ว่าจะมีความโปร่งใสไม่มากนัก แต่เราต้องการสนับสนุนนักพัฒนาแอปภายนอกและทำงานร่วมกัน เราจึงเปิดโค้ดให้ใช้งาน แม้ว่าการพัฒนาบางอย่างจะยังคงเกิดขึ้นภายใน Google โปรดแจ้งให้เราทราบหากมีสิ่งใดไม่ชัดเจนหรือไม่เป็นธรรมขณะที่เราเปลี่ยนเป็นรูปแบบแบบเปิด
มีบางส่วนของ Bazel ที่จะไม่มีวันเป็นโอเพนซอร์สไหม
ใช่ โค้ดเบสบางรายการผสานรวมกับเทคโนโลยีเฉพาะของ Google หรือเรากำลังมองหาข้ออ้างในการกำจัด (หรือทั้ง 2 อย่างผสมกัน) ส่วนของโค้ดเหล่านี้ไม่พร้อมใช้งานบน GitHub และอาจไม่มีวันพร้อมใช้งาน
ฉันจะติดต่อทีมได้อย่างไร
ติดต่อเราได้ที่ bazel-discuss@googlegroups.com
ฉันจะรายงานข้อบกพร่องได้ที่ใด
เปิดปัญหาใน GitHub
คำว่า "Blaze" ในโค้ดเบสหมายความว่าอย่างไร
ซึ่งเป็นชื่อภายในของเครื่องมือ โปรดเรียก Blaze ว่า Bazel
เหตุใดโปรเจ็กต์อื่นๆ ของ Google (Android, Chrome) จึงใช้เครื่องมือสร้างอื่นๆ
ก่อนหน้านี้ Bazel ยังไม่พร้อมใช้งานภายนอก โปรเจ็กต์โอเพนซอร์สอย่าง Chromium และ Android จึงใช้ไม่ได้ นอกจากนี้ การไม่รองรับ Windows ในตอนแรกก็เป็นปัญหาในการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโปรเจ็กต์มีความสมบูรณ์และมีความเสถียรมากขึ้น โครงการโอเพนซอร์ส Android จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel
คำว่า "Bazel" ออกเสียงว่าอย่างไร
ออกเสียงเหมือนกับ "basil" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกา ซึ่งออกเสียงว่า "เบย์-เซล" โดยคล้องกับ "hazel" IPA: /ˈbeɪzˌəl/