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

Rust-এ Unrecoverable Errors এবং panic! ম্যাজিক

Introduction

সফটওয়্যার ডেভেলপমেন্টে ভুল বা 'Error' হওয়াটা খুবই স্বাভাবিক একটা বিষয়। কিন্তু একেকটি ল্যাঙ্গুয়েজ এই ভুলগুলোকে একেকভাবে সামলায়। Rust প্রোগ্রামিং ল্যাঙ্গুয়েজে এরর হ্যান্ডলিং করার পদ্ধতি অন্য সব ল্যাঙ্গুয়েজ (যেমন: Java বা JavaScript) থেকে একটু আলাদা। Rust মূলত দুই ধরনের এরর নিয়ে কাজ করে: Recoverable (যা ঠিক করা সম্ভব) এবং Unrecoverable (যা ঠিক করা সম্ভব নয়)। আজকের এই আলোচনায় আমরা মূলত Unrecoverable Errors এবং Rust-এর বিশেষ অস্ত্র panic! ম্যাক্রো নিয়ে সহজ ভাষায় জানবো।


১. এরর হ্যান্ডলিং-এর ধারণা (Error Handling Concepts)

ভিডিও রেফারেন্স: [00:22]

প্রোগ্রামিং করার সময় আমাদের কোডে দুই ধরণের সমস্যা হতে পারে:

  1. Recoverable Errors: ধরুন আপনি একটি ফাইল খুলতে চাইলেন কিন্তু ফাইলটি নেই। এক্ষেত্রে প্রোগ্রাম ক্রাশ না করে ইউজারকে বলা যেতে পারে যে ফাইলটি খুঁজে পাওয়া যায়নি।

  2. Unrecoverable Errors: এটি এমন একটি সমস্যা যেখানে প্রোগ্রাম আর সামনে এগোতে পারে না। যেমন: একটি এরে (Array)-তে ৩টি আইকন আছে কিন্তু আপনি ১০০ নম্বর আইকনটি দেখতে চাইছেন। এটি একটি 'Bug', যা ঠিক না করলে প্রোগ্রাম চালানো সম্ভব নয়।

আমার ভাবনা: অনেক ল্যাঙ্গুয়েজে try-catch ব্যবহার করে সব ধরণের ভুলকে একসাথে সামলানো হয়, কিন্তু Rust আপনাকে শুরুতেই বলে দেয় কোন ভুলটি আপনি ঠিক করতে পারবেন আর কোনটি পারবেন না। এতে কোড অনেক বেশি শক্তিশালী (Robust) হয়।


২. panic! ম্যাক্রো কী? (What is panic! Macro?)

ভিডিও রেফারেন্স: [02:45]

যখন Rust-এ এমন কোনো সমস্যা হয় যেখান থেকে আর ফিরে আসার উপায় নেই, তখন Rust panic! ম্যাক্রো ব্যবহার করে। এটি কল হওয়ার সাথে সাথে প্রোগ্রামটি তৎক্ষণাৎ বন্ধ হয়ে যায় এবং একটি এরর মেসেজ দেখায়।

সহজ ভাষায় ব্যাখ্যা:

  • Panic: এর অর্থ হলো প্রোগ্রামটি 'আতঙ্কিত' হয়ে পড়েছে এবং সে আর কাজ করতে পারছে না, তাই সে নিজেকে বন্ধ করে দিচ্ছে।

  • Macro: Rust-এ যেগুলোর শেষে ! চিহ্ন থাকে (যেমন: println!, panic!), সেগুলোকে ম্যাক্রো বলা হয়। এগুলো সাধারণ ফাংশনের চেয়ে একটু বেশি শক্তিশালী।


৩. প্যানিক করার উপায় এবং কোড উদাহরণ (Ways to Panic)

ভিডিও রেফারেন্স: [04:53]

আমরা দুইভাবে প্যানিক ঘটাতে পারি:

  1. নিজে থেকে কল করে: যখন আমরা জানি যে এখানে সমস্যা হতে পারে।

  2. ভুল অ্যাকশন নিলে: যেমন এরে-র সীমানার বাইরে কিছু অ্যাক্সেস করা।

কোড উদাহরণ ১ (সরাসরি প্যানিক):

Rust

fn main() {
    println!("Hello, World!");
    
    // সরাসরি প্যানিক কল করা
    panic!("এইখানে একটি বড় সমস্যা হয়েছে!"); 

    // নিচের লাইনটি কখনোই কাজ করবে না
    println!("এই লাইনটি প্রিন্ট হবে না।");
} 

ব্যাখ্যা: এই কোডটি রান করলে প্রথমে "Hello, World!" প্রিন্ট হবে, তারপর panic! লাইনটিতে এসে প্রোগ্রাম ক্রাশ করবে এবং পরের প্রিন্ট লাইনটি আর কাজ করবে না।

কোড উদাহরণ ২ (ইন্ডেক্স আউট অফ বাউন্ড):

Rust

fn main() {
    let v = vec![1, 2, 3]; // এখানে ৩টি উপাদান আছে

    // ৯৯ নম্বর ইন্ডেক্স ধরার চেষ্টা করছি যা নেই
    println!("উপাদানটি হলো: {}", v[99]); 
} 

ব্যাখ্যা: যেহেতু ভেক্টরটিতে মাত্র ৩টি উপাদান আছে, ৯৯ নম্বর উপাদান খুঁজতে গেলে Rust স্বয়ংক্রিয়ভাবে panic! করবে কারণ এটি মেমরির জন্য নিরাপদ নয়।


৪. স্ট্যাক আনওয়াইন্ডিং বনাম অ্যাবোর্টিং (Unwinding vs Aborting)

ভিডিও রেফারেন্স: [03:29]

যখন প্যানিক হয়, Rust ডিফল্টভাবে Unwinding শুরু করে। এর মানে হলো সে প্রোগ্রামের মেমরিগুলো ধীরে ধীরে পরিষ্কার করে তারপর বন্ধ হয়। কিন্তু আপনি চাইলে সরাসরি Abort করতে পারেন, অর্থাৎ কোনো পরিষ্কার ছাড়াই সাথে সাথে বন্ধ। এটি করলে প্রোগ্রামের সাইজ ছোট হয়।

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

  • Stack Unwinding: প্রোগ্রাম বন্ধ হওয়ার আগে সবকিছু গুছিয়ে রাখা।

  • Abort: কোনো কিছু না গুছিয়ে সরাসরি বের হয়ে যাওয়া।


বিশ্লেষণ ও শেষ কথা

Rust-এর এই panic! সিস্টেমটি তৈরিই করা হয়েছে যাতে ডেভেলপাররা ভুল কোড লিখে পার না পায়। পিয়ুশ গর্গ এই ভিডিওতে চমৎকারভাবে বুঝিয়েছেন যে কীভাবে অনিরাময়যোগ্য ভুলগুলো হ্যান্ডেল করতে হয়।

আমার বিশ্লেষণ: বাস্তব জীবনে আমরা যখন কোড করি, তখন সবসময় panic! ব্যবহার করা উচিত নয়। এটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন কোনো লজিক্যাল বাগ থাকে যা প্রোগ্রামের জন্য বিপজ্জনক। সাধারণ ভুলের জন্য (যেমন ভুল ইউজার ইনপুট) আমাদের Result টাইপ ব্যবহার করা উচিত, যা নিয়ে পরবর্তী পর্বে আলোচনা করা হবে।

পরামর্শ: আপনি যদি কোনো লাইব্রেরি তৈরি করেন, তবে panic! কম ব্যবহার করার চেষ্টা করুন। কারণ আপনার লাইব্রেরি ব্যবহারকারী হয়তো চাইবেন না তার পুরো অ্যাপ আপনার একটি ভুলের জন্য ক্রাশ করুক। পরিবর্তে তাকে এরর মেসেজ দিন যাতে সে নিজেই সিদ্ধান্ত নিতে পারে সে কী করবে।

বিকল্প: যদি আপনি চান এরে অ্যাক্সেস করার সময় প্রোগ্রাম ক্রাশ না করুক, তবে .get() মেথড ব্যবহার করতে পারেন যা প্যানিক করার বদলে Option রিটার্ন করে।

[

Unrecoverable Errors with panic! | Rust Book

Piyush Garg · 1.6K views

](http://www.youtube.com/watch?v=z-gg_q6MsF0)

মন্তব্যসমূহ

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

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

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

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

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

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

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