การเปิดตัวภาษาโปรแกรม Ruby 3.1

Ruby 3.1.0 เปิดตัวแล้ว ซึ่งเป็นภาษาการเขียนโปรแกรมเชิงวัตถุแบบไดนามิกที่มีประสิทธิภาพสูงในการพัฒนาโปรแกรมและรวมเอาคุณสมบัติที่ดีที่สุดของ Perl, Java, Python, Smalltalk, Eiffel, Ada และ Lisp รหัสโครงการเผยแพร่ภายใต้ใบอนุญาต BSD (“2-clause BSDL”) และ “Ruby” ซึ่งอ้างอิงถึงใบอนุญาต GPL เวอร์ชันล่าสุด และเข้ากันได้กับ GPLv3 โดยสมบูรณ์

การปรับปรุงหลัก:

  • YJIT คอมไพเลอร์ JIT ในกระบวนการทดลองตัวใหม่ได้ถูกเพิ่มเข้ามา ซึ่งสร้างขึ้นโดยนักพัฒนาแพลตฟอร์มอีคอมเมิร์ซของ Shopify โดยเป็นส่วนหนึ่งของความคิดริเริ่มในการปรับปรุงประสิทธิภาพของโปรแกรม Ruby ที่ใช้เฟรมเวิร์ก Rails และเรียกใช้เมธอดมากมาย ข้อแตกต่างที่สำคัญจากคอมไพเลอร์ MJIT JIT ที่ใช้ก่อนหน้านี้ ซึ่งอิงตามการประมวลผลวิธีทั้งหมดและใช้คอมไพเลอร์ภายนอกในภาษา C คือ YJIT ใช้ Lazy Basic Block Versioning (LBBV) และมีคอมไพเลอร์ JIT ที่ผสานรวม เมื่อใช้ LBBV JIT จะคอมไพล์เฉพาะส่วนเริ่มต้นของเมธอด และคอมไพล์ส่วนที่เหลือในภายหลัง หลังจากกำหนดประเภทของตัวแปรและอาร์กิวเมนต์ที่ใช้ระหว่างการดำเนินการแล้ว เมื่อใช้ YJIT ประสิทธิภาพจะเพิ่มขึ้น 22% เมื่อรันการทดสอบ Railsbench และเพิ่มขึ้น 39% ในการทดสอบการเรนเดอร์ของเหลว ขณะนี้ YJIT ถูกจำกัดให้รองรับระบบปฏิบัติการที่คล้ายยูนิกซ์บนระบบที่มีสถาปัตยกรรม x86-64 และถูกปิดใช้งานตามค่าเริ่มต้น (เพื่อเปิดใช้งาน ให้ระบุแฟล็ก “--yjit” ในบรรทัดคำสั่ง)
  • ปรับปรุงประสิทธิภาพของคอมไพเลอร์ MJIT JIT รุ่นเก่า สำหรับโปรเจ็กต์ที่ใช้ Rails ขนาดแคชสูงสุดเริ่มต้น (--jit-max-cache) เพิ่มขึ้นจาก 100 เป็น 10000 คำสั่ง หยุดใช้ JIT สำหรับวิธีการที่มีคำแนะนำมากกว่า 1000 รายการ เพื่อรองรับ Zeitwerk of Rails รหัส JIT จะไม่ถูกยกเลิกอีกต่อไปเมื่อเปิดใช้งาน TracePoint สำหรับกิจกรรมของชั้นเรียน
  • ประกอบด้วยดีบักเกอร์ debug.gem ที่เขียนใหม่ทั้งหมด ซึ่งรองรับการดีบักระยะไกล ไม่ทำให้แอปพลิเคชันที่ทำการดีบั๊กช้าลง รองรับการรวมเข้ากับอินเทอร์เฟซการดีบักขั้นสูง (VSCode และ Chrome) สามารถใช้สำหรับการดีบักแอปพลิเคชันแบบมัลติเธรดและหลายกระบวนการ ให้ อินเทอร์เฟซการเรียกใช้โค้ด REPL นำเสนอความสามารถในการติดตามขั้นสูง สามารถบันทึกและเล่นข้อมูลโค้ดซ้ำได้ ดีบักเกอร์ lib/debug.rb ที่นำเสนอก่อนหน้านี้ได้ถูกลบออกจากการแจกจ่ายฐาน
    การเปิดตัวภาษาโปรแกรม Ruby 3.1
  • ใช้การเน้นภาพข้อผิดพลาดในรายงานการติดตามการโทรกลับ การระบุข้อผิดพลาดมีให้โดยใช้แพ็คเกจ gem error_highlight ในตัวและเปิดใช้งานตามค่าเริ่มต้น หากต้องการปิดใช้การตั้งค่าสถานะข้อผิดพลาด คุณสามารถใช้การตั้งค่า “--disable-error_highlight” $ ruby ​​​​test.rb test.rb:1:in "": unknown method "time" for 1:Integer (NoMethodError) 1.time {} ^^^^^ คุณหมายถึงอะไร? ครั้ง
  • เปลือกของการคำนวณแบบโต้ตอบ IRB (REPL, Read-Eval-Print-Loop) ดำเนินการเติมโค้ดที่ป้อนให้สมบูรณ์โดยอัตโนมัติ (ขณะที่คุณพิมพ์ คำใบ้จะปรากฏขึ้นพร้อมตัวเลือกสำหรับการป้อนข้อมูลต่อเนื่อง ซึ่งระหว่างนั้นคุณสามารถย้ายไปด้วย Tab หรือ Shift+ ปุ่มแท็บ) หลังจากเลือกตัวเลือกการดำเนินการต่อ กล่องโต้ตอบจะปรากฏขึ้นใกล้ๆ เพื่อแสดงเอกสารที่เกี่ยวข้องกับรายการที่เลือก แป้นพิมพ์ลัด Alt+d สามารถใช้เพื่อเข้าถึงเอกสารฉบับเต็ม
    การเปิดตัวภาษาโปรแกรม Ruby 3.1
  • ขณะนี้ไวยากรณ์ของภาษาอนุญาตให้ข้ามค่าในตัวอักษรแฮชและอาร์กิวเมนต์ของคำหลักเมื่อเรียกใช้ฟังก์ชัน ตัวอย่างเช่น แทนที่จะใช้นิพจน์ “{x: x, y: y}” ตอนนี้คุณสามารถระบุ “{x:, y:}” และแทน “foo(x: x, y: y)” - foo( x:, ย: )".
  • การสนับสนุนที่เสถียรสำหรับการจับคู่รูปแบบบรรทัดเดียว (ary => [x, y, z]) ซึ่งไม่ถูกตั้งค่าสถานะเป็นการทดลองอีกต่อไป
  • ขณะนี้ตัวดำเนินการ "^" ในการจับคู่รูปแบบสามารถมีนิพจน์ที่กำหนดเองได้ เช่น Prime.each_cons(2).lazy.find_all{_1 ใน [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • ในการจับคู่รูปแบบบรรทัดเดียว คุณสามารถละเว้นวงเล็บได้: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • ภาษาคำอธิบายประกอบประเภท RBS ซึ่งช่วยให้คุณกำหนดโครงสร้างของโปรแกรมและประเภทที่ใช้ได้เพิ่มการรองรับสำหรับการระบุขีดจำกัดสูงสุดของพารามิเตอร์ประเภทโดยใช้สัญลักษณ์ "<" เพิ่มการรองรับนามแฝงของประเภททั่วไป ดำเนินการสนับสนุนสำหรับ คอลเลกชันสำหรับการจัดการอัญมณี ปรับปรุงประสิทธิภาพ และปรับใช้ลายเซ็นใหม่มากมายสำหรับไลบรารีในตัวและไลบรารีมาตรฐาน
  • มีการเพิ่มการสนับสนุนการทดลองสำหรับสภาพแวดล้อมการพัฒนาแบบรวมลงในตัววิเคราะห์ประเภทคงที่ TypePro ซึ่งสร้างคำอธิบายประกอบ RBS ตามการวิเคราะห์โค้ดโดยไม่มีข้อมูลประเภทที่ชัดเจน (เช่น มีการเตรียมส่วนเสริมสำหรับการรวม TypePro เข้ากับโปรแกรมแก้ไข VSCode)
  • ลำดับการประมวลผลการมอบหมายหลายรายการมีการเปลี่ยนแปลง ตัวอย่างเช่น ก่อนหน้านี้องค์ประกอบของนิพจน์ “foo[0], bar[0] = baz, qux” ได้รับการประมวลผลตามลำดับ baz, qux, foo, bar แต่ตอนนี้ foo, bar, baz, qux
  • เพิ่มการสนับสนุนการทดลองสำหรับการจัดสรรหน่วยความจำสำหรับสตริงโดยใช้กลไก VWA (การจัดสรรความกว้างตัวแปร)
  • เวอร์ชันที่อัปเดตของโมดูลอัญมณีในตัวและที่รวมอยู่ในไลบรารีมาตรฐาน แพ็คเกจ net-ftp, net-imap, net-pop, net-smtp, matrix, prime และ debug มีอยู่ในตัว

ที่มา: opennet.ru

เพิ่มความคิดเห็น