সরাসরি প্রধান সামগ্রীতে চলে যান

Rust ল্যাঙ্গুয়েজে ওনারশিপ (Ownership) শেখার সহজ গাইড

Introduction

হ্যালো! আজকের এই আলোচনায় আমরা Rust প্রোগ্রামিং ল্যাঙ্গুয়েজের সবথেকে গুরুত্বপূর্ণ এবং ইউনিক একটি কনসেপ্ট নিয়ে কথা বলব, যার নাম হলো ওনারশিপ (Ownership)। আপনি যদি আগে C++, Java বা Python ব্যবহার করে থাকেন, তবে দেখবেন Rust একটু আলাদাভাবে কাজ করে। এই ভিডিওতে পীযূষ গর্গ খুব সহজভাবে বুঝিয়েছেন কীভাবে Rust মেমোরি ম্যানেজ করে কোনো 'গারবেজ কালেক্টর' ছাড়াই। সহজ কথায়, ওনারশিপ হলো কিছু নিয়মের সেট যা ঠিক করে আপনার কম্পিউটার প্রোগ্রাম কীভাবে মেমোরি ব্যবহার করবে।


১. ওনারশিপ কী এবং কেন এটি প্রয়োজন?

রেফারেন্স: [00:35]

অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজে মেমোরি ম্যানেজ করার দুটি প্রধান উপায় থাকে:

  • Garbage Collector (GC): যেমন Java বা Python-এ থাকে। এটি নিজে নিজেই খুঁজে বের করে কোন মেমোরি আর দরকার নেই এবং তা পরিষ্কার করে। এতে প্রোগ্রামের গতি কিছুটা কমে যেতে পারে।

  • Manual Memory Management: যেমন C বা C++ এ। এখানে প্রোগ্রামারকে নিজেকেই মেমোরি নিতে হয় এবং কাজ শেষে তা ফেরত দিতে হয়। ভুল করলে মেমোরি লিক হওয়ার ভয় থাকে।

Rust-এর উপায়: Rust তৃতীয় একটি পথ বেছে নিয়েছে। এটি Ownership নামক নিয়মের ওপর ভিত্তি করে চলে। কম্পাইল করার সময়ই Rust চেক করে নেয় যে সব নিয়ম ঠিক আছে কি না। এর ফলে প্রোগ্রাম চলার সময় আলাদা কোনো বাড়তি চাপের (Overhead) সৃষ্টি হয় না।

সহজ ভাষায় ব্যাখ্যা: মনে করুন, আপনার একটি কলম আছে। আপনি এই কলমটির 'ওনার' বা মালিক। আপনি যখন কলমটি কাউকে দিয়ে দেন, তখন আপনি আর মালিক থাকেন না। Rust-এর মেমোরিও ঠিক এভাবেই কাজ করে।


২. ওনারশিপের তিনটি প্রধান নিয়ম (Rules of Ownership)

রেফারেন্স: [01:41]

Rust-এ ওনারশিপ বুঝতে হলে এই তিনটি নিয়ম মাথায় রাখতে হবে:

  1. প্রতিটি ভ্যালুর (Value) একজন ওনার বা মালিক থাকবে।

  2. একই সময়ে একটি ভ্যালুর মালিক শুধুমাত্র একজনই হতে পারে।

  3. যখন ওনার স্কোপের (Scope) বাইরে চলে যায়, তখন সেই ভ্যালুটি মেমোরি থেকে মুছে ফেলা হয়।

স্কোপ (Scope) কী? সহজভাবে বললে, এক জোড়া সেকেন্ড ব্র্যাকেটের { } ভেতরের অংশটুকু হলো স্কোপ। এর ভেতর যা তৈরি হবে, কাজ শেষে তা স্বয়ংক্রিয়ভাবে মুছে যাবে।


৩. মুভ (Move) বনাম ক্লোন (Clone)

রেফারেন্স: [01:02:12]

Rust-এ যখন আমরা একটি ভেরিয়েবলের ডাটা অন্য ভেরিয়েবলে রাখি, তখন কী ঘটে?

  • Move: যদি আপনি একটি বড় ডাটা (যেমন String) এক ভেরিয়েবল থেকে অন্যটিতে কপি করতে চান, Rust তখন পুরনো ভেরিয়েবলটিকে ইনভ্যালিড (Invalid) করে দেয়। একে বলে 'Move'। কারণ নিয়ম অনুযায়ী, মালিক একজনই হতে পারে।

  • Clone: আপনি যদি চান আগের ভেরিয়েবলটিও ঠিক থাকুক এবং নতুন একটি কপিও তৈরি হোক, তবে আপনাকে .clone() মেথড ব্যবহার করতে হবে।

