روبي پروگرامنگ ٻولي جو رليز 2.7.0

ترقي جي هڪ سال کان پوء شايع ٿيل ڇڏڻ روبي 2.7.0، هڪ متحرڪ آبجیکٹ تي مبني پروگرامنگ ٻولي جيڪا پروگرام ڊولپمينٽ ۾ انتهائي ڪارائتو آهي ۽ پرل، جاوا، پٿون، سمال ٽالڪ، ايفل، اڊا ۽ لِسپ جون بهترين خوبيون شامل ڪري ٿي. پروجيڪٽ ڪوڊ BSD ("2-شق BSDL") ۽ "روبي" لائسنس جي تحت ورهايو ويو آهي، جيڪو GPL لائسنس جي جديد ورزن ڏانهن اشارو ڪري ٿو ۽ مڪمل طور تي GPLv3 سان مطابقت رکي ٿو. روبي 2.7 ستين وڏي رليز آهي جيڪا رٿيل ترقياتي عمل جي حصي جي طور تي ڪئي ويندي جنهن ۾ خصوصيت جي واڌاري لاءِ هڪ سال مقرر ڪرڻ ۽ 2-3 مهينن جي پيچ رليز شامل آهي.

مکيه سڌارا:

  • تجرباتي حمايت نموني سان ملندڙ (نموني جي مطابقت) ڏنل اعتراض تي ٻيهر ڪرڻ لاء ۽ هڪ قيمت مقرر ڪريو جيڪڏهن ڪو نمونو ميچ آهي.

    ڪيس [0، [1، 2، 3]] ۾ [ا، [ب، *سي]] پا #=> 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) ۾ ھاڻي ملٽي لائين ايڊيٽنگ جو امڪان آھي، جيڪو ريڊ لائن-مطابقت رکندڙ لائبريري استعمال ڪندي لاڳو ڪيو ويو آھي. ريلينروبي ۾ لکيل آهي. rdoc سپورٽ کي ضم ڪيو ويو آهي، توهان کي irb ۾ مخصوص ڪلاس، ماڊل ۽ طريقن تي حوالن جي معلومات ڏسڻ جي اجازت ڏئي ٿي. Binding#irb ذريعي ڏيکاريل ڪوڊ جي لائنن جي رنگن کي نمايان ڪرڻ ۽ بنيادي ڪلاس جي شين جي چڪاس جا نتيجا.

    روبي پروگرامنگ ٻولي جو رليز 2.7.0

  • شامل ڪيو ويو ھڪڙو ڪمپيڪٽ گاربيج ڪليڪٽر (ڪمپيڪشن GC) جيڪو ميموري جي علائقي کي خراب ڪري سگھي ٿو، ڪارڪردگي ۽ ميموري جي استعمال جي مسئلن کي حل ڪري سگھي ٿو ميموري فريگمينٽيشن جي ڪري جيڪو ڪجھ ملٽي ٿريڊ روبي ايپليڪيشنن ۾ ٿئي ٿو. شين کي ڍير تي ڀرڻ لاءِ تجويز ڪيل GC.compact طريقو استعمال ٿيل ميموري صفحن جي تعداد کي گھٽائڻ ۽ عملن لاءِ ھيپ کي بهتر ڪرڻ لاءِ
    CoW (نقل-تي-لکڻ).

  • ڪم پورو ڪيو لسٽ پوزيشن (“def foo(a,b,c)”) ۽ لفظن (“def foo(key: val)”) جي بنياد تي دليلن کي الڳ ڪرڻ جي تياري. لفظن ۽ پوزيشن جي بنياد تي خودڪار دليل جي تبديلي کي ختم ڪيو ويو آهي ۽ روبي 3.0 برانچ ۾ سهڪار نه ڪيو ويندو. خاص طور تي، اهو آخري دليل استعمال ڪندي خارج ڪيو ويو آهي لفظي پيرا ميٽرز جي طور تي، لفظ تي ٻڌل دليلن کي آخري هيش پيراميٽر جي طور تي پاس ڪرڻ، ۽ آخري دليل کي پوزيشن ۽ لفظي پيرا ميٽرز ۾ ورهائڻ.

    def foo (key: 42)؛ آخر؛ foo ({key: 42}) # خبردار ڪيو ويو
    def foo (**kw)؛ آخر؛ foo ({key: 42}) # خبردار ڪيو ويو
    def foo (key: 42)؛ آخر؛ foo (**{key: 42}) # ٺيڪ
    def foo (**kw)؛ آخر؛ foo (**{key: 42}) # ٺيڪ

    def foo (h، ** kw)؛ آخر؛ foo (key: 42) # خبردار ڪيو ويو
    def foo (h، key: 42)؛ آخر؛ foo (key: 42) # خبردار ڪيو ويو
    def foo (h، ** kw)؛ آخر؛ foo ({key: 42}) # ٺيڪ
    def foo (h، key: 42)؛ آخر؛ foo ({key: 42}) # ٺيڪ

    def foo (h = {}، ڪي: 42)؛ آخر؛ foo("key" => 43، ڪي: 42) # خبردار ڪيو ويو
    def foo (h = {}، ڪي: 42)؛ آخر؛ foo({"key" => 43، key: 42}) # خبردار ڪيو ويو
    def foo (h = {}، ڪي: 42)؛ آخر؛ foo({"key" => 43}، ڪي: 42) # ٺيڪ

    def foo (opt={})؛ آخر؛ foo (key: 42) # ٺيڪ

    def foo (h، ** nil)؛ آخر؛ foo (key: 1) # ArgumentError
    def foo (h، ** nil)؛ آخر؛ foo(**{key: 1}) # ArgumentError
    def foo (h، ** nil)؛ آخر؛ foo("str" ​​=> 1) # ArgumentError
    def foo (h، ** nil)؛ آخر؛ foo ({key: 1}) # ٺيڪ
    def foo (h، ** nil)؛ آخر؛ foo({"str" ​​=> 1}) # ٺيڪ

    h = {}؛ def foo (*a) آخر؛ foo(**h) # [] h = {}؛ def foo (a) آخر؛ foo(**h) # {} ۽ ڊيڄاريندڙ
    h = {}؛ def foo (*a) آخر؛ foo(h) # [{}] h = {}؛ def foo (a) آخر؛ foo(h) # {}

  • موقعو ڊفالٽ طور تي بلاڪ پيٽرولر لاء نمبر ٿيل متغير نالا استعمال ڪندي.

    [1, 2, 3].each { puts @1} # like [1, 2, 3].each { |i| رکي ٿو }

  • رينجز لاءِ تجرباتي سپورٽ بغير ابتدائي قيمت سان.

    ary[..3] # ساڳيو جيئن ary[0..3] rel.where(سيلز: ..100)

  • شامل ڪيو ويو ڳڻپيوڪر # ٽيلي طريقو، جيڪو شمار ڪري ٿو تعداد جو تعداد هر عنصر ظاهر ٿئي ٿو.

    [“a”، “b”، “c”، “b”].tally
    #=> {"a" => 1، "b" => 2، "c" => 1}

  • پرائيويٽ طريقو ڪال اجازت ڏني وئي "خود" لفظي سان

    خراب ڪرڻ
    آخر
    نجي: foo
    self.foo

  • شامل ڪيو ويو ڳڻپيوڪر::Lazy#eager طريقو سست (Anumerator::Lazy) ڳڻپ مان عام ڳڻپ پيدا ڪرڻ لاءِ.

    a = %w (foo bar باز)
    e = a.lazy.map {|x| x.upcase }.نقشو {|x| x + "!" } شوقين
    p e.class #=> شمار ڪندڙ
    e.map {|x| x + "؟" } #=> [“FOO!؟”، “بار!؟”، “باز!؟”]

  • هڪ تجرباتي JIT مرتب ڪندڙ جي ترقي جاري آهي، جيڪا روبي ٻولي ۾ ايپليڪيشنن جي ڪارڪردگي کي بهتر بڻائي سگهي ٿي. روبي جو جي آءِ ٽي ڪمپلر پهريون ڀيرو ڊسڪ تي سي ڪوڊ لکي ٿو، ۽ پوءِ مشيني هدايتون تيار ڪرڻ لاءِ ٻاهرين سي ڪمپائلر کي سڏي ٿو (جي سي سي، ڪلانگ، ۽ Microsoft VC++ ڪال ڪرڻ جي سپورٽ ڪندو آهي). نئون ورزن ان لائن ڊيپلائيشن لاءِ هڪ طريقو لاڳو ڪري ٿو جيڪڏهن ضروري هجي ته، ترتيب ڏيڻ دوران اصلاحي طريقن جي چونڊيل ايپليڪيشن کي يقيني بڻايو وڃي، “-jit-min-calls” جي ڊفالٽ ويلو 5 کان 10000 تائين وڌي وڃي ٿي، ۽ “-jit-max- ڪيش" 1000 کان 100 تائين.
  • CGI.escapeHTML، مانيٽر ۽ مانيٽر ميڪسين جي بهتر ڪارڪردگي.
  • Module#name، true.to_s، false.to_s، ۽ nil.to_s يقيني بڻائين ٿا ته هڪ اسٽرنگ موٽائي وئي آهي جيڪا مخصوص اعتراض لاءِ بدليل نه آهي.
  • RubyVM پاران ٺاهيل بائنري فائلن جي سائيز::InstructionSequence#to_binary طريقي کي گھٽايو ويو آھي؛
  • تعمير ٿيل اجزاء جا اپڊيٽ ورجن، بشمول
    بنڊلر 2.1.2، روبي گيمز 3.1.2،
    ريڪ 1.4.15،
    CSV 3.1.2, REXML 3.2.3,
    آر ايس ايس 0.2.8،
    اسٽرنگ اسڪينر 1.0.3؛

  • لائبريريون بنيادي تقسيم کان خارجي گيم پيڪيجز ڏانهن منتقل ڪيون ويون آهن
    CMath (cmath gem)،
    اسڪينف (اسڪينف گيم)،
    شيل (شيل جواهر)،
    هم وقت ساز ( هم وقت ساز )،
    ٿريڊ وائيٽ (ٿائيٽ گيم)،
    E2MM (e2mmap gem).

  • ڊفالٽ stdlib ماڊلز rubygems.org تي شايع ٿيل آهن:
    معيار،
    cgi
    نمائندو،
    حاصل ڪرڻ،
    خالص پاپ،
    net smtp,
    کليل3,
    دڪان
    سنگلٽن. مانيٽر ماڊلز rubygems.org ڏانهن منتقل نه ڪيا ويا آهن
    مبصر،
    وقت ختم ٿي ويو،
    ٽريڪٽر
    uri
    yaml، جيڪي صرف روبي-ڪور سان موڪليا ويا آهن.

  • بلڊنگ روبي هاڻي هڪ سي ڪمپلر جي ضرورت آهي جيڪا سپورٽ ڪري ٿي C99 معيار.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو