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

Rust-এ References এবং Borrowing-এর সহজ গাইড

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)

মন্তব্যসমূহ

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

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

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

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

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

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

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