রুবির একটি নতুন ভার্সন নতুন ফিচার এবং পারফরম্যান্স উন্নতির সাথে আসছে।
আপনি কি পরিবর্তনগুলোর সাথে আপডেট থাকতে চান?
আসুন এক নজর দিই!
অসীম রেঞ্জ (Endless Ranges)
রুবি ২.৫ এবং পুরনো ভার্সনগুলে ইতিমধ্যে একটি ফর্মের অসীম রেঞ্জ সাপোর্ট করত (Float::INFINITY-এর সাথে), কিন্তু রুবি ২.৬ এটিকে পরবর্তী লেভেলে নিয়ে গেছে।
নতুন অসীম রেঞ্জটি এমন দেখায়:
(1..)
এটি সাধারণ রেঞ্জ থেকে আলাদা কারণ এর কোনো শেষ মান নেই যেমন (1..10)।
ব্যবহারের উদাহরণ:
["a", "b", "c"].zip(1..) # [["a", 1], ["b", 2], ["c", 3]] [1,2,3,4,5][1..] # [2, 3, 4, 5] (1..).step(5).take(100) # [1, 6, 11, 16, 21, 26, 31, 36, 41, 46]
আপনি আর কী উদাহরণ চিন্তা করতে পারেন?
Enumerable::ArithmethicSequence
রুবি ২.৬-এ একটি নতুন ধরনের Enumerable অবজেক্ট 도입 করা হয়েছে।
আমি কথা বলছি Enumerable::ArithmethicSequence-এর।
এখন দুটি মেথড আছে যা আপনাকে ArithmethicSequence দেয়:
- Range#step
- Numeric#step
এতে কী বিশেষ?
একটি ArithmethicSequence জানে কতগুলো এলিমেন্ট আছে, প্রথম এলিমেন্ট কোনটি এবং শেষ এলিমেন্ট কোনটি।
উদাহরণ:
(1..10).step(2).first # 1 (1..10).step(2).last # 9
এই first এবং last মেথডগুলো রুবি ২.৬-এর আগে উপলব্ধ ছিল না এবং তাই ArithmethicSequence এখন আছে!
একটি অন্য পার্থক্য:
(1..10).step(2) == (1..10).step(2) # false - রুবি ২.৫ (এবং পুরনো) (1..10).step(2) == (1..10).step(2) # true - রুবি ২.৬
অ্যারিথমেটিক সিকোয়েন্সগুলো রুবি ২.৬-এ একে অপরের সাথে তুলনা করা যায়।
একাধিক আর্গুমেন্টের সাথে হ্যাশ মার্জ (Merge Hash With Multiple Arguments)
আপনি যদি একাধিক হ্যাশ মার্জ করতে চান যাতে সেগুলো একত্রিত हो जाए…
আপনি এভাবে করতে পারেন:
a = { a: 1 } b = { b: 2 } c = { c: 3 } a.merge(b).merge(c) # {:a=>1, :b=>2, :c=>3}
রুবি ২.৬ একটি নতুন উপায় যোগ করেছে:
a.merge(b, c) # {:a=>1, :b=>2, :c=>3}
একই ফলাফল, কিন্তু আপনাকে মেথডটি একবারই কল করতে হবে!
নতুন এক্সেপশন অপশন (New Exception Option)
যখন আপনি Integer এর মত কনভারশন মেথড ব্যবহার করেন তবে মান কনভার্ট না হলে এক্সেপশন পাবেন।
উদাহরণ:
Integer("a") # ArgumentError (invalid value for Integer(): "a")
রুবি ২.৬ exception কিওয়ার্ড আর্গুমেন্ট যোগ করেছে:
- Integer()
- Float()
- Rational()
- Complex()
আপনি এই কিওয়ার্ড দিয়ে এই মেথডগুলোর আচরণ নিয়ন্ত্রণ করতে পারেন।
উদাহরণ:
Integer("a", exception: false) # nil
Random.bytes
আপনার যদি র্যান্ডম বাইটস দরকার হয় তবে রুবি ২.৬ Random ক্লাসে একটি নতুন bytes মেথড যোগ করেছে।
উদাহরণ:
Random.bytes(10) # "\xCD\r\xE6Wz\xBA)\x02\xC4\xDB"
এটি সম্পূর্ণ নতুন ফাংশনালিটি নয় কারণ এটি সবসময় securerandom মডিউল দিয়ে উপলব্ধ ছিল।
require 'securerandom' SecureRandom.bytes(10)
তবে এই নতুন মেথড কেন?
Random.bytes সিকিউরিটির বিনিময়ে গতি নেয়, এটি SecureRandom-এর চেয়ে ৮ গুণ দ্রুত।
Range#%
রুবি ২.৬-এ Range-এ একটি নতুন % মেথড যোগ করা হয়েছে।
উদাহরণ:
((0..) % 2).take(5) # [0, 2, 4, 6, 8]
এই মেথডটি Range#step-এর সমতুল্য।
TracePoint#parameters
TracePoint ক্লাস মেথড কল, ক্লাস ডেফিনিশন এবং থ্রেডের মত ইভেন্ট ট্রেস করতে সাহায্য করে।
রুবি ২.৬-এ একটি নতুন parameters মেথড যোগ করা হয়েছে।
এই নতুন মেথড দিয়ে আপনি কল করা হচ্ছে এমন মেথডের প্যারামিটার লিস্ট প্রিন্ট করতে পারেন।
উদাহরণ:
TracePoint.trace(:call, :b_call, :c_call) do |tp| p [tp.event, tp.parameters] end def orange(a,b,c*) end orange(1,2,3)
ফলাফল:
[:call, [[:req, :a], [:req, :b], [:rest, :c]]]
ট্রানসিয়েন্ট হিপ (Transient Heap)
ট্রানসিয়েন্ট হিপ হলো স্বল্পজীবী অবজেক্টের জন্য একটি পারফরম্যান্স উন্নতি যা মেমরি ফ্র্যাগমেন্টেশন এবং malloc-এর ধীর কলের সমস্যা কমাতে লক্ষ্যবদ্ধ।
Malloc হলো রুবি ইন্টারপ্রেটার (এবং অধিকাংশ সি প্রোগ্রাম) অপারেটিং সিস্টেম থেকে মেমরি অনুরোধ করার পদ্ধতি।
NEWS এন্ট্রি অনুযায়ী, আমরা ৬-৭% স্পিডআপ দেখছি।
আমি কিছু বেঞ্চমার্ক চালিয়েছি:
দেখতে পাচ্ছি এটি সবচেয়ে কার্যকর হয় অনেকগুলো হ্যাশ তৈরি করার সময় যেগুলো ১০টি এলিমেন্টের চেয়ে ছোট।

