রুবি 3.4.0 প্রকাশিত হয়েছে


আমরা রুবি 3.4.0 প্রকাশের ঘোষণা দিয়ে আনন্দিত। রুবি 3.4 যোগ করে it ব্লক প্যারামিটার রেফারেন্স, প্রিজমকে ডিফল্ট পার্সার হিসাবে পরিবর্তন করুন, সকেট লাইব্রেরিতে হ্যাপি আইবলস সংস্করণ 2 সমর্থন যোগ করুন, YJIT উন্নত করুন, মডুলার GC যোগ করুন এবং আরও অনেক কিছু।

it পরিচয় করিয়ে দেওয়া হয়

it কোন পরিবর্তনশীল নাম ছাড়া একটি ব্লক পরামিতি রেফারেন্স যোগ করা হয়. (বৈশিষ্ট্য #18980)

ary = ("foo", "bar", "baz")

p ary.map { it.upcase } #=> ("FOO", "BAR", "BAZ")

it অনেকটা একই রকম আচরণ করে _1. যখন উদ্দেশ্য শুধুমাত্র ব্যবহার করা হয় _1 একটি ব্লকে, অন্যান্য সংখ্যাযুক্ত পরামিতিগুলির জন্য সম্ভাব্য যেমন _2 এছাড়াও প্রদর্শিত পাঠকদের উপর একটি অতিরিক্ত জ্ঞানীয় বোঝা চাপিয়ে দেয়। তাই it একটি সহজ উপনাম হিসাবে পরিচিত ছিল. ব্যবহার করুন it সহজ ক্ষেত্রে যেখানে it নিজের জন্য কথা বলে, যেমন এক-লাইন ব্লকে।

প্রিজম এখন ডিফল্ট পার্সার

ডিফল্ট পার্সার parse.y থেকে প্রিজমে স্যুইচ করুন। (ফিচার #20564)

এটি একটি অভ্যন্তরীণ উন্নতি এবং ব্যবহারকারীর কাছে দৃশ্যমান সামান্য পরিবর্তন হওয়া উচিত। আপনি যদি কোনো সামঞ্জস্যের সমস্যা লক্ষ্য করেন, তাহলে অনুগ্রহ করে আমাদের কাছে রিপোর্ট করুন।

প্রচলিত পার্সার ব্যবহার করতে, কমান্ড-লাইন আর্গুমেন্ট ব্যবহার করুন --parser=parse.y.

সকেট লাইব্রেরিতে এখন হ্যাপি আইবলস সংস্করণ 2 (RFC 8305) বৈশিষ্ট্যযুক্ত

সকেট লাইব্রেরি এখন বৈশিষ্ট্য হ্যাপি আইবলস সংস্করণ 2 (RFC 8305)অনেক প্রোগ্রামিং ভাষায় আরও ভাল সংযোগের জন্য ব্যাপকভাবে গৃহীত পদ্ধতির সর্বশেষ প্রমিত সংস্করণ TCPSocket.new (TCPSocket.open) এবং Socket.tcp. এই উন্নতি রুবিকে দক্ষ এবং নির্ভরযোগ্য নেটওয়ার্ক সংযোগ প্রদান করতে সক্ষম করে, আধুনিক ইন্টারনেট পরিবেশে অভিযোজিত।

রুবি 3.3 পর্যন্ত, এই পদ্ধতিগুলি ধারাবাহিকভাবে নামের রেজোলিউশন এবং সংযোগের প্রচেষ্টা সম্পাদন করে। এই অ্যালগরিদম দিয়ে, তারা এখন নিম্নরূপ কাজ করে:

  1. IPv6 এবং IPv4 নামের রেজোলিউশন একযোগে সম্পাদন করে
  2. 250ms বিরতিতে সমান্তরাল প্রচেষ্টার সাথে IPv6 কে অগ্রাধিকার দিয়ে সমাধান করা IP ঠিকানাগুলির সাথে সংযোগের চেষ্টা করুন
  3. অন্য কোনো বাতিল করার সময় প্রথম সফল সংযোগ ফেরত দিন

এটি ন্যূনতম সংযোগ বিলম্ব নিশ্চিত করে, এমনকি যদি একটি নির্দিষ্ট প্রোটোকল বা IP ঠিকানা বিলম্বিত হয় বা অনুপলব্ধ হয়। এই বৈশিষ্ট্যটি ডিফল্টরূপে সক্রিয় থাকে, তাই এটি ব্যবহার করার জন্য অতিরিক্ত কনফিগারেশনের প্রয়োজন হয় না। বিশ্বব্যাপী এটি নিষ্ক্রিয় করতে, পরিবেশ পরিবর্তনশীল সেট করুন RUBY_TCP_NO_FAST_FALLBACK=1 অথবা কল করুন Socket.tcp_fast_fallback=false. অথবা প্রতি-পদ্ধতির ভিত্তিতে এটি নিষ্ক্রিয় করতে, কীওয়ার্ড আর্গুমেন্ট ব্যবহার করুন fast_fallback: false.

YJIT

টিএল; ডিআর

  • x86-64 এবং arm64 উভয় প্ল্যাটফর্মে বেশিরভাগ বেঞ্চমার্ক জুড়ে আরও ভাল পারফরম্যান্স।
  • সংকুচিত মেটাডেটা এবং একটি ইউনিফাইড মেমরি সীমা মাধ্যমে মেমরি ব্যবহার হ্রাস.
  • বিভিন্ন বাগ ফিক্স: YJIT এখন আরও শক্তিশালী এবং পুঙ্খানুপুঙ্খভাবে পরীক্ষিত।

নতুন বৈশিষ্ট্য

  • কমান্ড লাইন বিকল্প
    • --yjit-mem-size মোট YJIT মেমরি ব্যবহার ট্র্যাক করার জন্য একটি ইউনিফাইড মেমরি লিমিট (ডিফল্ট 128MiB) প্রবর্তন করে, যা পুরানোটির আরও স্বজ্ঞাত বিকল্প প্রদান করে --yjit-exec-mem-size বিকল্প
    • --yjit-log যা সংকলিত হয় তা ট্র্যাক করতে একটি সংকলন লগ সক্ষম করে।
  • রুবি API
    • RubyVM::YJIT.log রান-টাইমে কম্পাইলেশন লগের লেজে অ্যাক্সেস প্রদান করে।
  • YJIT পরিসংখ্যান
    • RubyVM::YJIT.runtime_stats এখন সর্বদা অবৈধকরণ, ইনলাইনিং, এবং মেটাডেটা এনকোডিংয়ের অতিরিক্ত পরিসংখ্যান প্রদান করে।

নতুন অপ্টিমাইজেশান

  • সংকুচিত প্রসঙ্গ YJIT মেটাডেটা সঞ্চয় করার জন্য প্রয়োজনীয় মেমরি হ্রাস করে
  • স্থানীয় ভেরিয়েবল এবং রুবি পদ্ধতি আর্গুমেন্টের জন্য রেজিস্টার বরাদ্দ করুন
  • যখন YJIT সক্ষম করা হয়, তখন রুবিতে লেখা আরও মূল আদিম ব্যবহার করুন:
    • Array#each, Array#select, Array#map ভাল পারফরম্যান্সের জন্য রুবিতে পুনরায় লেখা (ফিচার #20182)
  • ছোট/তুচ্ছ পদ্ধতিতে ইনলাইন করার ক্ষমতা যেমন:
    • খালি পদ্ধতি
    • একটি ধ্রুবক ফেরত পদ্ধতি
    • প্রত্যাবর্তন পদ্ধতি self
    • পদ্ধতি সরাসরি একটি যুক্তি ফেরত
  • আরও অনেক রানটাইম পদ্ধতির জন্য বিশেষায়িত কোডজেন
  • অপ্টিমাইজ করুন String#getbyte, String#setbyte এবং অন্যান্য স্ট্রিং পদ্ধতি
  • নিম্ন-স্তরের বিট/বাইট ম্যানিপুলেশন গতি বাড়াতে বিটওয়াইজ অপারেশন অপ্টিমাইজ করুন
  • মাল্টি-র্যাক্টর মোডে শেয়ারযোগ্য ধ্রুবক সমর্থন করুন
  • বিভিন্ন অন্যান্য ক্রমবর্ধমান অপ্টিমাইজেশান

মডুলার জিসি

  • মডুলার আবর্জনা সংগ্রহকারী বৈশিষ্ট্যের মাধ্যমে বিকল্প গারবেজ কালেক্টর (GC) বাস্তবায়নগুলি গতিশীলভাবে লোড করা যেতে পারে। এই বৈশিষ্ট্যটি সক্ষম করতে, এর সাথে রুবি কনফিগার করুন --with-modular-gc নির্মাণের সময়। এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে GC লাইব্রেরি রানটাইমে লোড করা যেতে পারে RUBY_GC_LIBRARY. (ফিচার #20351)

  • রুবির অন্তর্নির্মিত আবর্জনা সংগ্রহকারীকে একটি পৃথক ফাইলে বিভক্ত করা হয়েছে
    gc/default/default.c এবং সংজ্ঞায়িত একটি API ব্যবহার করে রুবির সাথে ইন্টারঅ্যাক্ট করে
    gc/gc_impl.h. অন্তর্নির্মিত আবর্জনা সংগ্রহকারী এখন ব্যবহার করে একটি লাইব্রেরি হিসাবেও তৈরি করা যেতে পারে make modular-gc MODULAR_GC=default এবং পরিবেশ পরিবর্তনশীল ব্যবহার করে সক্রিয় করা হয়েছে RUBY_GC_LIBRARY=default. (ফিচার #20470)

  • একটি পরীক্ষামূলক GC লাইব্রেরি উপর ভিত্তি করে প্রদান করা হয় MMTk. এই জিসি লাইব্রেরি ব্যবহার করে তৈরি করা যেতে পারে make modular-gc MODULAR_GC=mmtk এবং পরিবেশ পরিবর্তনশীল ব্যবহার করে সক্রিয় করা হয়েছে RUBY_GC_LIBRARY=mmtk. এর জন্য বিল্ড মেশিনে মরিচা টুলচেন প্রয়োজন। (ফিচার #20860)

ভাষা পরিবর্তন

  • একটি ছাড়া ফাইলে স্ট্রিং লিটারেল frozen_string_literal মন্তব্য এখন একটি অবচয় সতর্কতা নির্গত যখন তারা পরিবর্তন করা হয়. এই সতর্কতাগুলি দিয়ে সক্রিয় করা যেতে পারে -W:deprecated অথবা সেট করে Warning(:deprecated) = true. এই পরিবর্তন অক্ষম করতে, আপনি রুবি চালাতে পারেন --disable-frozen-string-literal
    কমান্ড লাইন আর্গুমেন্ট। (ফিচার #20205)

  • কীওয়ার্ড স্প্ল্যাটিং nil যখন কলিং পদ্ধতি এখন সমর্থিত।
    **nil অনুরূপভাবে চিকিত্সা করা হয় **{}কোন কীওয়ার্ড পাস করা, এবং কোন রূপান্তর পদ্ধতি কল না. (বাগ #20064)

  • সূচীতে ব্লক পাসিং আর অনুমোদিত নয়। (বাগ #19918)

  • কীওয়ার্ড আর্গুমেন্ট আর সূচকে অনুমোদিত নয়। (বাগ #20218)

  • শীর্ষ স্তরের নাম ::Ruby এখন সংরক্ষিত, এবং সংজ্ঞা যখন সতর্ক করা হবে Warning(:deprecated). (ফিচার #20884)

মূল ক্লাস আপডেট

দ্রষ্টব্য: আমরা শুধুমাত্র কোর ক্লাসের উল্লেখযোগ্য আপডেটগুলি তালিকাভুক্ত করছি।

  • ব্যতিক্রম

    • Exception#set_backtrace এখন একটি অ্যারে গ্রহণ করে Thread::Backtrace::Location.
      Kernel#raise, Thread#raise এবং Fiber#raise এছাড়াও এই নতুন বিন্যাস গ্রহণ করুন. (বৈশিষ্ট্য #13557)
  • জিসি

    • GC.config গারবেজ কালেক্টরে কনফিগারেশন ভেরিয়েবল সেট করার অনুমতি দিতে যোগ করা হয়েছে। (বৈশিষ্ট্য #20443)

    • GC কনফিগারেশন প্যারামিটার rgengc_allow_full_mark প্রবর্তিত কখন false
      GC শুধুমাত্র তরুণ বস্তু চিহ্নিত করবে। ডিফল্ট হয় true. (বৈশিষ্ট্য #20443)

  • র্যাক্টর

    • require র্যাক্টরে অনুমতি দেওয়া হয়। প্রয়োজনীয় প্রক্রিয়াটি প্রধান র্যাক্টরে চালিত হবে।
      Ractor._require(feature) প্রধান র্যাক্টরের প্রয়োজনীয় প্রক্রিয়া চালানোর জন্য যোগ করা হয়। (বৈশিষ্ট্য #20627)

    • Ractor.main? যোগ করা হয় (বৈশিষ্ট্য #20627)

    • Ractor.() এবং Ractor.()= বর্তমান র্যাক্টরের স্থানীয় স্টোরেজ অ্যাক্সেস করতে যোগ করা হয়। (বৈশিষ্ট্য #20715)

    • Ractor.store_if_absent(key){ init } থ্রেড-সেফটিতে র্যাক্টর স্থানীয় ভেরিয়েবল শুরু করতে যোগ করা হয়। (ফিচার #20875)

  • পরিসর

    • Range#size এখন উত্থাপন TypeError যদি পরিসীমা পুনরাবৃত্তিযোগ্য না হয়। (বিবিধ #18984)

স্ট্যান্ডার্ড লাইব্রেরি আপডেট

দ্রষ্টব্য: আমরা শুধুমাত্র স্ট্যান্ডার্ড লাইব্রেরির উল্লেখযোগ্য আপডেট তালিকাভুক্ত করছি।

  • রুবি জেমস
    • যোগ করুন --attestation মণি ধাক্কা বিকল্প. এটি স্বাক্ষর সংরক্ষণ করতে সক্ষম sigstore.dev
  • বান্ডলার
    • একটি যোগ করুন lockfile_checksums তাজা লক ফাইলে চেকসাম অন্তর্ভুক্ত করার কনফিগারেশন
    • বান্ডিল লক যোগ করুন --add-checksums একটি বিদ্যমান লক ফাইলে চেকসাম যোগ করতে
  • JSON

    • কর্মক্ষমতা উন্নতি JSON.parse json-2.7.x এর চেয়ে প্রায় 1.5 গুণ দ্রুত।
  • টেম্পফাইল

    • মূলশব্দ যুক্তি anonymous: true Tempfile.create এর জন্য প্রয়োগ করা হয়।
      Tempfile.create(anonymous: true) অবিলম্বে তৈরি অস্থায়ী ফাইল মুছে ফেলে। তাই অ্যাপ্লিকেশনগুলিকে ফাইলটি সরানোর দরকার নেই। (বৈশিষ্ট্য #20497)
  • win32/sspi.rb

সামঞ্জস্যের সমস্যা

দ্রষ্টব্য: বৈশিষ্ট্য বাগ সংশোধন বাদ।

  • ত্রুটি বার্তা এবং ব্যাকট্রেস প্রদর্শন পরিবর্তন করা হয়েছে.
    • একটি খোলার উদ্ধৃতি হিসাবে ব্যাকটিকের পরিবর্তে একটি একক উদ্ধৃতি ব্যবহার করুন। (বৈশিষ্ট্য #16495)
    • একটি পদ্ধতির নামের আগে একটি শ্রেণীর নাম প্রদর্শন করুন (শুধুমাত্র যখন ক্লাসের একটি স্থায়ী নাম থাকে)। (বৈশিষ্ট্য #19117)
    • Kernel#caller, Thread::Backtrace::Locationএর পদ্ধতি ইত্যাদিও সেই অনুযায়ী পরিবর্তিত হয়।
    Old:
    test.rb:1:in `foo': undefined method `time' for an instance of Integer
            from test.rb:2:in `<main>'
    
    New:
    test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer
            from test.rb:2:in '<main>'
    
  • হ্যাশ#ইনস্পেক্ট রেন্ডারিং পরিবর্তন করা হয়েছে। ((বাগ #20433))

    • আধুনিক প্রতীক কী সিনট্যাক্স ব্যবহার করে প্রতীক কীগুলি প্রদর্শিত হয়: "{user: 1}"
    • অন্যান্য কীগুলির চারপাশে এখন ফাঁকা জায়গা রয়েছে =>: '{"user" => 1}'যদিও আগে তারা করেনি: '{"user"=>1}'
  • Kernel#Float() এখন দশমিক অংশ বাদ দিয়ে একটি দশমিক স্ট্রিং গ্রহণ করে। (বৈশিষ্ট্য #20705)

    Float("1.")    #=> 1.0 (previously, an ArgumentError was raised)
    Float("1.E-1") #=> 0.1 (previously, an ArgumentError was raised)
    
  • স্ট্রিং#to_f এখন দশমিক অংশ বাদ দিয়ে একটি দশমিক স্ট্রিং গ্রহণ করে। লক্ষ্য করুন যে যখন একটি সূচক নির্দিষ্ট করা হয় তখন ফলাফল পরিবর্তিত হয়। (বৈশিষ্ট্য #20705)

    "1.".to_f    #=> 1.0
    "1.E-1".to_f #=> 0.1 (previously, 1.0 was returned)
    
  • পরিমার্জন#রিফাইন্ড_ক্লাস সরানো হয়েছে। (বৈশিষ্ট্য #19714)

স্ট্যান্ডার্ড লাইব্রেরি সামঞ্জস্য সমস্যা

  • কি তুমি মানে

    • DidYouMean::SPELL_CHECKERS()= এবং DidYouMean::SPELL_CHECKERS.merge! অপসারণ করা হয়
  • নেট::HTTP

  • টাইমআউট

    • Timeout.timeout এর জন্য নেতিবাচক মান প্রত্যাখ্যান করুন। (বাগ #20795)
  • ইউআরআই

    • RFC 2396 কমপ্লায়েন্ট থেকে RFC 3986 কমপ্লায়েন্টে ডিফল্ট পার্সার সুইচ করা হয়েছে। (বাগ #19266)

C API আপডেট

  • rb_newobj এবং rb_newobj_of (এবং সংশ্লিষ্ট ম্যাক্রো RB_NEWOBJ, RB_NEWOBJ_OF, NEWOBJ, NEWOBJ_OF) সরানো হয়েছে। (বৈশিষ্ট্য #20265)
  • অপসারিত ফাংশন সরানো হয়েছে rb_gc_force_recycle. (বৈশিষ্ট্য #18290)

বিবিধ পরিবর্তন

  • পাস করা ব্লক ব্যবহার করে না এমন একটি পদ্ধতিতে একটি ব্লক পাস করা ভার্বোজ মোডে একটি সতর্কতা দেখাবে (-w) (বৈশিষ্ট্য #15554)

  • কিছু মূল পদ্ধতি পুনঃসংজ্ঞায়িত করা যা বিশেষভাবে ইন্টারপিটার এবং JIT দ্বারা অপ্টিমাইজ করা হয়েছে String.freeze বা Integer#+ এখন একটি কর্মক্ষমতা ক্লাস সতর্কতা নির্গত করে (-W:performance বা Warning(:performance) = true) (বৈশিষ্ট্য #20429)

দেখুন সংবাদ
বা লগ কমিট
আরো বিস্তারিত জানার জন্য

এই পরিবর্তনের সাথে, 4942 ফাইল পরিবর্তিত হয়েছে, 202244 সন্নিবেশ (+), 255528 মুছে ফেলা হয়েছে(-)
রুবি 3.3.0 থেকে!

শুভ বড়দিন, শুভ ছুটি, এবং রুবি 3.4 এর সাথে প্রোগ্রামিং উপভোগ করুন!

ডাউনলোড করুন

  • https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0.tar.gz

    SIZE: 23153022
    SHA1: 8ccb561848a7c460ae08e1a120a47c4a88a79335
    SHA256: 068c8523442174bd3400e786f4a6952352c82b1b9f6210fd17fb4823086d3379
    SHA512: bc70ecba27d1cdea00879f03487cad137a7d9ab2ad376cfb7a65780ad14da637fa3944eeeede2c04ab31eeafb970c64ccfeeb854c99c1093937ecc1165731562
    
  • https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0.tar.xz

    SIZE: 17215572
    SHA1: eb25447cc404e8d2e177c62550d0224ebd410e68
    SHA256: 0081930db22121eb997207f56c0e22720d4f5d21264b5907693f516c32f233ca
    SHA512: 776a2cf3e9ccc77c27500240f168aa3e996b0c7c1ee1ef5a7afc291a06c118444016fde38b5b139c0b800496b8eb1b5456562d833f0edc0658917164763b1af7
    
  • https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0.zip

    SIZE: 28310193
    SHA1: 26254ca5d3decc28a4e5faec255995265e5270b5
    SHA256: c120228038af04554f6363e716b0a32cbf53cf63c6adf9f2c22a24f43dc8b555
    SHA512: 4d535ed10db76a6aa74f8a025df319deb28483a7a781c24045906ee7663f1cff9d9f9e71dbc993c9e050113a34b37c7fa2143c355a0a6e1e1029bf2c92213ecc
    

রুবি কি

রুবি প্রথম 1993 সালে Matz (Yukihiro Matsumoto) দ্বারা বিকশিত হয়েছিল, এবং এখন ওপেন সোর্স হিসাবে বিকশিত হয়েছে। এটি একাধিক প্ল্যাটফর্মে চলে এবং সারা বিশ্বে বিশেষ করে ওয়েব ডেভেলপমেন্টের জন্য ব্যবহৃত হয়।



Source link