রুবি পারম্পরা অনুযায়ী, কোর টিম Ruby 3.4 ডিসেম্বর ২৫, ২০২৪-এ রিলিজ করেছে! আপনি যদি আমাদের মত রুবি পছন্দ করেন, তবে আপনার মনে হতে পারে Ruby 3.4-এ কী নতুন। এই রিলিজে কোনো বড় পরিবর্তন নেই, কিন্তু কয়েকটি খুব কুল জিনিস আছে जिनके সম্পর্কে জানা উচিত।

চলে ভাষার পরিবর্তনগুলোতে খননা করি।
ভাষার পরিবর্তন
ভাষার পরিবর্তনগুলো অধিকাংশ রুবি ডেভেলপারের জন্য সবচেয়ে সরাসরি প্রাসঙ্গিক। দ্রুত প্রতিটি দেখে নিই!
ফ্রোজেন স্ট্রিং লিটারলস
আপনি যদি রুবি একটু লিখেছেন, তবে আপনি এমন ফাইল দেখেছেন होंगे যা এতে শুরু হয়:
# frozen_string_literal: true
উপরের উদাহরণটি একটি ম্যাজিক কমেন্ট, এবং এর আসল অর্থ রুবি ইন্টারপ্রেটারের কাছে আছে! এই কমেন্টটি ইন্টারপ্রেটারকে বলে এই ফাইলের প্রতিটি স্ট্রিংকে যেন freeze কল করা হয়েছে সেরকম চ[int]। আপনি যদি এই ম্যাজিক কমেন্টসহ ফাইলে একটি স্ট্রিং মডিফাই করার চেষ্টা করেন, তবে আপনাকে রানটাইম এরর मिलবে।
Ruby 3.4-এ, স্ট্রিংগুলো যেন ফ্রোজেন সেরকম আচরণ করবে ডিফল্টরূপে। সেগুলো মিউটেট করার চেষ্টা করলে এরর বদলে ডিপ্রিকেশন ওয়ার্নিং দেখাবে। ভবিষ্যতে রুবির কোনো ভার্সন ডিফল্ট ফ্রোজেন স্ট্রিং লিটারলস এনফোর্স করবে এক্সেপশন রেইজ করে আপনি যদি সেগুলো মিউটেট করার চেষ্টা করেন। এই ট্রানজিশনারি পিরিয়ড রুবি ডেভেলপারদের তাদের অ্যাপ মাইগ্রেট করার সময় দেবে।
ডিফল্ট ব্লক প্যারামিটার
Ruby 3.4 একটি ডিফল্ট ব্লক প্যারামিটার পরিচয় করাচ্ছে ছোট কোড ব্লক ক্লিনার করার জন্য।
Ruby 2.7-এর আগে, each মেথড দিয়ে একটি অ্যারের প্রতিটি এলিমেন্ট প্রিন্ট করা এরকম দেখতো:
[1, 2, 3].each { |item| puts item }
Ruby 2.7 নাম্বারড প্যারামিটার পরিচয় করিয়েছে সেগুলো নাম দিতে হবে না। Ruby 2.7-এর পর, আপনি একই কোডটি এভাবে লিখতে পারতেন:
[1, 2, 3].each { puts _1 }
Ruby 2.7-এর উন্নতিটি সহজ হলেও একদম স্পষ্ট নয়। আপনি যদি এই রুবি সিনট্যাক্স থেকে অনভিজ্ঞ হন, তবে এখানে কী হচ্ছে সেটা বুঝতে পারেন না। Ruby 3.4 একে আরও ভালোভাবে করার একটি পদ্ধতি পরিচয় করাচ্ছে:
[1, 2, 3].each { puts it }
কিয়ওয়ার্ড স্প্ল্যাটিং nil
Ruby 3.4-এর আগের ভার্সনগুলোতে, ডাবল স্প্ল্যাট অপারেটর (**) nil-এর সাথে ব্যবহার করলে TypeError রেইজ হতো। এটা একটু সেন্স মেক করতো কারণ nil ইমপ্লিসিটলি হ্যাশে কনভার্ট করা যায় না।
Ruby 3.4 এটাকে একটি সহজ পরিবর্তন দিয়েছে - এটি nil-কে ইমপ্লিসিটলি একটি হ্যাশে কনভার্ট করে। nil-এ ** কল করা হবে একটি খালি হ্যাশে ** কল করার মত।
কোর ক্লাস আপডেটস
কোর ক্লাস আপডেটস ভাষার পরিবর্তনগুলোর মত রুবি ডেভেলপারদের জন্য তত সরাসরি প্রাসঙ্গিক নয়, তবে সেগুলো বোঝা определ ভালো!
Exception#set_backtrace
Ruby ইস্যু ট্র্যাকারে একটি ফিচার রিকোয়েস্টে Ruby 3.4-এ এই পরিবর্তনের আগে স্ট্রিংৰ অ্যারে দিয়ে ব্যাকট্রেস সেট করাকে "লসি" বলে বর্ণনা করা হয়েছিল। এক্সেপশনটি পূর্বে #backtrace_locations-এ nil রিটার্ন করত।
Ruby 3.4-এ, Exception#set_backtrace একটি Thread::Backtrace::Location অ্যারে এক্সেপ্ট করবে যাতে আপনি একটি Backtrace ইনস্ট্যান্স রিবিল্ড করতে পারেন এবং একটি ফুলি ফাংশনিং এক্সেপশন পান।
Range#size
Range#size-এর আচরণও Ruby 3.4-এ নতুন। যদি যে রেঞ্জে size কল করা হচ্ছে সেটি ইটারেবল না হয়, তবে Ruby এখন TypeError থ্রো করবে। এটি আচরণে একটি ছোট পরিবর্তন যা আপনি শুধু তখন লক্ষ্য করবেন যখন আপনি রেঞ্জের একটি ছোট সাবসেটে size কল করছেন।
Ruby 3.4-এ অন্যান্য নতুন পরিবর্তন
Ruby 3.4-এ আরেকটি ছোট পরিবর্তন হলো সেই মেথডগুলো যেগুলো একটি ব্লকে পাস করা হয়েছে কিন্তু সেটা সেটা ব্যবহার করে না। ভার্বোজ মোডে রান করলে, Ruby এখন ওয়ার্নিং থ্রো করবে আপনি যদি একটি ব্লক পাস করেন এমন একটি মেথডে যা ব্লকটি ব্যবহার করে না।
আপনি খুশি হবেন শুনতে Ruby 3.4 Array.each-এর পারফরম্যান্স উন্নত করেছে একটি ইমপ্লিমেন্টেশন রিরাইটের মাধ্যমে!
শেষে, আরেকটি আপডেট হলো এরর মেসেজ এবং ব্যাকট্রেস কীভাবে ডিসপ্লে হয় সেটা নিয়ে। Ruby এখন সিঙ্গেল কোট ব্যবহার করবে ব্যাকটিকের বদলে যতক্ষণ প্রাসঙ্গিক এবং মেথডের নামের আগে ক্লাস নাম দেখাবে।
Ruby 3.4-এ আপগ্রেড করা
Ruby 3.4-এ আপগ্রেড করা অধিকাংশ মানুষের জন্য বড় লিফট হওয়া উচিত নয়। সবচেয়ে শ্রমসাধ্য অংশ হবে সেই অপ্রয়োজনীয় ফ্রোজেন স্ট্রিং ম্যাজিক কমেন্টগুলো সরানো! Ruby 3.4-এ আপগ্রেড করার সময় নিতে সকল নতুন ফিচারের সুবিধা নেওয়া লाभদায়ক হবে, তাই দেরি করবেন না!
এবং ভুলবেন না — আরও রুবি নিউজ এবং এই মত টিউটোরিয়াল আপনার ইনবক্সে পেতে, Honeybadger নিউজলেটার সাবস্ক্রাইব করুন!