এই ফলাফল অনুযায়ী বড় হ্যাশগুলো রুবি ২.৬-এ (প্রিভিউ ৩) ধীর।
ট্রানসিয়েন্ট হিপ থেকে লাভ পেতে পারেন এমন অন্যান্য অবজেক্ট:
- অ্যারে
- Struct
- নিয়মিত অবজেক্ট (আপনার তৈরি ক্লাস থেকে)
Array#union এবং Array#difference
রুবি ২.৬-এ Array ক্লাসে দুটি নতুন মেথড, union এবং difference যোগ করা হয়েছে।
উদাহরণ:
[1,2,3,4,5].difference([3]) # [1, 2, 4, 5] [1,2,3,4,5].union([5,6,7]) # [1, 2, 3, 4, 5, 6, 7]
এই নতুন মেথডগুলো একাধিক আর্গুমেন্ট নেয়।
সারসংক্ষেপ
রুবি ২.৬ নতুন উপকারী ফিচারগুলোর সাথে আসছে যাতে আপনি কম সময়ে ভালো কোড লিখতে পারেন। আর একটি পারফরম্যান্স-সম্পর্কিত ফিচার, MJIT (Method Based Just-in-Time Compiler) একটি নিবেদিত আর্টিকেলে কভার করা হবে।
রুবি ২.৬ ডিসেম্বর ২৫, ২০১৮-এ রিলিজ হওয়া আশা করা হচ্ছে।
আপনি যদি পরিবর্তনগুলোর সাথে আপডেট থাকতে চান, আপনার রুবি স্কিল বাড়াতে চান এবং একজন অসাধারণ রুবি ডেভেলপার হতে চান তবে আজি আমার রুবি নিউজলেটারে জয়েন করুন।
পড়ার জন্য ধন্যবাদ!