หากมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดดูการขอรับความช่วยเหลือ
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 สร้างซอฟต์แวร์โดยใช้ Makefiles ขนาดใหญ่ที่สร้างขึ้น ซึ่งทำให้การสร้างช้าและไม่น่าเชื่อถือ และเริ่มส่งผลต่อประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์และความคล่องตัวของบริษัท Bazel เป็นวิธีแก้ปัญหา เหล่านี้
Bazel ต้องใช้คลัสเตอร์บิลด์ไหม
โดยค่าเริ่มต้น Bazel จะเรียกใช้การดำเนินการบิลด์ในเครื่อง อย่างไรก็ตาม Bazel ยังเชื่อมต่อกับคลัสเตอร์บิลด์ได้ด้วย เพื่อให้บิลด์และการทดสอบเร็วขึ้น ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับการดำเนินการและการแคชระยะไกลและการแคชระยะไกล
กระบวนการพัฒนาของ Google ทำงานอย่างไร
สำหรับฐานโค้ดของเซิร์ฟเวอร์ เราใช้เวิร์กโฟลว์การพัฒนาต่อไปนี้
- โค้ดเซิร์ฟเวอร์ทั้งหมดของเราอยู่ในระบบควบคุมเวอร์ชันเดียวขนาดใหญ่
- ทุกคนสร้างซอฟต์แวร์ด้วย Bazel
- ทีมต่างๆ เป็นเจ้าของส่วนต่างๆ ของโครงสร้างแหล่งที่มา และทำให้คอมโพเนนต์ของตนพร้อมใช้งานเป็น
BUILDเป้าหมาย - โดยหลักๆ แล้วการแยกสาขาจะใช้เพื่อจัดการรุ่นต่างๆ เพื่อให้ทุกคนพัฒนาซอฟต์แวร์ในรีวิชันล่าสุด
Bazel เป็นรากฐานของปรัชญานี้ เนื่องจาก Bazel กำหนดให้ระบุการขึ้นต่อกันทั้งหมดอย่างครบถ้วน เราจึงคาดการณ์ได้ว่าโปรแกรมและการทดสอบใดบ้างที่ได้รับผลกระทบจากการเปลี่ยนแปลง และตรวจสอบโปรแกรมและการทดสอบเหล่านั้นก่อนส่ง
ดูข้อมูลเบื้องหลังเพิ่มเติมเกี่ยวกับกระบวนการพัฒนาที่ Google ได้ในบล็อก eng tools
เหตุใดคุณจึงเปิดตัว Bazel
การสร้างซอฟต์แวร์ควรเป็นเรื่องง่ายและสนุก การสร้างที่ช้าและคาดเดาไม่ได้ทำให้การเขียนโปรแกรมไม่สนุก
เหตุใดฉันจึงควรใช้ Bazel
- Bazel อาจช่วยให้คุณสร้างได้เร็วขึ้นเนื่องจากสามารถคอมไพล์ไฟล์ที่ต้องคอมไพล์ซ้ำเท่านั้น ในทำนองเดียวกัน ก็สามารถข้ามการทดสอบซ้ำ ที่ทราบว่าไม่มีการเปลี่ยนแปลงได้
- Bazel ให้ผลลัพธ์ที่แน่นอน ซึ่งจะช่วยขจัดความคลาดเคลื่อนระหว่าง การสร้างแบบเพิ่มและการสร้างใหม่ทั้งหมด แล็ปท็อปและระบบ CI เป็นต้น
- Bazel สามารถสร้างแอปไคลเอ็นต์และเซิร์ฟเวอร์ที่แตกต่างกันด้วยเครื่องมือเดียวกันจากเวิร์กสเปซเดียวกัน เช่น คุณสามารถเปลี่ยนโปรโตคอลไคลเอ็นต์/เซิร์ฟเวอร์ได้ในการคอมมิตเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตแล้วทํางานร่วมกับเซิร์ฟเวอร์ที่อัปเดตแล้วได้ โดยสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกัน และรับประโยชน์ทั้งหมดของ Bazel ที่กล่าวถึงข้างต้น
ฉันดูตัวอย่างได้ไหม
ได้ ดูตัวอย่างแบบง่าย หรืออ่านซอร์สโค้ดของ Bazel เพื่อดูตัวอย่างที่ซับซ้อนกว่านี้
Bazel เหมาะกับงานใดมากที่สุด
Bazel โดดเด่นในการสร้างและทดสอบโปรเจ็กต์ที่มีคุณสมบัติต่อไปนี้
- โปรเจ็กต์ที่มีโค้ดเบสขนาดใหญ่
- โปรเจ็กต์ที่เขียนในภาษาแบบคอมไพล์ (หลายภาษา)
- โปรเจ็กต์ที่ติดตั้งใช้งานในหลายแพลตฟอร์ม
- โปรเจ็กต์ที่มีการทดสอบอย่างครอบคลุม
ฉันจะเรียกใช้ Bazel ได้ที่ไหน
Bazel ทำงานบน Linux, macOS (OS X) และ Windows
การพอร์ตไปยังแพลตฟอร์ม UNIX อื่นๆ ควรทำได้ค่อนข้างง่าย ตราบใดที่มี JDK สำหรับแพลตฟอร์มนั้น
ฉันไม่ควรใช้ Bazel สำหรับอะไร
- Bazel พยายามแคชอย่างชาญฉลาด ซึ่งหมายความว่าไม่เหมาะสำหรับ
การเรียกใช้การดำเนินการบิลด์ที่เอาต์พุตไม่ควรแคช ตัวอย่างเช่น คุณไม่ควรเรียกใช้ขั้นตอนต่อไปนี้จาก Bazel
- ขั้นตอนการรวบรวมที่ดึงข้อมูลจากอินเทอร์เน็ต
- ขั้นตอนการทดสอบที่เชื่อมต่อกับอินสแตนซ์ QA ของเว็บไซต์
- ขั้นตอนการติดตั้งใช้งานที่จะเปลี่ยนการกำหนดค่าระบบคลาวด์ของเว็บไซต์
- หากการสร้างประกอบด้วยขั้นตอนที่ยาวและต่อเนื่องกัน 2-3 ขั้นตอน Bazel อาจช่วยได้ไม่มากนัก คุณจะได้รับความเร็วมากขึ้นด้วยการแบ่งขั้นตอนที่ยาวออกเป็น เป้าหมายที่เล็กลงและแยกกัน ซึ่ง Bazel สามารถเรียกใช้แบบขนานได้
ชุดฟีเจอร์ของ Bazel มีความเสถียรเพียงใด
ฟีเจอร์หลัก (กฎ C++, Java และ Shell) มีการใช้งานอย่างกว้างขวางภายใน 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++ จะใช้ได้ หากคุณไม่เปลี่ยน Toolchain หากมีขั้นตอนการบิลด์ที่เกี่ยวข้องกับสูตรที่กำหนดเอง (เช่น การเรียกใช้ไบนารีผ่านสคริปต์เชลล์ภายในกฎ) คุณจะต้องระมัดระวังเป็นพิเศษดังนี้
- อย่าใช้การอ้างอิงที่ไม่ได้ประกาศ การดำเนินการในแซนด์บ็อกซ์ (–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 ขยายได้ ทุกคนสามารถเพิ่มการรองรับภาษาใหม่ๆ ได้ รองรับหลายภาษา โปรดดูรายการคำแนะนำในสารานุกรม การสร้างและรายการที่ครอบคลุมมากขึ้นใน 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 Open Source Project จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel
"บาเซล" ออกเสียงอย่างไร
ออกเสียงเหมือนกับ "basil" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกาว่า "BAY-zel" ซึ่งคล้องจองกับคำว่า "เฮเซล" IPA: /ˈbeɪzˌəl/