หากมีข้อสงสัยหรือต้องการรับการสนับสนุน โปรดดูการขอรับความช่วยเหลือ
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 ตามลำดับ แม้ว่าเครื่องมือเหล่านี้จะได้รับการออกแบบตาม Bazel แต่ชุดฟีเจอร์ของเครื่องมือเหล่านี้แตกต่างกัน จึงไม่สามารถใช้แทนกันได้
Bazel มาจากไหน
Bazel เป็นเครื่องมือที่ Google ใช้สร้างซอฟต์แวร์เซิร์ฟเวอร์ภายใน นอกจากนี้ เรายังขยายการให้บริการเพื่อสร้างซอฟต์แวร์อื่นๆ ด้วย เช่น แอปบนอุปกรณ์เคลื่อนที่ (iOS, Android) ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา
คุณเขียนเครื่องมือภายในใหม่เป็นโอเพนซอร์สไหม Is it a fork?
Bazel แชร์โค้ดส่วนใหญ่กับเครื่องมือภายใน และมีการใช้กฎของ Bazel ในการบิลด์หลายล้านรายการทุกวัน
ทำไม Google จึงสร้าง Bazel
เมื่อนานมาแล้ว Google สร้างซอฟต์แวร์โดยใช้ Makefiles ขนาดใหญ่ที่สร้างขึ้น ซึ่งส่งผลให้การสร้างช้าและไม่น่าเชื่อถือ และเริ่มส่งผลต่อประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์และความคล่องตัวของบริษัท 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 ของเว็บไซต์
- ขั้นตอนการติดตั้งใช้งานที่จะเปลี่ยนการกำหนดค่าระบบคลาวด์ของเว็บไซต์
- หากการสร้างประกอบด้วยขั้นตอนที่ยาวและต่อเนื่องกัน 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) จึงใช้เครื่องมือบิลด์อื่นๆ
ก่อนที่จะเปิดตัวเวอร์ชันแรก (Alpha) Bazel ไม่พร้อมใช้งานภายนอก ดังนั้นโปรเจ็กต์โอเพนซอร์ส เช่น Chromium และ Android จึงไม่สามารถใช้งานได้ นอกจากนี้ การที่ไม่มีการรองรับ Windows ในตอนแรกยังเป็นปัญหาในการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโปรเจ็กต์มีการพัฒนาและมีความเสถียรมากขึ้น Android Open Source Project จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel
"Bazel" ออกเสียงอย่างไร
ออกเสียงเหมือนกับ "basil" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกาว่า "เบ-ซิล" ซึ่งคล้องจองกับ "hazel" IPA: /ˈbeɪzˌəl/