কঠিন শব্দের সহজ অর্থ:

  • Invalid (ইনভ্যালিড): যা আর ব্যবহার করা যাবে না বা অকেজো।

  • Metadata (মেটাডাটা): ডাটা সম্পর্কে তথ্য (যেমন স্ট্রিংয়ের দৈর্ঘ্য কত)।


৪. ওনারশিপ ও ফাংশন (Ownership and Functions)

রেফারেন্স: [01:02:23]

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

কোড উদাহরণ:

Rust

fn main() {
    let s1 = String::from("হ্যালো"); // s1 এখন মালিক
    takes_ownership(s1);           // ওনারশিপ ফাংশনের কাছে চলে গেল
    
    // println!("{}", s1);         // এটি এরর দিবে, কারণ s1 এখন আর মালিক নয়
}

fn takes_ownership(some_string: String) {
    println!("{}", some_string);
} // এখানে some_string মেমোরি থেকে মুছে যাবে (Drop) 

এই কোড দিয়ে আমরা কী বুঝলাম? আমরা বুঝলাম যে, একবার যদি আমরা কোনো ভেরিয়েবল ফাংশনে পাঠিয়ে দিই, তবে আমরা মেইন ফাংশনে সেটি আর ব্যবহার করতে পারব না। এটি শুনতে কঠিন মনে হলেও এটি মেমোরি সেফটি নিশ্চিত করে।


৫. রেফারেন্স এবং বরোয়িং (References and Borrowing) - একটি সমাধান

রেফারেন্স: [01:03:04]

ভিডিওর শেষে বলা হয়েছে যে, বারবার ওনারশিপ দেওয়া এবং রেজাল্ট ব্যাক করা বেশ ঝামেলার কাজ। এর সহজ উপায় হলো Borrowing বা ধার করা। আমরা & চিহ্ন ব্যবহার করে ওনারশিপ না দিয়েই ভ্যালুটি ব্যবহার করতে পারি।


আমার বিশ্লেষণ ও চিন্তাভাবনা (Analysis & Thinking)

সারাংশ: কন্টেন্ট ক্রিয়েটর পীযূষ গর্গ এখানে বোঝাতে চেয়েছেন যে, Rust কেন অন্যান্য ল্যাঙ্গুয়েজের তুলনায় বেশি নিরাপদ। ওনারশিপের মাধ্যমে Rust নিশ্চিত করে যে মেমোরিতে কোনো আবর্জনা জমা থাকবে না এবং কোনো মেমোরি ক্রাশ হবে না।

বাস্তবতা ও সম্ভাবনা: ১. সতর্কতা: শুরুতে ওনারশিপ শেখাটা একটু কঠিন মনে হতে পারে (যাকে বলা হয় 'Fighting with the borrow checker')। তবে একবার এটি রপ্ত করলে আপনার প্রোগ্রামে মেমোরি রিলেটেড বাগ (Bug) থাকবেই না। ২. বিকল্প: যদি আপনার ওনারশিপ নিয়ে কাজ করতে খুব বেশি সমস্যা হয়, তবে আপনি Clone ব্যবহার করতে পারেন, কিন্তু এতে মেমোরি বেশি খরচ হয়। ৩. পরামর্শ: সরাসরি অনেক কোড না লিখে আগে ওনারশিপের তিনটি নিয়ম ভালো করে বুঝুন। ছোট ছোট ফাংশন লিখে টেস্ট করুন কীভাবে ভ্যালু পাস হচ্ছে।

সহজ টিপস: সবসময় মনে রাখবেন—Rust হলো একজন কড়া পাহারাদারের মতো। সে চায় না কোনো ডাটা অনাথ (Ownerless) হয়ে মেমোরিতে পড়ে থাকুক। তাই সে সব সময় ডাটার একজন মালিক নিশ্চিত করে।

ভিডিও ইউআরএল: https://www.youtube.com/watch?v=K682q8p-YHg

[

Ownership in Rust | Rust Book

Piyush Garg · 7.3K views

](http://www.youtube.com/watch?v=K682q8p-YHg)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...