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

Rust-এ Slice টাইপ এবং মেমোরি সেফটি নিয়ে বিস্তারিত আলোচনা

এই ভিডিওতে পিয়ুষ গর্গ Rust প্রোগ্রামিং ল্যাঙ্গুয়েজের একটি গুরুত্বপূর্ণ কনসেপ্ট 'Slice' নিয়ে কথা বলেছেন। আমরা সাধারণত যখন বড় কোনো ডেটা বা কালেকশন (যেমন: String বা Array) নিয়ে কাজ করি, তখন অনেক সময় পুরো ডেটাটার প্রয়োজন হয় না, শুধু একটা নির্দিষ্ট অংশের প্রয়োজন হয়। এই নির্দিষ্ট অংশকে নিরাপদে এবং মেমোরি বাঁচিয়ে ব্যবহার করার পদ্ধতিই হলো Slice। ভিডিওতে কোডের মাধ্যমে দেখানো হয়েছে কীভাবে Slice ব্যবহার করলে আমাদের প্রোগ্রামে বাগ (error) কম হয় এবং ডেটা ইনভ্যালিড হওয়ার ভয় থাকে না।


১. স্লাইস (Slice) আসলে কী?

স্লাইস হলো কোনো একটি কালেকশনের (যেমন String বা Array) একটা নির্দিষ্ট অংশের রেফারেন্স।

রেফারেন্স (Reference): সহজ ভাষায়, রেফারেন্স মানে হলো অরিজিনাল জিনিসের মালিকানা না নিয়ে শুধু সেটাকে দেখার বা ব্যবহার করার অনুমতি নেওয়া।

রেফারেন্স ভিডিও: [00:26] ভিডিওতে বলা হয়েছে, স্লাইস কোনো ডেটার মালিকানা (Ownership) নেয় না। এটি কেবল মেমোরিতে থাকা ডেটার একটি নির্দিষ্ট সীমানা (Sequence) নির্দেশ করে।

  • সহজ ব্যাখ্যা: ধরুন আপনার কাছে একটা পুরো পাউরুটি আছে। আপনি যদি পুরোটা না খেয়ে মাত্র দুই টুকরো আলাদা করে নেন খাওয়ার জন্য, ওই দুই টুকরোই হলো 'Slice'। অরিজিনাল পাউরুটি আপনার কাছেই আছে, আপনি শুধু একটা অংশ নিয়ে কাজ করছেন।

২. স্লাইস কেন প্রয়োজন? (একটি বাস্তব সমস্যা)

ভিডিওতে একটি সমস্যার কথা বলা হয়েছে: এমন একটি ফাংশন লিখুন যা একটি বাক্য থেকে প্রথম শব্দটি খুঁজে বের করবে এবং তার শেষ পজিশন (index) রিটার্ন করবে।

রেফারেন্স ভিডিও: [01:18]

যদি আমরা শুধু পজিশন (Index) রিটার্ন করি, তবে সমস্যা হতে পারে। যেমন: ১. আমরা ইনডেক্স বের করলাম ৫। ২. এরপর ভুলবশত অরিজিনাল স্ট্রিংটি ক্লিয়ার বা ডিলিট করে দিলাম। ৩. এখন ওই ইনডেক্স ৫-এর কোনো মানে নেই, কারণ ডেটাই তো নেই!

এই সমস্যা সমাধানের জন্যই স্লাইস ব্যবহার করা হয়। স্লাইস সরাসরি ডেটার ওই অংশের রেফারেন্স ধরে রাখে, তাই ডেটা মুছে ফেললে Rust কম্পাইলার সাথে সাথে আপনাকে ভুল ধরিয়ে দেবে।


৩. কোডিং উদাহরণ এবং স্লাইস তৈরি

Rust-এ স্লাইস তৈরি করার জন্য [start..end] সিনট্যাক্স ব্যবহার করা হয়।

কোড উদাহরণ:

Rust

fn main() {
    let s = String::from("Hello World");

    // ০ থেকে ৫ নম্বর ইনডেক্স পর্যন্ত স্লাইস (৫ নম্বরটি বাদে)
    let hello = &s[0..5]; 
    
    // ৬ থেকে ১১ নম্বর ইনডেক্স পর্যন্ত স্লাইস
    let world = &s[6..11];

    println!("First word: {}", hello); // আউটপুট: Hello
    println!("Second word: {}", world); // আউটপুট: World
} 

