কম্পিউটার টিউটোরিয়াল

রুবি 4.0:মূল বৈশিষ্ট্য, রিলিজ হাইলাইট এবং আপগ্রেড গাইড

Ruby 4.0 হল একটি বড় রিলিজ, যা রুবির 30 তম বার্ষিকীতে (25 ডিসেম্বর, 2025) লঞ্চ করা হয়েছে, বড় ধরনের পরিবর্তনের কারণে নয়, সম্প্রদায়ের তিন দশক উদযাপন করতে।

আমি জেনে অবাক হয়েছিলাম যে রুবি আসলে শব্দার্থিক সংস্করণ অনুসরণ করে না!

পরিবর্তে, ম্যাটজ (রুবির স্রষ্টা) যখন পরিবর্তনগুলি তাকে প্রভাবিত করে তখন প্রধান সংস্করণ বৃদ্ধি করে। এই সংস্করণটি রুবির 30 বছর পূর্ণ করে এবং ভাষাকে প্রসারিত করার বৈশিষ্ট্যগুলি প্রবর্তন করে৷

রুবি 4.0:মূল বৈশিষ্ট্য, রিলিজ হাইলাইট এবং আপগ্রেড গাইড

রুবি 4-এ আপগ্রেড করা রুবিস্টদের জন্য ভাল খবর হল যে আপগ্রেড করা তুলনামূলকভাবে ব্যথাহীন হওয়া উচিত। Ruby::Box এর মতো কিছু নতুন বৈশিষ্ট্য রয়েছে৷ এবং ZJIT , সঙ্গতিতে কিছু উন্নতি, এবং কিছু অন্যান্য পরিমার্জন যা বেশিরভাগ পিছনের সাথে সামঞ্জস্যপূর্ণ।

চলুন ডুব দিয়ে দেখি রুবি 4-এ কী পরিবর্তন হয়েছে—এবং আপনি কীভাবে সহজে আপগ্রেড করতে পারেন।

Ruby::Box? কি

Ruby 4.0 এর সবচেয়ে আকর্ষণীয় পরীক্ষামূলক বৈশিষ্ট্যগুলির মধ্যে একটি হল Ruby::Box , যা রুবি প্রক্রিয়ার মধ্যে বিচ্ছিন্ন নামস্থান বা "কন্টেইনার" (ডকার কন্টেইনারগুলির সাথে বিভ্রান্ত না হওয়া) প্রবর্তন করে৷

এটি মূলত আপনার রুবি প্রক্রিয়ার মধ্যে একটি বিচ্ছিন্ন রুবি বিশ্বকে ঘুরিয়ে দেওয়ার একটি উপায়। যখন আপনি একটি নতুন Ruby::Box তৈরি করেন , যে কোনো ক্লাস, মডিউল, গ্লোবাল ভেরিয়েবল, ধ্রুবক, এমনকি সি এক্সটেনশনগুলি আপনি সেই বক্সের ভিতরে লোড করেন তা এর মধ্যেই সীমাবদ্ধ।

এটি ভাষা স্তরে হালকা ভার্চুয়ালাইজেশনের মতো, যেখানে প্রতিটি বক্সের নিজস্ব অবস্থা আছে এবং অন্য বক্স বা প্রধান পরিবেশে সংজ্ঞা ফাঁস করবে না।

কারণ এটি পরীক্ষামূলক, আপনি রুক্ষ প্রান্ত বা অস্থিরতা আঘাত করতে পারেন। কর্মক্ষমতা ওভারহেড একটি বিবেচনা. জিনিসগুলিকে বিচ্ছিন্ন করা বিনামূল্যে নয়, তাই মূল দল ইচ্ছাকৃতভাবে এটি অপ্ট-ইন করেছে৷

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

RUBY_BOX=1

কেন ZJIT গুরুত্বপূর্ণ

Ruby 4.0 ZJIT এর সাথে পরিচয় করিয়ে দেয়, একটি ব্র্যান্ড-নতুন জাস্ট-ইন-টাইম কম্পাইলার, যা YJIT-এর উত্তরসূরি হিসেবে বিকশিত হয়েছে। আপনি গণনা রাখলে, MRI-এ এখন দুই আছে JIT কম্পাইলার। ZJIT YJIT থেকে আলাদা, এবং সেগুলি সমান্তরালভাবে তৈরি করা হচ্ছে। আপনি যদি ইতিমধ্যেই YJIT ব্যবহার করে থাকেন, তাহলে আপনাকে স্যুইচ করতে হবে না।

YJIT রিক্যাপ

YJIT ("এখনও আরেকটি JIT") Shopify দ্বারা নির্মিত এবং রুবি 3.1-এ প্রবর্তিত হয়েছিল। এটি একটি অলস বেসিক ব্লক ভার্সনিং পদ্ধতি ব্যবহার করে—উড়তে থাকা কোডের ছোট অংশ (বেসিক ব্লক) সংকলন করে এবং রানটাইম প্রকারের উপর ভিত্তি করে বিশেষায়িত করে।

