Ruby 4.0 ออกแล้ว พร้อม Ruby Box Isolation และตัวคอมไพเลอร์ ZJIT ใหม่
Ruby 4.0 เปิดตัวแล้ว มาพร้อมกับฟีเจอร์ Ruby Box สำหรับแยกสภาพแวดล้อมแบบทดลอง ตัวคอมไพเลอร์ ZJIT ใหม่ และการปรับปรุงประสิทธิภาพและความสามารถในการทำงานพร้อมกัน
Ruby 4.0 ซึ่งเป็นภาษาการเขียนโปรแกรมระดับสูงและใช้งานได้ทั่วไป ได้ถูกปล่อยออกมาแล้ว พร้อมกับการแนะนำเทคโนโลยีการแยกและการคอมไพล์ใหม่ ๆ รวมถึงการปรับปรุงประสิทธิภาพ ความสามารถในการทำงานพร้อมกัน และไลบรารีมาตรฐานอย่างกว้างขวาง
การเพิ่มที่น่าสนใจคือ Ruby Box ซึ่งเป็นกลไกทดลองใหม่ที่ออกแบบมาเพื่อแยกคำนิยามต่าง ๆ ภายในกระบวนการ Ruby ที่กำลังทำงาน เมื่อเปิดใช้งานผ่านตัวแปรสภาพแวดล้อม RUBY_BOX=1 Ruby Box จะช่วยให้คลาส โมดูล ตัวแปรทั่วโลก การปรับปรุงฟังก์ชันแบบ Monkey patch และแม้แต่ไลบรารีที่โหลดแล้ว ถูกจำกัดอยู่ในกล่องเฉพาะ
สิ่งนี้ช่วยให้สามารถใช้งานในกรณีต่าง ๆ เช่น การรันชุดทดสอบอย่างปลอดภัยเมื่อมีการปรับแก้โค้ดชั่วคราว การรันเวอร์ชันหลายเวอร์ชันของเว็บแอปพลิเคชันพร้อมกันสำหรับการปรับใช้แบบ blue-green หรือการประเมินการอัปเกรด dependencies พร้อมกันโดยการเปรียบเทียบพฤติกรรมเวลารัน
อีกการเปลี่ยนแปลงสำคัญคือการเปิดตัว ZJIT ซึ่งเป็นตัวคอมไพเลอร์แบบ just-in-time ใหม่ที่ทดลองใช้ซึ่งเข้ามาแทนที่ YJIT ZJIT เป็น JIT แบบเป็นวิธีการ (method-based) ซึ่งสร้างขึ้นด้วยหน่วยการคอมไพล์ที่ใหญ่ขึ้นและการแทนค่ากลางแบบ SSA เพื่อยกระดับประสิทธิภาพระยะยาวของ Ruby และทำให้ตัวคอมไพเลอร์เข้าถึงได้ง่ายขึ้นสำหรับผู้ร่วมพัฒนาภายนอก
ZJIT ต้องการ Rust 1.85 หรือใหม่กว่าในการสร้างและสามารถเปิดใช้งานได้ด้วยตัวเลือก –zjit หรือในระหว่างรันไทม์ ใน Ruby 4.0 ZJIT มีประสิทธิภาพดีกว่าตัวแปลแล้ว แม้ว่ายังคงช้ากว่า YJIT ทีมงานหลักของ Ruby แนะนำให้หลีกเลี่ยงการใช้งานในสภาพแวดล้อมการผลิตและแนะนำให้ทดลองใช้งาน โดยมีเป้าหมายที่ระบุไว้ว่าจะทำให้ ZJIT พร้อมสำหรับการผลิตและเร็วกว่า YJIT ใน Ruby 4.1
นอกจากนี้ Ruby 4.0 ยังแนะนำคลาสใหม่ Ractor::Port เพื่อให้มีวิธีการสื่อสารระหว่าง Ractor ที่ชัดเจนและมั่นคงมากขึ้น แทนที่ API เดิม เช่น Ractor.yield และ Ractor#take ซึ่งได้ถูกลบออกไปแล้ว Ractor ยังได้รับประโยชน์จากการลดความขัดแย้งของล็อกทั่วโลก ลดรัฐภายในที่ใช้ร่วมกัน และปรับปรุงพฤติกรรมของแคช CPU ทั้งหมดนี้ส่งผลให้ประสิทธิภาพการทำงานแบบขนานดีขึ้น
ในระดับภาษาการเขียนโปรแกรม Ruby 4.0 มีการเปลี่ยนแปลงที่น่าสังเกตหลายอย่าง ตัวดำเนินการเชิงตรรกะที่อยู่ต้นบรรทัดตอนนี้จะต่อเนื่องกับบรรทัดก่อนหน้า ช่วยให้การอ่านเงื่อนไขหลายบรรทัดง่ายขึ้น การจัดการกับ *nil ได้สอดคล้องกับพฤติกรรม splat อื่น ๆ และการรายงานข้อผิดพลาดสำหรับจำนวนอาร์กิวเมนต์ที่ไม่ตรงกันได้รับการปรับปรุงให้มี backtrace ที่ชัดเจนและมีตัวอย่างโค้ดบริบทประกอบ
คลาสหลักและโมดูลได้รับการปรับปรุงในหลายด้าน อาร์เรย์มีวิธีการค้นหาที่มีประสิทธิภาพมากขึ้น Enumerator มีการรับรู้ขนาดที่ดียิ่งขึ้น File::Stat แสดงเวลาสร้างไฟล์บน Linux เมื่อรองรับโดยเคอร์เนลและระบบไฟล์ และ Set ได้ถูกย้ายจากไลบรารีมาตรฐานมาเป็นคลาสหลักพร้อมกับผลลัพธ์ inspect ที่เรียบง่ายขึ้น
Pathname ตอนนี้กลายเป็นคลาสหลักเช่นกัน และการสนับสนุน Unicode ได้อัปเดตเป็นเวอร์ชัน 17.0 รวมถึง Emoji 17.0 ด้วย มีการปรับปรุง ขยาย หรือทำความสะอาด API จำนวนมากในส่วนของ IO, Fiber, Thread, Socket และ Kernel โดยการลบพฤติกรรมที่เลิกใช้มานานออกไป
ไลบรารีมาตรฐานก็ได้รับการจัดระเบียบใหม่ด้วย โดยมีหลาย gem ที่มากับระบบถูกยกระดับจากสถานะเริ่มต้น บางตัวอัปเดตเป็นเวอร์ชันหลักใหม่ และบางส่วนถูกลบหรือแยกออก เช่น ไลบรารี CGI ซึ่งไม่ถูกจัดให้ครบถ้วนโดยค่าเริ่มต้นอีกต่อไป
ในด้านการนำไปใช้งาน Ruby 4.0 มอบการปรับปรุงประสิทธิภาพที่ครอบคลุม การสร้างอ็อบเจ็กต์ทำได้เร็วขึ้น โดยเฉพาะเมื่อมีการใช้คีย์เวิร์ดอาร์กิวเมนต์ การเก็บขยะมีประสิทธิภาพมากขึ้นในหลายมิติ การเข้าถึงตัวแปรอินสแตนซ์ได้รับการปรับให้เหมาะสมภายใน และการล็อกลดลงในหลายเส้นทางที่ร้อนแรง
สุดท้าย Ruby 4.0 ยังได้นำเสนอการเปลี่ยนแปลงด้านความเข้ากันได้ที่นักพัฒนาควรทราบ มีการลบ API ที่เลิกใช้หลายตัวออกไป รวมถึงพฤติกรรมการสร้างกระบวนการแบบเก่าและวิธีการ Ractor รุ่นเก่า และบาง API ของ C ถูกเลิกใช้หรือปรับปรุงเพื่อเพิ่มความปลอดภัยและความถูกต้อง การสนับสนุน Windows ตอนนี้ต้องใช้ Visual Studio 2015 หรือใหม่กว่า
สำหรับข้อมูลเพิ่มเติม ดูที่ประกาศ
