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

রুবির MRI সোর্স কোডে গভীর ডুব

আপনি যদি কিছুক্ষণ ধরে রুবি ব্যবহার করছেন তবে আপনি কীভাবে কিছু জিনিস আন্ডার দ্য হুড কাজ করে সেটা জানতে আগ্রহী হতে পারেন।

রুবি ইন্টারনালস গভীরে যাওয়ার একটি উপায় হল সোর্স কোড পড়া যা এটিকে কাজ করাতে থাকে। আপনি যদি C না জানেন তবুও আপনি কিছু আকর্ষণীয় জিনিস বের করতে পারেন।

সোর্স কোডটি রুবির গিটহাব রিপোতে পাওয়া যায়।

আদর্শভাবে, আপনি Codequery-এর মতো একটি টুল ব্যবহার করবেন যা আপনাকে ক্লাস এবং মেথড নাম সহজে খুঁজে বের করতে দেয়।

কোর ক্লাস এক্সপ্লোর করা

আপনার অধিকাংশ এক্সপ্লোরেশন রুট ফোল্ডারে হবে। সেখানে আপনি সকল কোর ক্লাসের সোর্স কোড পাবেন যেমন Object - object.c-এ বা Array - array.c-এ।

চলুন hash.c-এ এক নজর দিয়ে আসি।

আপনি যদি লাইন ৪৪৬৮ পর্যন্ত স্ক্রোল করেন তবে কিছু পরিচিত নাম দেখতে পাবেন।

এটি থেকে শুরু করি:

 rb_cHash = rb_define_class("Hash", rb_cObject); 

এই লাইনে, Hash ক্লাসটি rb_define_class ফাংশন দিয়ে ডিফাইন করা হচ্ছে। দ্বিতীয় আর্গুমেন্ট (rb_cObject) এই ক্লাসের সুপারক্লাস।

আপনি যদি ক্লাস ডিফাইন করার প্রক্রিয়া জানতে চান তবে rb_define_class খুঁজুন।

রুবির MRI সোর্স কোডে গভীর ডুব

