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-এ ওনারশিপ বুঝতে হলে এই তিনটি নিয়ম মাথায় রাখতে হবে:
-
প্রতিটি ভ্যালুর (Value) একজন ওনার বা মালিক থাকবে।
-
একই সময়ে একটি ভ্যালুর মালিক শুধুমাত্র একজনই হতে পারে।
-
যখন ওনার স্কোপের (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)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d