ব্যাখ্যা: * &s[0..5] মানে হলো স্ট্রিংয়ের শুরু থেকে ৫ নম্বর ঘরের আগে পর্যন্ত অংশটুকু নাও।

  • এখানে শুরুতে & চিহ্ন দেওয়া হয়েছে কারণ স্লাইস সবসময় একটি রেফারেন্স হয়।

  • যদি আপনি শুরু থেকে নিতে চান তবে &s[..5] লিখলেও হয়। আবার শেষ পর্যন্ত নিতে চাইলে &s[6..] লিখলেই কাজ হয়ে যায়।

কঠিন শব্দ ব্যাখ্যা:

  • Index (ইনডেক্স): প্রোগ্রামে কোনো জিনিসের সিরিয়াল নম্বর। এটি সবসময় ০ থেকে শুরু হয়।

  • Mutable (মিউটেবল): যা পরিবর্তন করা যায়।


৪. স্লাইস ব্যবহারের সুবিধা এবং মেমোরি সেফটি

ভিডিওর শেষের দিকে পিয়ুষ দেখিয়েছেন যে, যখন আমরা একটি স্লাইস ব্যবহার করি, তখন Rust আমাদের অরিজিনাল ডেটা পরিবর্তন করতে বাধা দেয়।

রেফারেন্স ভিডিও: [07:06]

যদি আপনার কোডে একটি স্লাইস একটি ভেরিয়েবলকে পয়েন্ট করে থাকে, তবে আপনি ওই ভেরিয়েবলকে clear() বা পরিবর্তন করতে পারবেন না। কারণ Rust চায় না আপনার স্লাইসটি এমন কিছুকে পয়েন্ট করুক যা আর অস্তিত্বেই নেই। একেই বলে মেমোরি সেফটি।


৫. অ্যানালাইসিস এবং আমার চিন্তাভাবনা

কন্টেন্ট ক্রিয়েটর পিয়ুষ গর্গ এখানে Rust-এর মেমোরি ম্যানেজমেন্টের সৌন্দর্য ফুটিয়ে তুলেছেন।

আমার বিশ্লেষণ ও বাস্তবতা:

  • কেন এটি ভালো: জাভাস্ক্রিপ্ট বা পাইথনের মতো ল্যাঙ্গুয়েজে আমরা অনেক সময় ডেটা ডিলিট করে দিই কিন্তু পুরনো রেফারেন্স ব্যবহার করার চেষ্টা করি, যা বড় বড় বাগ তৈরি করে। Rust এই ভুলটা হতেই দেয় না।

  • পরামর্শ: শুরুতে স্লাইসের ইনডেক্স (যেমন 0..5) হিসেব করা একটু কঠিন মনে হতে পারে। তাই সবসময় মনে রাখবেন, প্রথম সংখ্যাটি ইনক্লুসিভ (শুরু হবে এখান থেকে) এবং দ্বিতীয় সংখ্যাটি এক্সক্লুসিভ (এর আগের ঘরে শেষ হবে)।

  • বিকল্প: যারা কেবল টেক্সট প্রসেসিং করেন, তাদের জন্য &str (স্ট্রিং স্লাইস) ব্যবহার করা সবচেয়ে সেরা প্র্যাকটিস। এটি ফাংশনকে অনেক বেশি ফ্লেক্সিবল বা নমনীয় করে তোলে।

পরিশেষে বলা যায়, স্লাইস শেখা মানে হলো Rust-এর মেমোরি কন্ট্রোল করার ক্ষমতার ওপর দখল আনা। এটি আপনার কোডকে অনেক বেশি সুরক্ষিত এবং দ্রুতগামী করে তুলবে।

সোর্স ভিডিও লিংক: https://www.youtube.com/watch?v=DtG1gqORZC4

[

The Slice Type | Rust Book

Piyush Garg · 3.7K views

](http://www.youtube.com/watch?v=DtG1gqORZC4)

মন্তব্যসমূহ

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

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

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

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

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

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

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