روبی پروگرامنگ لینگویج کی ریلیز 2.7.0

ترقی کے ایک سال بعد شائع رہائی روبی 2.7.0، ایک متحرک آبجیکٹ پر مبنی پروگرامنگ زبان جو پروگرام کی ترقی میں انتہائی موثر ہے اور اس میں پرل، جاوا، ازگر، سمال ٹاک، ایفل، اڈا اور لِسپ کی بہترین خصوصیات شامل ہیں۔ پروجیکٹ کوڈ BSD ("2-شق BSDL") اور "روبی" لائسنس کے تحت تقسیم کیا گیا ہے، جو GPL لائسنس کے تازہ ترین ورژن کا حوالہ دیتا ہے اور GPLv3 کے ساتھ مکمل طور پر مطابقت رکھتا ہے۔ روبی 2.7 ساتویں بڑی ریلیز ہے جو ایک منصوبہ بند ترقیاتی عمل کے حصے کے طور پر تیار کی گئی ہے جس میں فیچر میں اضافہ اور 2-3 ماہ کے پیچ کی ریلیز کے لیے ایک سال کا وقفہ شامل ہے۔

اہم بہتری:

  • تجرباتی کی حمایت پیٹرن ملاپ (پیٹرن ملاپ) دی گئی آبجیکٹ پر اعادہ کرنے کے لیے اور اگر کوئی پیٹرن میچ ہو تو ایک قدر تفویض کریں۔

    کیس [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) کے شیل میں اب ملٹی لائن ایڈیٹنگ کا امکان ہے، جسے ریڈ لائن سے مطابقت رکھنے والی لائبریری کا استعمال کرتے ہوئے لاگو کیا گیا ہے۔ لائن لگائیںروبی میں لکھا ہے۔ rdoc کے لیے سپورٹ کو مربوط کر دیا گیا ہے، جو irb میں مخصوص کلاسز، ماڈیولز اور طریقوں کے حوالے سے معلومات کو دیکھنے کی اجازت دیتا ہے۔ Binding#irb کے ذریعے دکھائے گئے کوڈ کے ساتھ لائنوں کی رنگین ہائی لائٹنگ اور بیس کلاس اشیاء کے معائنہ کے نتائج فراہم کیے گئے ہیں۔

    روبی پروگرامنگ لینگویج کی ریلیز 2.7.0

  • ایک کمپیکٹ کوڑا کرکٹ جمع کرنے والا (کمپیکشن جی سی) شامل کیا گیا جو میموری کے کسی علاقے کو ڈیفراگمنٹ کر سکتا ہے، سست کارکردگی کے مسائل کو حل کر سکتا ہے اور میموری کے ٹکڑے ہونے کی وجہ سے میموری کی کھپت میں اضافہ ہوتا ہے جو کچھ ملٹی تھریڈڈ روبی ایپلی کیشنز کے آپریشن کے دوران ہوتا ہے۔ ڈھیر پر اشیاء پیک کرنے کے لئے مجوزہ GC.compact طریقہ استعمال شدہ میموری کے صفحات کی تعداد کو کم کرنے اور آپریشن کے لیے ہیپ کو بہتر بنانے کے لیے
    CoW (کاپی آن رائٹ)۔

  • انجام دیا فہرست ("def foo(a,b,c)") اور مطلوبہ الفاظ ("def foo(key: val)") میں پوزیشن کی بنیاد پر الگ الگ دلائل کی تیاری۔ کلیدی الفاظ اور پوزیشن پر مبنی خودکار دلیل کی تبدیلی کو فرسودہ کر دیا گیا ہے اور روبی 3.0 برانچ میں اس کی حمایت نہیں کی جائے گی۔ خاص طور پر، آخری دلیل کو مطلوبہ الفاظ کے پیرامیٹرز کے طور پر استعمال کرنے، مطلوبہ الفاظ پر مبنی دلائل کو آخری ہیش پیرامیٹر کے طور پر پاس کرنے، اور آخری دلیل کو پوزیشنی اور کلیدی الفاظ کے پیرامیٹرز میں تقسیم کرنے کے لیے اسے فرسودہ کر دیا گیا ہے۔

    def foo (کی: 42)؛ اختتام foo({key: 42}) #خبردار
    def foo (**kw)؛ اختتام foo({key: 42}) #خبردار
    def foo (کی: 42)؛ اختتام foo(**{key: 42}) # ٹھیک ہے۔
    def foo (**kw)؛ اختتام foo(**{key: 42}) # ٹھیک ہے۔

    def foo(h، **kw)؛ اختتام foo(key: 42) #خبردار
    def foo (h، کلید: 42)؛ اختتام foo (key: 42) # خبردار کیا گیا۔
    def foo(h، **kw)؛ اختتام foo({key: 42}) # ٹھیک ہے۔
    def foo (h، کلید: 42)؛ اختتام foo({key: 42}) # ٹھیک ہے۔

    def foo(h={}، کلید: 42)؛ اختتام foo("key" => 43، کلید: 42) # خبردار کیا گیا۔
    def foo(h={}، کلید: 42)؛ اختتام foo({"key" => 43، کلید: 42}) # خبردار کیا گیا۔
    def foo(h={}، کلید: 42)؛ اختتام foo({"key" => 43}، کلید: 42) # ٹھیک ہے۔

    def foo(opt={}); اختتام foo (کی: 42) # ٹھیک ہے۔

    def foo(h، **nil)؛ اختتام foo(key: 1) # Argument Error
    def foo(h، **nil)؛ اختتام foo(**{key: 1}) # دلیل کی خرابی۔
    def foo(h، **nil)؛ اختتام foo("str" ​​=> 1) # دلیل کی خرابی۔
    def foo(h، **nil)؛ اختتام foo({key: 1}) # ٹھیک ہے۔
    def foo(h، **nil)؛ اختتام foo({"str" ​​=> 1}) # ٹھیک ہے۔

    h = {}; def foo(*a) end؛ foo(**h) # [] h = {}; def foo(a) end؛ foo(**h) # {} اور وارننگ
    h = {}; def foo(*a) end؛ foo(h) # [{}] h = {}; def foo(a) end؛ foo(h) # {}

  • موقع بلاک پیرامیٹرز کے لیے نمبر والے ڈیفالٹ متغیر ناموں کا استعمال۔

    [1, 2, 3]۔ہر ایک { @1 ڈالتا ہے } # جیسے [1, 2, 3]۔ہر { |i| رکھتا ہے }

  • ابتدائی قدر کے بغیر رینجز کے لیے تجرباتی تعاون۔

    ary[..3] # ary[0..3] سے ملتا جلتا ہے rel.where(sales: ..100)

  • قابل شمار #tally طریقہ شامل کیا گیا، جو شمار کرتا ہے کہ ہر عنصر کتنی بار ہوتا ہے۔

    ٹیلی
    #=> {"a"=>1, "b"=>2, "c"=>1}

  • "خود" لفظی کے ساتھ نجی طریقہ کال کی اجازت ہے۔

    ڈیفو
    آخر
    نجی:foo
    self.foo

  • شمار کنندہ::Lazy#eager طریقہ کو سست (Anumerator::Lazy) سے باقاعدہ گنتی تیار کرنے کا طریقہ شامل کیا گیا۔

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

  • تجرباتی جے آئی ٹی کمپائلر کی ترقی جاری ہے، جو روبی زبان میں ایپلی کیشنز کی کارکردگی کو نمایاں طور پر بہتر بنا سکتی ہے۔ روبی میں تجویز کردہ جے آئی ٹی کمپائلر پہلے سی کوڈ کو ڈسک پر لکھتا ہے، جس کے بعد یہ مشین کی ہدایات (GCC، Clang اور Microsoft VC ++ کو سپورٹ کرنے کے لیے ایکسٹرنل C کمپائلر کو کال کرتا ہے)۔ نیا ورژن اگر ضروری ہو تو ان لائن تعیناتی کے لیے ایک طریقہ نافذ کرتا ہے، تالیف کے دوران اصلاحی طریقوں کا انتخابی اطلاق، "-jit-min-calls" کی ڈیفالٹ ویلیو 5 سے بڑھا کر 10000، اور "-jit-max-cache" 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،
    Racc 1.4.15،
    CSV 3.1.2، REXML 3.2.3،
    RSS 0.2.8،
    سٹرنگ سکینر 1.0.3؛

  • لائبریریاں بنیادی تقسیم سے بیرونی منی پیکجوں میں منتقل ہوگئیں۔
    CMath (cmath منی)،
    Scanf (scanf منی)،
    شیل (شیل منی)،
    سنکرونائزر (مطابقت پذیر منی)،
    تھریڈز ویٹ (تھویٹ منی)،
    E2MM (e2mmap منی)۔

  • پہلے سے طے شدہ stdlib ماڈیول rubygems.org پر شائع ہوتے ہیں:
    بینچ مارک
    cgi
    مندوب
    حاصل کرنا،
    نیٹ پاپ،
    نیٹ ایس ایم ٹی پی،
    اوپن3،
    pstore
    سنگلٹن مانیٹر ماڈیولز کو rubygems.org پر منتقل نہیں کیا گیا ہے۔
    مبصر،
    وقت ختم،
    ٹریسر
    یوری
    یامل، جو صرف روبی کور کے ساتھ بھیجے جاتے ہیں۔

  • روبی کی تعمیر کے لیے اب ایک C کمپائلر کی ضرورت ہے جو C99 معیار کو سپورٹ کرتا ہو۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں