একটি I/O প্রোজেক্ট: একটি কমান্ড লাইন প্রোগ্রাম তৈরি করা (An I/O Project: Building a Command Line Program)

এই চ্যাপ্টারটি আপনার ఇప్పటి পর্যন্ত শেখা অনেক দক্ষতার একটি সংক্ষিপ্ত পুনরালোচনা (recap) এবং আরও কিছু স্ট্যান্ডার্ড লাইব্রেরি ফিচারের অনুসন্ধান। আমরা একটি কমান্ড লাইন টুল তৈরি করব যা ফাইল এবং কমান্ড লাইন ইনপুট/আউটপুটের সাথে ইন্টারঅ্যাক্ট করে, যাতে আপনার আয়ত্তে থাকা কিছু Rust কনসেপ্ট অনুশীলন করা যায়।

Rust-এর গতি, নিরাপত্তা, একক বাইনারি আউটপুট, এবং ক্রস-প্ল্যাটফর্ম সাপোর্ট এটিকে কমান্ড লাইন টুল তৈরির জন্য একটি আদর্শ ভাষা করে তোলে। তাই আমাদের প্রোজেক্টের জন্য, আমরা ক্লাসিক কমান্ড লাইন সার্চ টুল grep (globally search a regular expression and print)-এর নিজস্ব ভার্সন তৈরি করব। সবচেয়ে সহজ ব্যবহারের ক্ষেত্রে, grep একটি নির্দিষ্ট স্ট্রিংয়ের জন্য একটি নির্দিষ্ট ফাইল অনুসন্ধান করে। এটি করার জন্য, grep তার আর্গুমেন্ট হিসাবে একটি ফাইলের পাথ (path) এবং একটি স্ট্রিং নেয়। তারপর এটি ফাইলটি পড়ে, সেই ফাইলের মধ্যে থাকা যেসব লাইনে স্ট্রিং আর্গুমেন্টটি রয়েছে সেগুলি খুঁজে বের করে এবং সেই লাইনগুলি প্রিন্ট করে।

এই চলার পথে, আমরা দেখাব কীভাবে আমাদের কমান্ড লাইন টুলটিকে টার্মিনালের সেই ফিচারগুলি ব্যবহার করতে হয় যা অন্য অনেক কমান্ড লাইন টুল ব্যবহার করে। ব্যবহারকারীকে আমাদের টুলের আচরণ কনফিগার করার অনুমতি দেওয়ার জন্য আমরা একটি এনভায়রনমেন্ট ভেরিয়েবলের মান পড়ব। আমরা স্ট্যান্ডার্ড আউটপুট (stdout)-এর পরিবর্তে স্ট্যান্ডার্ড এরর কনসোল স্ট্রিমে (stderr) ত্রুটি বার্তাগুলিও প্রিন্ট করব, যাতে, উদাহরণস্বরূপ, ব্যবহারকারী সফল আউটপুট একটি ফাইলে পুনঃনির্দেশিত (redirect) করতে পারে এবং একই সাথে স্ক্রিনে ত্রুটি বার্তাগুলি দেখতে পায়।

Rust কমিউনিটির একজন সদস্য, Andrew Gallant, ইতিমধ্যেই grep-এর একটি সম্পূর্ণ ফিচারযুক্ত, অত্যন্ত দ্রুত ভার্সন তৈরি করেছেন, যার নাম ripgrep। তুলনামূলকভাবে, আমাদের ভার্সনটি বেশ সহজ হবে, কিন্তু এই চ্যাপ্টারটি আপনাকে ripgrep-এর মতো একটি বাস্তব-বিশ্বের (real-world) প্রোজেক্ট বোঝার জন্য প্রয়োজনীয় কিছু পটভূমির জ্ঞান দেবে।

আমাদের grep প্রোজেক্টটি আপনার இதுவரை শেখা বেশ কয়েকটি কনসেপ্টকে একত্রিত করবে:

আমরা সংক্ষেপে ক্লোজার (closure), ইটারেটর (iterator) এবং ট্রেইট অবজেক্টের (trait object) সাথেও পরিচয় করিয়ে দেব, যা চ্যাপ্টার ১৩ এবং চ্যাপ্টার ১৮ তে বিস্তারিতভাবে আলোচনা করা হবে।