YJIT যোগ করা তুলনামূলকভাবে সহজ হওয়ার সাথে সাথে অনেক রুবি অ্যাপকে উল্লেখযোগ্যভাবে গতি বাড়ানোর প্রমাণ করেছে। এটি মরিচায় লেখা এবং সাম্প্রতিক রুবি সংস্করণগুলিতে এটি ডিফল্ট/প্রাথমিক JIT হয়েছে৷

ZJIT কিভাবে আলাদা

ZJIT একটি আরো ঐতিহ্যগত পদ্ধতি-ভিত্তিক JIT কৌশল নেয়। ক্ষুদ্র ক্ষুদ্র ব্লক কম্পাইল করার পরিবর্তে, ZJIT একটি SSA (স্ট্যাটিক সিঙ্গেল অ্যাসাইনমেন্ট) মধ্যবর্তী উপস্থাপনা এবং আরও প্রচলিত কম্পাইলার পাইপলাইন ব্যবহার করে বৃহত্তর ইউনিট (সম্পূর্ণ পদ্ধতি বা বড় কোড খণ্ড) কম্পাইল করে।

এটি একটি "পাঠ্যপুস্তক" JIT কম্পাইলারের মতো একটু বেশি ডিজাইন করা হয়েছে, যা অবদানকারীদের বুঝতে এবং উন্নত করা সহজ করে তুলবে৷

রুবি কোর টিম স্পষ্টভাবে বলে যে ZJIT-এর সাথে তাদের দুটি লক্ষ্য হল রুবির দীর্ঘমেয়াদী কর্মক্ষমতা সীমা বাড়ানো (YJIT এর চেয়ে আরও উন্নত অপ্টিমাইজেশান সক্ষম করে) এবং সম্প্রদায়ের দ্বারা JIT-কে আরও হ্যাকযোগ্য করে তোলা৷

রুবি 4.0 এ ZJIT সক্ষম করা হচ্ছে

ZJIT উপলব্ধ কিন্তু রুবি 4.0-এ ডিফল্টরূপে সক্ষম নয়৷

এটি চেষ্টা করার জন্য, আপনাকে আপনার সিস্টেমে ইনস্টল করা Rust 1.85 বা উচ্চতর দিয়ে Ruby তৈরি করতে হবে। যদিও JIT কোড রুবি বাইনারির অংশ, এটি তৈরি করতে মরিচা প্রয়োজন। তারপর, আপনি ZJIT ব্যবহার করতে '--zjit' পতাকা দিয়ে রুবি চালাতে পারেন।

আপনি যদি ডিফল্টভাবে JIT ছেড়ে যান, আপনি এখনও YJIT থেকে উপকৃত হচ্ছেন (যা নিজেই উন্নতি করতে থাকে)। আপনি যদি --rjit ব্যবহার করেন পতাকা, আপনি লক্ষ্য করবেন এটি এই প্রকাশে সরানো হয়েছে৷

Ruby 4 এর Ractors এর কিছু উন্নতি হয়েছে

রুবি 3.0 সমান্তরালতার জন্য একটি পরীক্ষামূলক বৈশিষ্ট্য Ractors চালু করেছে। র্যাক্টররা GIL (গ্লোবাল ইন্টারপ্রেটার লক) এর চারপাশে কাজ করার জন্য একক প্রক্রিয়ায় একাধিক রুবি ইন্টারপ্রেটার (সিস্টেমটির অংশ যা আপনার কোড কার্যকর করে) চালানোর অনুমতি দেয়, যা সাধারণত রুবিকে একক থ্রেডে সীমাবদ্ধ করে। যদিও আমি কখনই Ractors ব্যবহার করিনি, সেগুলিতে ক্রমাগত বিনিয়োগ একটি স্পষ্ট লক্ষণ যে তারা রুবির ভবিষ্যতের জন্য গুরুত্বপূর্ণ৷

রুবি 4.0-এ, র‍্যাক্টররা এখনও পরীক্ষামূলক চিহ্নিত করা হয়েছে, কিন্তু মূলধারার ব্যবহারযোগ্যতার কাছাকাছি নিয়ে যাওয়ার জন্য তারা কিছু বড় উন্নতি এবং API পরিবর্তন করেছে।

