Introduction
আজকের এই ব্লগে আমরা Rust প্রোগ্রামিং ল্যাঙ্গুয়েজের খুবই গুরুত্বপূর্ণ দুটি কনসেপ্ট— References (রেফারেন্স) এবং Borrowing (বরোয়িং) নিয়ে আলোচনা করব। আগের পর্বে আমরা জেনেছিলাম Rust কীভাবে ওনারশিপ (Ownership) ব্যবহার করে মেমোরি ম্যানেজ করে। কিন্তু বারবার ওনারশিপ হাতবদল করা বেশ ঝামেলার কাজ। এই ঝামেলা এড়াতেই রেফারেন্স এবং বরোয়িংয়ের জন্ম। সহজ কথায় বলতে গেলে, কারো থেকে কোনো জিনিস মালিকানা না নিয়ে শুধু ব্যবহারের জন্য ধার নেওয়াটাই হলো এই কনসেপ্টের মূল ভিত্তি।
১. রেফারেন্স (References) কি এবং কেন?
রেফারেন্স মানে হলো কোনো ডেটার অরিজিনাল মালিকানা না নিয়ে তার ঠিকানাকে ব্যবহার করা। Rust-এ এটি & (Ampersand) চিহ্ন দিয়ে প্রকাশ করা হয়।
রেফারেন্স ভিডিও লিংক: [00:21]
বিস্তারিত আলোচনা: যখন আমরা কোনো ফাংশনে ভেরিয়েবল পাঠাই, তখন ওনারশিপ চলে যায়। ফলে ফাংশন শেষ হওয়ার পর সেই ভেরিয়েবল আর ব্যবহার করা যায় না। কিন্তু আমরা যদি ওনারশিপ না দিয়ে শুধু ডেটা ব্যবহারের অনুমতি দেই, তবে তাকেই রেফারেন্স বলে। একে অনেকটা 'পয়েন্টার' এর মতো ভাবা যেতে পারে যা মেমোরির একটি নির্দিষ্ট ঠিকানাকে নির্দেশ করে।
- সহজ ব্যাখ্যা: ধরো তোমার একটা দামি বই আছে। বন্ধু সেটা পড়তে চাইল। তুমি বইটার মালিকানা তাকে দিয়ে দিলে না, বরং কিছুদিনের জন্য তাকে পড়তে দিলে। এটাই হলো রেফারেন্স।
কঠিন শব্দের সহজ অর্থ:
Tediouos (টিডিয়াস): যা করতে অনেক সময় লাগে বা খুব বিরক্তিকর।
Pointer (পয়েন্টার): মেমোরির এমন একটি জায়গা যা অন্য কোনো ডেটার ঠিকানাকে ধরে রাখে।
২. বরোয়িং (Borrowing) এবং কোড উদাহরণ
রেফারেন্স তৈরি করার এই প্রক্রিয়াকেই Rust-এর ভাষায় বলা হয় Borrowing বা ধার নেওয়া।
কোড রেফারেন্স: [01:50]
কোড উদাহরণ:
Rust
fn main() {
let s1 = String::from("hello");
// এখানে s1-এর রেফারেন্স পাঠানো হচ্ছে, ওনারশিপ নয়
let len = calculate_length(&s1);
println!("The length of '{}' is {}.", s1, len);
}
fn calculate_length(s: &String) -> usize { // s একটি রেফারেন্স
s.len()
}
ব্যাখ্যা:
-
এখানে
&s1লিখে আমরাs1এর ডেটা ধার দিয়েছি। -
calculate_lengthফাংশনটি শেষে যখন কাজ শেষ করে, তখনsআউট অফ স্কোপ হয়ে যায়। কিন্তু যেহেতুsওনার ছিল না, তাই অরিজিনাল ডেটা মেমোরি থেকে ডিলিট হয় না।
৩. মিউটেবল রেফারেন্স (Mutable References)
সাধারণ রেফারেন্স দিয়ে শুধু ডেটা পড়া যায় (Read), কিন্তু পরিবর্তন (Modify) করা যায় না। যদি আমরা ধার নেওয়া ডেটা পরিবর্তন করতে চাই, তবে আমাদের Mutable Reference ব্যবহার করতে হবে।
রেফারেন্স ভিডিও লিংক: [10:42]
কোড উদাহরণ:
Rust
fn main() {
let mut s = String::from("hello");
change(&mut s); // মিউটেবল রেফারেন্স পাঠানো হলো
println!("{}", s);
}
fn change(some_string: &mut String) {
some_string.push_str(", world");
}
সহজ উদাহরণ: তুমি তোমার গাড়ি বন্ধুকে দিলে শুধু চালানোর জন্য (ইম্মিউটেবল)। কিন্তু তুমি যদি তোমার গাড়ি কোনো মেকানিককে দাও সারানোর জন্য, তবে তাকে তুমি পরিবর্তনের অনুমতি দিচ্ছ (মিউটেবল)।
সহজ ব্যাখ্যা (Mutable): যা পরিবর্তন করা সম্ভব।
৪. ডাটা রেস (Data Race) এবং বড় একটি নিয়ম
Rust-এ একটি বড় নিয়ম আছে: একই সময়ে একটি ডেটার কেবল একটিই মিউটেবল রেফারেন্স থাকতে পারে। যদি একাধিক মানুষ একই সাথে কোনো ডেটা পরিবর্তন করার চেষ্টা করে, তবে সিস্টেমে গণ্ডগোল হতে পারে, যাকে বলা হয় Data Race।
রেফারেন্স ভিডিও লিংক: [14:50]
কেন এই নিয়ম? যদি একজন ডেটা লিখছে আর অন্যজন পড়ছে, তবে যে পড়ছে সে ভুল ডেটা পেতে পারে। Rust এই সমস্যা কম্পাইল করার সময়ই আটকে দেয়, যাতে সফটওয়্যার ক্র্যাশ না করে।
৫. ড্যাঙ্গলিং রেফারেন্স (Dangling References)
ড্যাঙ্গলিং রেফারেন্স মানে এমন একটা রেফারেন্স যা এমন কিছুকে নির্দেশ করছে যা মেমোরিতে আর নেই।
রেফারেন্স ভিডিও লিংক: [27:14]
বিস্তারিত: মনে করো একটি ফাংশন একটি ভেরিয়েবল তৈরি করল এবং তার রেফারেন্স ফেরত দিল। কিন্তু ফাংশন শেষ হওয়ার সাথে সাথে ভেরিয়েবলটি মেমোরি থেকে মুছে যায়। এখন সেই রেফারেন্সটি শূন্যস্থানকে খুঁজবে। Rust এই ধরণের ভুল হতে দেয় না।
কঠিন শব্দের সহজ অর্থ:
- Dangling (ড্যাঙ্গলিং): ঝুলে থাকা বা ভিত্তিহীন কিছু।
অ্যানালাইসিস ও আমার চিন্তাভাবনা
কনটেন্ট ক্রিয়েটর পিয়ূষ গর্গ এখানে Rust-এর মেমোরি সেফটি ফিচারের ওপর জোর দিয়েছেন। জাভাস্ক্রিপ্ট বা পাইথনের মতো ল্যাঙ্গুয়েজে ডেটা রেস খুঁজে বের করা খুব কঠিন, কিন্তু Rust এটা আগেভাগেই ধরে ফেলে।
বাস্তবসম্মত ধারণা ও পরামর্শ:
-
বিকল্প চিন্তা: সচরাচর আমরা ডেটা কপি (Copy) করে কাজ চালাতে পারি, কিন্তু বড় ডেটার ক্ষেত্রে কপি করা মেমোরির অপচয়। তাই রেফারেন্স শেখা জরুরি।
-
পরামর্শ: শুরুতে Rust-এর এই 'ধার নেওয়া' বা 'ওনারশিপ' নিয়মগুলো একটু কঠিন মনে হতে পারে। কিন্তু একবার আয়ত্ত করতে পারলে আপনার কোড হবে বিশ্বের সবচেয়ে নিরাপদ কোডগুলোর একটি।
-
পরবর্তী ধাপ: স্লাইস (Slices) সম্পর্কে জানলে ডেটা হ্যান্ডলিং আরও সহজ হবে।
এই ভিডিওটি নতুনদের জন্য খুবই কার্যকর কারণ এতে বাস্তব জীবনের উদাহরণের মাধ্যমে জটিল মেমোরি ম্যানেজমেন্ট বোঝানো হয়েছে।
ভিডিও লিংক: https://www.youtube.com/watch?v=qIhoi-74IXc
[
References and Borrowing | Rust Book
Piyush Garg · 4.3K views
](http://www.youtube.com/watch?v=qIhoi-74IXc)

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