หลังจากหนึ่งปีของการพัฒนา
หลัก
- การทดลอง
สนับสนุน การจับคู่รูปแบบ (การจับคู่รูปแบบ ) เพื่อวนซ้ำวัตถุที่กำหนดและกำหนดค่าหากมีการจับคู่รูปแบบกรณี [0, [1, 2, 3]] ใน [a, [b, *c]] pa #=> 0
pb #=> 1
พีซี #=> [2, 3] จบกรณี {a: 0, b: 1}
ใน{a:0,x:1}
: ไม่สามารถเข้าถึงได้
ใน {a: 0, b: var}
p var #=> 1
ปลาย - เชลล์ของการคำนวณเชิงโต้ตอบ irb (REPL, Read-Eval-Print-Loop) มีความเป็นไปได้ในการแก้ไขหลายบรรทัด โดยดำเนินการโดยใช้ไลบรารีที่เข้ากันได้กับ readline
Reline เขียนด้วยภาษารูบี มีการรวมการสนับสนุน rdoc ซึ่งช่วยให้ดูข้อมูลอ้างอิงเกี่ยวกับคลาส โมดูล และวิธีการที่ระบุใน irb มีการเน้นสีของบรรทัดด้วยรหัสที่แสดงผ่าน Binding#irb และผลลัพธ์ของการตรวจสอบอ็อบเจ็กต์คลาสพื้นฐาน - เพิ่มตัวรวบรวมขยะขนาดกะทัดรัด (Compaction GC) ที่สามารถจัดระเบียบพื้นที่ของหน่วยความจำ แก้ปัญหาประสิทธิภาพการทำงานช้าและการใช้หน่วยความจำที่เพิ่มขึ้นเนื่องจากการแตกตัวของหน่วยความจำที่เกิดขึ้นระหว่างการทำงานของแอปพลิเคชัน Ruby แบบมัลติเธรด เพื่อบรรจุวัตถุบนกอง
เสนอ เมธอด GC.compact เพื่อลดจำนวนเพจหน่วยความจำที่ใช้และเพิ่มประสิทธิภาพฮีปสำหรับการดำเนินการ
CoW (คัดลอกเมื่อเขียน) -
ดำเนินการ เตรียมแยกอาร์กิวเมนต์ตามตำแหน่งในรายการ ("def foo(a,b,c)") และคีย์เวิร์ด ("def foo(key: val)") การแปลงอาร์กิวเมนต์อัตโนมัติตามคำหลักและตำแหน่งเลิกใช้แล้ว และจะไม่รองรับในสาขา Ruby 3.0 โดยเฉพาะอย่างยิ่ง เลิกใช้อาร์กิวเมนต์สุดท้ายเป็นพารามิเตอร์คีย์เวิร์ด ส่งผ่านอาร์กิวเมนต์ตามคีย์เวิร์ดเป็นพารามิเตอร์แฮชสุดท้าย และแยกอาร์กิวเมนต์สุดท้ายเป็นพารามิเตอร์ตำแหน่งและคีย์เวิร์ดdef foo(คีย์: 42); จบ; foo({key: 42}) #เตือนแล้ว
def foo(**กิโลวัตต์); จบ; foo({key: 42}) #เตือนแล้ว
def foo(คีย์: 42); จบ; foo(**{key: 42}) # ตกลง
def foo(**กิโลวัตต์); จบ; foo(**{key: 42}) # ตกลงdef foo(h, **กิโลวัตต์); จบ; foo(key: 42) #เตือนแล้วนะ
def foo(h, คีย์: 42); จบ; foo(คีย์: 42) #เตือนแล้ว
def foo(h, **กิโลวัตต์); จบ; foo({key: 42}) # ตกลง
def foo(h, คีย์: 42); จบ; foo({key: 42}) # ตกลงdef foo(h={}, คีย์: 42); จบ; foo("key" => 43, key: 42) #คำเตือน
def foo(h={}, คีย์: 42); จบ; foo({"key" => 43, key: 42}) # เตือน
def foo(h={}, คีย์: 42); จบ; foo({"key" => 43}, key: 42) # ตกลงdef foo(opt={}); จบ; foo( คีย์: 42 ) # ตกลง
def foo(h, **ไม่มี); จบ; foo(คีย์: 1) # ArgumentError
def foo(h, **ไม่มี); จบ; foo(**{key: 1}) # ArgumentError
def foo(h, **ไม่มี); จบ; foo("str" => 1) # ArgumentError
def foo(h, **ไม่มี); จบ; foo({key: 1}) # ตกลง
def foo(h, **ไม่มี); จบ; foo({"str" => 1}) # ตกลงชั่วโมง = {}; def foo(*a) จบ; ฟู(**h) # [] h = {}; def foo(a) จบ; foo(**h) # {} และคำเตือน
ชั่วโมง = {}; def foo(*a) จบ; ฟู(h) # [{}] h = {}; def foo(a) จบ; ฟู(h) # {} -
โอกาส ใช้ชื่อตัวแปรเริ่มต้นที่เป็นตัวเลขสำหรับพารามิเตอร์บล็อก[1, 2, 3].each { ใส่ @1 } # เช่น [1, 2, 3].each { |i| ทำให้ฉัน }
- การสนับสนุนการทดลองสำหรับช่วงที่ไม่มีค่าเริ่มต้น
ary[..3] # เหมือนกับ ary[0..3] rel.where(ยอดขาย: ..100)
- เพิ่มเมธอด Enumerable#tally ซึ่งจะนับจำนวนครั้งที่แต่ละองค์ประกอบเกิดขึ้น
["a", "b", "c", "b"].tally
#=> {"a"=>1, "b"=>2, "c"=>1} - อนุญาตให้เรียกใช้เมธอดส่วนตัวด้วยตัวอักษร "self"
หนี
ปลาย
ส่วนตัว :foo
ตัวเอง.ฟู - เพิ่ม Enumerator::Lazy#eager method เพื่อสร้างการแจงนับปกติจากการแจงนับ lazy (Enumerator::Lazy)
a = %w(ฟู บาร์ บาซ)
e = a.lazy.map {|x| x.upcase }.แผนที่ {|x| x + "!" }.กระตือรือร้น
p e.class #=> ตัวแจงนับ
e.แผนที่ {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”] - การพัฒนาคอมไพเลอร์ JIT รุ่นทดลองยังคงดำเนินต่อไป ซึ่งสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันในภาษา Ruby ได้อย่างมีนัยสำคัญ คอมไพเลอร์ JIT ที่เสนอใน Ruby จะเขียนโค้ด C ลงดิสก์ก่อน หลังจากนั้นจึงเรียกคอมไพเลอร์ C ภายนอกเพื่อสร้างคำสั่งเครื่อง (รองรับ GCC, Clang และ Microsoft VC ++) เวอร์ชันใหม่ใช้วิธีการปรับใช้แบบอินไลน์หากจำเป็น การเลือกโหมดการปรับให้เหมาะสมระหว่างการคอมไพล์ ค่าดีฟอลต์ของ "--jit-min-call" เพิ่มขึ้นจาก 5 เป็น 10000 และ "--jit-max-cache" จาก 1000 เป็น 100 .
- ปรับปรุงประสิทธิภาพของ CGI.escapeHTML, Monitor และ MonitorMixin
- Module#name, true.to_s, false.to_s และ nil.to_s ทำให้แน่ใจว่ามีการส่งคืนสตริงที่ไม่มีการเปลี่ยนแปลงสำหรับวัตถุที่ระบุ
- ขนาดของไฟล์ไบนารีที่สร้างโดยเมธอด RubyVM::InstructionSequence#to_binary ลดลง
- อัปเดตเวอร์ชันของคอมโพเนนต์ในตัว รวมถึง
Bundler 2.1.2, RubyGems 3.1.2,
แร็ค 1.4.15,
CSV 3.1.2, REXML 3.2.3,
อาร์เอส 0.2.8,
เครื่องสแกนสตริง 1.0.3; - ไลบรารีย้ายจากการแจกจ่ายฐานไปยังแพ็คเกจอัญมณีภายนอก
CMath (อัญมณีคณิตศาสตร์),
Scanf (สแกนอัญมณี),
เปลือกหอย (อัญมณีเปลือก)
Synchronizer (อัญมณีซิงค์),
ThreadsWait (รออัญมณี),
E2MM (อัญมณี e2mmap) - โมดูล stdlib เริ่มต้นเผยแพร่บน rubygems.org:
เกณฑ์มาตรฐาน
ซีจี,
ผู้รับมอบอำนาจ
รับยาว,
เน็ตป๊อป,
smtp สุทธิ,
เปิด 3,
พีสโตร์,
ซิงเกิ้ลตัน โมดูลมอนิเตอร์ไม่ได้ย้ายไปที่ rubygems.org
ผู้สังเกตการณ์
หมดเวลา,
ติดตาม,
เกลียด,
yaml ซึ่งมาพร้อมกับ ruby-core เท่านั้น - ขณะนี้การสร้าง Ruby ต้องการคอมไพเลอร์ C ที่รองรับมาตรฐาน C99
ที่มา: opennet.ru