rb_define_class-এর প্রথম অংশ চেক করে ক্লাসটি ইতিমধ্যে ডিফাইন হয়েছে কিনা।

 if (rb_const_defined(rb_cObject, id)) { // ... } 

সেই if ব্লকের ভেতরে, রুবি কিছু স্যানিটি চেক করে, যেমন নিশ্চিত করা যে আমরা একটি ইতিমধ্যে ডিফাইন করা ক্লাসের সাথে কাজ করছি।

যদি ক্লাস ডিফাইন করা না থাকে তবে এভাবে ডিফাইন করা হয়:

 klass = rb_define_class_id(id, super); st_add_direct(rb_class_tbl, id, klass); rb_name_class(klass, id); rb_const_set(rb_cObject, id, klass); rb_class_inherited(super, klass); return klass; 

আপনি এই সব মেথডের ডেফিনিশন পড়তে পারেন, কিন্তু আমার মতে এগুলো খুবই স্বয়ংস্পষ্ট।

st_add_direct-এ, ‘st’ পার্ট বলতে চায় ‘সিম্বল টেবিল’, এবং এটি শুধু একটি হ্যাশ টেবিল। rb_const_set ফাংশন Object ক্লাসে একটি কনস্ট্যান্ট সেট করে, এটি ক্লাসকে সব জায়গায় উপলব্ধ করে দেয়।

এবং rb_class_inherited সুপারক্লাসের inherited মেথড কল করে, আপনি এই মেথডের ডকুমেন্টেশন এখানে পাবেন।

কোডের পরবর্তী অংশ মেথড ডেফিনিশনগুলো দিয়ে গঠিত। MRI rb_define_method ব্যবহার করে এটা করে।

এখানে একটি উদাহরণ:

 rb_define_method(rb_cHash,"index", rb_hash_index, 1); rb_define_method(rb_cHash,"size", rb_hash_size, 0); rb_define_method(rb_cHash,"length", rb_hash_size, 0); rb_define_method(rb_cHash,"empty?", rb_hash_empty_p, 0); 

আর্গুমেন্টগুলো যেন:

  • প্রথম আর্গুমেন্ট হল ক্লাস যার ওপর এই মেথড ডিফাইন করা হচ্ছে
  • দ্বিতীয় আর্গুমেন্ট হল মেথডের নাম, তৃতীয় আর্গুমেন্ট হল C ফাংশন যা আসলে এই মেথডটি ইমপ্লিমেন্ট করে
  • চতুর্থ আর্গুমেন্ট হল এই রুবি মেথডটিকে কতগুলো আর্গুমেন্ট লাগবে (নেগেটিভ ভ্যালু মানে অপশনাল আর্গুমেন্ট)

rb_define_singleton_method ফাংশনটি একটি ক্লাস মেথড ডিফাইন করতে ব্যবহৃত হয়।

 rb_define_singleton_method(rb_cHash, "[]", rb_hash_s_create, -1); 

rb_define_singleton_method-এর বডি শুধু এক লাইন কোড:

 rb_define_method(singleton_class_of(obj), name, func, argc); 

আপনি যদি আরও এক্সপ্লোর করতে চান তবে object.c একটি ভালো ফাইল।

স্ট্যান্ডার্ড লাইব্রেরি এক্সপ্লোর করা

ঠিক আছে, আজকের জন্য এতটুকু C কাফি!

কিছু রুবি কোড পড়া যাক?

রুবি স্ট্যান্ডার্ড লাইব্রেরি রুবিতে লেখা এবং আপনি এটিকে /lib ডিরেক্টরির নিচে পাবেন।

স্ট্যান্ডার্ড লাইব্রেরিতে রয়েছে OpenStruct, Base64 এনকোডিং এবং Set ডেটা স্ট্রাকচার।

একটি সেট অ্যারের মতো, কিন্তু একটি স্পেশাল প্রোপার্টি রয়েছে: সকল এলিমেন্ট ইউনিক। অন্য কথায়, সেটে কোনো ডুপ্লিকেট নেই।

এটি কীভাবে কাজ করে? কী filmin ফ্যান্সি অ্যালগরিদম আছে পিছনে?

আমরা যদি set.rb-এ এক নজর দেই তবে দ্রুত বুঝতে পারব যে এটি একটি Hash অবজেক্ট দ্বারা ব্যাকড।

 # Adds the given object to the set and returns self. Use +merge+ to # add many elements at once. def add(o) @hash[o] = true self end alias << add 

তাই যদি আপনি একটি ডুপ্লিকেট এলিমেন্ট অ্যাড করেন, তবে এটি চেক করার প্রয়োজন নেই যে এটি ইতিমধ্যে আছে কিনা, এটি পুরনোটির ওপর ওভাররাইট করবে।

রুবিনিয়াস এক্সপ্লোর করা

রুবির সোর্স কোড এক্সপ্লোর করার আরেকটি উপায় হল রুবিনিয়াসের মতো অল্টারনেটিভ ইমপ্লিমেন্টেশন দেখা।

রুবিনিয়াস কোড MRI-এর থেকে আলাদা ভাবে অর্গানাইজড, তাই এর জন্য আমি গিটহাব এবং ‘find file’ ফিচার ব্যবহার করতে পছন্দ করি।

রুবির MRI সোর্স কোডে গভীর ডুব

আপনি যদি Enumerable নিয়ে আরও জানতে চান তবে আপনি শুধু ‘enumerable’ টাইপ করুন এবং আপনি সব রিলেটেড ফাইল দেখতে পাবেন।

উপসংহার

আপনি দেখেছেন, রুবি কীভাবে আন্ডার দ্য হুড কাজ করে সেটা বুঝতে অনেক কষ্ট করতে হয় না। নিজে এক্সপ্লোর করুন এবং সবাইকে বলুন আপনি কী আবিষ্কার করেছেন!

এই পোস্টটি পছন্দ হলে আমার নিউজলেটার জয়েন করা ভুলবেন না, নিচের ফর্মে আপনার ইমেইল দিন এবং আপনি ফ্রি আপডেট এবং এক্সক্লুসিভ কন্টেন্ট পাবেন।


  1. রুবি রিফাইনমেন্ট ব্যাখ্যা: কীভাবে লেক্সিক্যাল স্কোপ আপনার কোড আকার দেয়

  2. রুবির মেথড লুকআপ পাথ আয়ত্ত করা: মেথড কীভাবে রেজলভ হয়

  3. রুবি এবং রেলসে মেথড ডেলিগেশন মাস্টারিং: একটি ব্যবহারিক গাইড

  4. আপনার রেইলস কোড কোথায় যাবে? নন-সিআরইউডি লজিক সংগঠন