Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

প্যাকেজ, ক্রেট এবং মডিউলের মাধ্যমে ক্রমবর্ধমান প্রজেক্ট ম্যানেজ করা

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

এখন পর্যন্ত আমরা যে প্রোগ্রামগুলো লিখেছি তা একটি ফাইলের একটি মডিউলের মধ্যে ছিল। একটি প্রজেক্ট যখন বড় হয়, তখন কোডকে একাধিক মডিউল এবং তারপর একাধিক ফাইলে বিভক্ত করে অর্গানাইজ করা উচিত। একটি প্যাকেজে একাধিক বাইনারি ক্রেট এবং ঐচ্ছিকভাবে একটি লাইব্রেরি ক্রেট থাকতে পারে। প্যাকেজ বড় হওয়ার সাথে সাথে, আপনি এর কিছু অংশ আলাদা ক্রেটে এক্সট্র্যাক্ট করতে পারেন যা এক্সটার্নাল ডিপেন্ডেন্সি হয়ে ওঠে। এই অধ্যায়ে এই সমস্ত কৌশল নিয়ে আলোচনা করা হয়েছে। খুব বড় প্রজেক্টের জন্য, যেখানে একগুচ্ছ আন্তঃসম্পর্কিত প্যাকেজ একসাথে বিকশিত হয়, কার্গো (Cargo) workspaces সরবরাহ করে, যা আমরা অধ্যায় ১৪-এর “কার্গো ওয়ার্কস্পেস” বিভাগে আলোচনা করব।

আমরা ইমপ্লিমেন্টেশন ডিটেইলস এনক্যাপসুলেট করা নিয়েও আলোচনা করব, যা আপনাকে উচ্চ স্তরে কোড পুনঃব্যবহার (reuse) করতে দেয়: একবার আপনি একটি অপারেশন ইমপ্লিমেন্ট করার পর, অন্য কোড আপনার কোডের পাবলিক ইন্টারফেসের মাধ্যমে তাকে কল করতে পারে, এর ইমপ্লিমেন্টেশন কীভাবে কাজ করে তা না জেনেই। আপনি যেভাবে কোড লিখেন তা নির্ধারণ করে কোন অংশগুলো অন্য কোডের ব্যবহারের জন্য পাবলিক থাকবে এবং কোন অংশগুলো প্রাইভেট ইমপ্লিমেন্টেশন ডিটেইলস যা আপনি পরিবর্তন করার অধিকার রাখেন। এটি আপনার মাথায় রাখার মতো বিবরণের পরিমাণ সীমিত করার আরেকটি উপায়।

এর সাথে সম্পর্কিত একটি ধারণা হলো স্কোপ (scope): যে নেস্টেড কনটেক্সটে কোড লেখা হয়, সেখানে একটি নামের সেট থাকে যা “ইন স্কোপ” (in scope) হিসেবে সংজ্ঞায়িত। কোড পড়া, লেখা এবং কম্পাইল করার সময়, প্রোগ্রামার এবং কম্পাইলারদের জানতে হবে যে একটি নির্দিষ্ট স্থানের একটি নির্দিষ্ট নাম কোনো variable, function, struct, enum, module, constant বা অন্য কোনো আইটেমকে নির্দেশ করে কিনা এবং সেই আইটেমটির অর্থ কী। আপনি স্কোপ তৈরি করতে পারেন এবং কোন নামগুলো স্কোপের ভিতরে বা বাইরে থাকবে তা পরিবর্তন করতে পারেন। আপনি একই স্কোপে একই নামের দুটি আইটেম রাখতে পারবেন না; নাম সংক্রান্ত বিরোধ (name conflicts) মেটানোর জন্য টুলস উপলব্ধ আছে।

রাস্টের বেশ কিছু ফিচার আছে যা আপনাকে আপনার কোডের অর্গানাইজেশন পরিচালনা করতে সাহায্য করে, যার মধ্যে রয়েছে কোন ডিটেইলস এক্সপোজ করা হবে, কোন ডিটেইলস প্রাইভেট থাকবে, এবং আপনার প্রোগ্রামের প্রতিটি স্কোপে কোন নামগুলো থাকবে। এই ফিচারগুলোকে কখনও কখনও সম্মিলিতভাবে মডিউল সিস্টেম (module system) বলা হয়, যার মধ্যে রয়েছে:

  • প্যাকেজ (Packages): কার্গোর একটি ফিচার যা আপনাকে ক্রেট বিল্ড, টেস্ট এবং শেয়ার করতে দেয়।
  • ক্রেট (Crates): মডিউলের একটি ট্রি যা একটি লাইব্রেরি বা এক্সিকিউটেবল তৈরি করে।
  • মডিউল এবং use: আপনাকে পাথের অর্গানাইজেশন, স্কোপ এবং প্রাইভেসি নিয়ন্ত্রণ করতে দেয়।
  • পাথ (Paths): একটি আইটেম, যেমন কোনো struct, function, বা module-এর নামকরণ করার একটি উপায়।

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