একটি I/O প্রজেক্ট: একটি কমান্ড লাইন প্রোগ্রাম তৈরি
এই অধ্যায়ে, আমরা এখন পর্যন্ত শেখা বিভিন্ন দক্ষতার পুনরালোচনা করব এবং আরও কিছু standard library-র ফিচার নিয়ে আলোচনা করব। আমরা একটি কমান্ড লাইন টুল তৈরি করব যা ফাইল এবং কমান্ড লাইন input/output-এর সাথে কাজ করে, যার মাধ্যমে আমরা এ পর্যন্ত শেখা Rust-এর কিছু ধারণা অনুশীলন করতে পারব।
Rust-এর স্পিড, সেফটি, single binary আউটপুট এবং ক্রস-প্ল্যাটফর্ম সাপোর্ট এটিকে কমান্ড লাইন টুল তৈরির জন্য একটি আদর্শ ল্যাঙ্গুয়েজ করে তুলেছে। তাই, আমাদের প্রজেক্টের জন্য আমরা ক্লাসিক কমান্ড লাইন সার্চ টুল grep
(globally search a regular expression and print)-এর নিজস্ব একটি সংস্করণ তৈরি করব। সবচেয়ে সহজ ক্ষেত্রে, grep
একটি নির্দিষ্ট ফাইলে একটি নির্দিষ্ট স্ট্রিং খুঁজে বের করে। এটি করার জন্য, grep
আর্গুমেন্ট হিসেবে একটি ফাইলের পাথ এবং একটি স্ট্রিং গ্রহণ করে। এরপর এটি ফাইলটি পড়ে, ফাইলের যে লাইনগুলোতে স্ট্রিং আর্গুমেন্টটি রয়েছে সেগুলো খুঁজে বের করে এবং সেই লাইনগুলো প্রিন্ট করে।
এই প্রজেক্টটি করার সময় আমরা দেখব কীভাবে আমাদের কমান্ড লাইন টুলটিতে অন্যান্য কমান্ড লাইন টুলের মতো টার্মিনালের ফিচারগুলো ব্যবহার করা যায়। আমরা একটি environment variable-এর ভ্যালু রিড করব, যাতে ইউজার আমাদের টুলের আচরণ কনফিগার করতে পারেন। আমরা error message-গুলো standard output (stdout
)-এর পরিবর্তে standard error console stream (stderr
)-এ প্রিন্ট করব। এর ফলে, উদাহরণস্বরূপ, ইউজার সফল আউটপুটকে একটি ফাইলে রিডাইরেক্ট করতে পারবেন এবং একই সাথে স্ক্রিনে error message-গুলোও দেখতে পাবেন।
Rust কমিউনিটির একজন সদস্য, Andrew Gallant, ইতোমধ্যেই grep
-এর একটি সম্পূর্ণ ফিচার সমৃদ্ধ এবং অত্যন্ত দ্রুতগতির সংস্করণ তৈরি করেছেন, যার নাম ripgrep
। তুলনামূলকভাবে, আমাদের সংস্করণটি বেশ সহজ-সরল হবে, কিন্তু এই অধ্যায়টি আপনাকে ripgrep
-এর মতো একটি বাস্তব প্রজেক্ট বোঝার জন্য প্রয়োজনীয় কিছু প্রাথমিক ধারণা দেবে।
আমাদের grep
প্রজেক্টটি আপনার শেখা বেশ কয়েকটি ধারণাকে একত্রিত করবে:
- কোড অর্গানাইজ করা (অধ্যায় ৭)
- ভেক্টর এবং স্ট্রিং ব্যবহার করা (অধ্যায় ৮)
- এরর হ্যান্ডলিং (অধ্যায় ৯)
- প্রয়োজনীয় ক্ষেত্রে ট্রেইট এবং লাইফটাইম ব্যবহার করা (অধ্যায় ১০)
- টেস্ট লেখা (অধ্যায় ১১)
এছাড়াও আমরা সংক্ষিপ্তভাবে ক্লোজার (closures), ইটারেটর (iterators) এবং ট্রেইট অবজেক্ট (trait objects) সম্পর্কে জানব, যেগুলো নিয়ে অধ্যায় ১৩ এবং অধ্যায় ১৮-তে বিস্তারিত আলোচনা করা হবে।