আপনি যদি Ractors ব্যবহার করে থাকেন তবে আপনি জানেন যে বার্তা পাঠানো এবং গ্রহণ করা কিছুটা জটিল ছিল। রুবি 4.0 বিদ্যমান API-কে আরও শক্তিশালী Ractor::Port দিয়ে প্রতিস্থাপন করে প্রক্রিয়া একটি Ractor::Port মূলত একটি পাইপ বা চ্যানেল যা Ractors ব্যবহার করতে পারে মান বিনিময় করতে। প্রতিটি র‍্যাক্টরের এখন একটি ডিফল্ট পোর্ট রয়েছে (Ractor.current.default_port ), এবং আপনি কাস্টম পোর্ট অবজেক্টও তৈরি করতে পারেন এবং সেগুলিকে চারপাশে পাস করতে পারেন৷

Ractors-এ পরিবর্তনের মানে কিছু ব্রেকিং পরিবর্তন আছে। সবচেয়ে উল্লেখযোগ্যভাবে, Ractor.yield এবং Ractor#take অপসারণ করা হয়েছে৷

হুডের নিচে, রুবি 4.0 এর র‍্যাক্টর বাস্তবায়ন আরও ভালো পারফরম্যান্স এবং নিরাপত্তার জন্য টিউন করা হয়েছে। তারা Ractors মধ্যে ভাগ করা রাষ্ট্র হ্রাস. Ractors-এর মধ্যে কম শেয়ার করা অবস্থা মানে দুর্ঘটনাক্রমে বিচ্ছিন্নতা ভেঙে যাওয়ার সম্ভাবনা কম এবং মাল্টি-কোর সিস্টেমে CPU ক্যাশের ভালো ব্যবহার।

র‍্যাক্টরদের এখন আরও ভালো মাপতে হবে এবং দ্রুত দৌড়াতে হবে, যদিও তারা এখনও থ্রেড বা প্রক্রিয়ার মতো ব্যাপকভাবে ব্যবহৃত হয় না।

*.nil রুবি 4

এ পরিবর্তন

স্প্ল্যাটিং nil আর nil.to_a কল করে না রুবি 4.0 এ।

পুরানো রুবি সংস্করণে, arr = [*nil] এর মত কিছু করা nil.to_a কল করবে পর্দার পিছনে (যা [] ফেরত দেয় ), তাই আপনি একটি খালি অ্যারে পাবেন। এটি কিছুটা জাদুকর এবং অসঙ্গত ছিল (কেন *nil করে একটি খালি অ্যারের মতো আচরণ করবেন?)।

রুবি 4.0 এ, এই অদ্ভুত আচরণ চলে গেছে। স্প্ল্যাট ব্যবহার করে (* ) nil-এ হবে নাto_a আহ্বান করুন . এটি মূলত "স্প্যালেট করার কিছু নেই" হিসাবে বিবেচিত হয়। এই পরিবর্তনটি ডাবল-স্প্ল্যাট **nil এর সাথে সামঞ্জস্যপূর্ণ করে তোলে nil.to_hash কল করে না , যা রুবি 3.4 এ প্রবর্তিত হয়েছিল।

রুবি 4-এ একটি লাইনের শুরুতে লজিক্যাল অপারেটর

এটি একটি বরং ছোট সিনট্যাক্স উন্নতি যা অনেক রুবিস্টকে হাসিয়ে দেবে!

আপনি এখন && রাখতে পারেন , || , and , অথবা or শুরুতে পূর্ববর্তী লাইন থেকে একটি বুলিয়ান এক্সপ্রেশন চালিয়ে যাওয়ার জন্য একটি লাইনের। উদাহরণস্বরূপ, আপনি লিখতে পারেন:

if user_signed_in?
 && user.admin?
 && feature_enabled?
 perform_admin_task
end

এটি

এর মতই
if user_signed_in? &&
 user.admin? &&
 feature_enabled?
 perform_admin_task
end

এটা আমার কাছে একটু অদ্ভুত যে এগুলো আগে থেকে একই ছিল না, তাই আমি এই আপডেটের জন্য খুশি।

রুবি 4-এ কিছু ক্লাস আপডেট

রুবি 4.0 মূল ক্লাসে কিছু ছোট পরিবর্তন এবং উন্নতি সহ পাঠানো হয়।

প্রথমে, Set ক্লাস এখন একটি বিল্ট-ইন কোর ক্লাস, মানে আপনি এটি require 'set' ছাড়াই ব্যবহার করতে পারেন . এটি set/sorted_set.rb অপসারণের সাথে আসে .

একই কথা এখন Pathname এর ক্ষেত্রেও সত্য , যা মূল শ্রেণীতে উন্নীত হয়েছিল।

এছাড়াও কিছু নতুন Array আছে পদ্ধতি! এই রিলিজটি Array#find-এর কর্মক্ষমতা উন্নত করে , যা একটি সাধারণ রৈখিক অনুসন্ধানের চেয়ে আরও বুদ্ধিমানভাবে অ্যারে অনুসন্ধান করে। আমরা Array#rfind এর ভূমিকাও পেয়েছি - এটা কোন টাইপো নয়! এই পদ্ধতিটি শর্তের সাথে মিলে যাওয়া শেষ উপাদানটি খুঁজে পায় অ্যারেতে৷

রুবি 4 কিছু নতুন গণিত পদ্ধতি, আত্মদর্শন নিয়ন্ত্রণ, Enumerator যোগ করেছে উন্নতি, এবং আরো! উন্নতির সম্পূর্ণ তালিকার জন্য আপনার অবশ্যই অফিসিয়াল ডক্সগুলি পরীক্ষা করা উচিত৷

কিভাবে রুবি 4 এ আপগ্রেড করবেন

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

একটি নিরাপদ স্থানান্তর নিশ্চিত করার জন্য এখানে কিছু টিপস রয়েছে:

রিলিজ নোট

প্রথমে, অফিসিয়াল রিলিজ নোট পড়ুন! অফিসিয়াল অবচয় বিজ্ঞপ্তির জন্য দুবার চেক করুন। সেখানে উচিত নয়৷ এখানে কোন চমক হতে. রুবি 3.4 আপনাকে যে কোনো আসন্ন অবচয় সম্পর্কে সতর্ক করা উচিত ছিল৷

বঞ্চনার সতর্কতা

আপনি যদি আপনার রুবি দোভাষীর কাছ থেকে অবমূল্যায়ন সতর্কতা উপেক্ষা করে থাকেন, তবে ভাষার কোনো আপডেটের আগে সেগুলিকে সম্বোধন করুন৷

বেসলাইন পরীক্ষা

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

বান্ডলার আপডেট করুন

পরবর্তী বান্ডলার আপডেট করা একটি ভাল ধারণা। একবার আপনি সর্বশেষ সংস্করণে চলে গেলে, bundle install চালান এবং ত্রুটি বা সতর্কতা পরীক্ষা করুন।

আপনার রুবি সংস্করণ বৃদ্ধি করুন

এখন আপনি Ruby-এর নতুন সংস্করণ ইনস্টল এবং সুইচ করতে পারেন৷ রুবি সংস্করণ পরিচালক যেমন rbenv অথবা asdf আপনার স্থানীয় সংস্করণ নিয়ন্ত্রণ করতে রুবি বিশ্বে জনপ্রিয়। যদি আপনার অ্যাপ ডকারে চলে, আপনি ডকারফাইলে রুবি সংস্করণ আপডেট করতে চাইবেন। আপনার অ্যাপ যদি ডকার ছাড়াই কোনো প্ল্যাটফর্মে চলে, আপনি সেখানে আপনার রুবি সংস্করণ আপডেট করতে চাইবেন।

আপনার জেমফাইলে রুবি 4.0 এ আপগ্রেড করুন

আপনার জেমফাইলে আপনার রুবি সংস্করণ আপডেট করুন (যদি আপনি এটি ruby দিয়ে লক করে রাখেন নির্দেশ) এবং bundle install চালান একটি শেষ বার।

আপনার পরীক্ষা চালান

অবশেষে, আপনার পরীক্ষা চালান! যদি কিছুই না ভেঙে যায়, তাহলে আরও বেশি আত্মবিশ্বাস তৈরি করতে আপনার আবেদনের গুরুত্বপূর্ণ পথ দিয়ে দৌড়াতে ভুলবেন না। আপনি আপনার আপগ্রেড পাঠানোর আগে, Honeybadger এর মত একটি ব্যতিক্রম পর্যবেক্ষণ পরিষেবা ব্যবহার করার কথা বিবেচনা করুন যাতে আপনি আসলে জানেন যদি আপনার রুবি 4 তে আপগ্রেড করা ব্যবহারকারীদের জন্য কোন সমস্যা সৃষ্টি করে।

আপনি যদি এই পদক্ষেপগুলি অনুসরণ করেন, তাহলে রুবি যে সর্বোত্তম অফার করে তার সম্পর্কে আপ-টু-ডেট থাকার তুলনামূলকভাবে ব্যথা-মুক্ত অভিজ্ঞতা থাকা উচিত। আপনি যখন এই পরীক্ষাগুলি চালাবেন, তখন রুবিকে 30তম জন্মদিনের শুভেচ্ছা জানাতে ভুলবেন না!


  1. পাইথনের সাথে API ফলাফলগুলি কীভাবে ভিজ্যুয়ালাইজ করবেন

  2. কিভাবে HTML এবং CSS দিয়ে একটি প্রতিক্রিয়াশীল ইমেজ গ্রিড তৈরি করবেন?

  3. অ্যান্ড্রয়েডে কোড ব্যবহার করে ইমেজভিউয়ের মার্জিন কীভাবে সেট করবেন?

  4. অ্যান্ড্রয়েড টেক্সটভিউতে কীভাবে প্রতিস্থাপন () ব্যবহার করবেন?