সূচনা (Introduction)
দ্রষ্টব্য: এই বইয়ের এই সংস্করণটি No Starch Press থেকে ছাপানো এবং ই-বুক আকারে পাওয়া The Rust Programming Language বইটির অনুরূপ।
The Rust Programming Language বইটিতে আপনাকে স্বাগতম। এটি Rust প্রোগ্রামিং ভাষা সম্পর্কে একটি প্রাথমিক ধারণা দেয়। Rust প্রোগ্রামিং ল্যাঙ্গুয়েজ আপনাকে দ্রুত এবং নির্ভরযোগ্য সফটওয়্যার লিখতে সাহায্য করে। প্রোগ্রামিং ল্যাঙ্গুয়েজ ডিজাইনের ক্ষেত্রে, উচ্চ-স্তরের এরগোনোমিক্স (ergonomics) এবং নিম্ন-স্তরের কন্ট্রোল প্রায়শই একসাথে পাওয়া যায় না, কিন্তু Rust এই দ্বন্দ্বের সমাধান করে। একদিকে যেমন এটি শক্তিশালী প্রযুক্তিগত ক্ষমতা দেয়, তেমনই ডেভেলপারদের জন্য একটি দুর্দান্ত অভিজ্ঞতাও প্রদান করে। Rust-এর মাধ্যমে আপনি মেমরি ব্যবহারের মতো নিম্ন-স্তরের বিষয়গুলোকেও সহজে নিয়ন্ত্রণ করতে পারবেন, যা সাধারণত অনেক জটিলতার সাথে জড়িত থাকে।
কাদের জন্য Rust? (Who Rust Is For)
Rust বিভিন্ন কারণে অনেকের জন্যই উপযুক্ত। আসুন, এর মধ্যে কয়েকটি প্রধান দল/গোষ্ঠী সম্পর্কে জেনে নিই।
ডেভেলপারদের দল (Teams of Developers)
সিস্টেম প্রোগ্রামিং সম্পর্কে কম-বেশি জ্ঞান রাখা বড় ডেভেলপার দলগুলোর মধ্যে সহযোগিতার জন্য Rust একটি কার্যকর টুল হিসেবে প্রমাণিত। নিম্ন-স্তরের কোডে নানা ধরনের সূক্ষ্ম বাগ (bug) থাকার সম্ভাবনা থাকে। অন্যান্য ল্যাঙ্গুয়েজে এই বাগগুলো ধরতে প্রচুর টেস্টিং এবং অভিজ্ঞ ডেভেলপারদের কোড রিভিউ প্রয়োজন হয়। কিন্তু Rust-এ, কম্পাইলার নিজেই এই ধরনের বাগ থাকা কোড কম্পাইল করতে বাধা দেয়, যার মধ্যে concurrency বাগ-ও রয়েছে। কম্পাইলারের সাথে মিলেমিশে কাজ করার ফলে ডেভেলপারদের দল বাগ খোঁজার বদলে প্রোগ্রামের লজিকের দিকে বেশি মনোযোগ দিতে পারে।
Rust সিস্টেম প্রোগ্রামিংয়ের জগতে আধুনিক সব ডেভেলপার টুল নিয়ে এসেছে:
- Cargo হল একটি অন্তর্নির্মিত dependency ম্যানেজার এবং বিল্ড টুল। এটি Rust ইকোসিস্টেমের মধ্যে dependency যোগ করা, কম্পাইল করা এবং সেগুলোকে ম্যানেজ করা সহজ করে তোলে।
- Rustfmt টুলটি ডেভেলপারদের মধ্যে কোডিং স্টাইলের সামঞ্জস্য বজায় রাখতে সাহায্য করে।
- rust-analyzer কোড কমপ্লিশন এবং ইনলাইন এরর মেসেজের জন্য ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDE) ইন্টিগ্রেশনকে আরও শক্তিশালী করে তোলে।
Rust ইকোসিস্টেমের এই টুলগুলো এবং অন্যান্য টুল ব্যবহার করে ডেভেলপাররা সিস্টেম-লেভেল কোড লেখার সময় নিজেদের উৎপাদনশীলতা বজায় রাখতে পারে।
শিক্ষার্থী (Students)
যারা সিস্টেম কনসেপ্ট সম্পর্কে জানতে আগ্রহী, Rust সেই সব শিক্ষার্থী এবং ব্যক্তিদের জন্য। Rust ব্যবহার করে অনেকেই অপারেটিং সিস্টেম ডেভেলপমেন্টের মতো বিভিন্ন বিষয় শিখেছেন। এখানকার কমিউনিটি খুবই বন্ধুত্বপূর্ণ এবং শিক্ষার্থীদের প্রশ্নের উত্তর দিতে তারা সব সময়েই প্রস্তুত। এই বইটির মতো বিভিন্ন উদ্যোগের মাধ্যমে, Rust টিম সিস্টেমের ধারণাগুলোকে আরও বেশি মানুষের কাছে, বিশেষ করে যারা প্রোগ্রামিংয়ে নতুন, তাদের কাছে পৌঁছে দিতে চায়।
কোম্পানি (Companies)
ছোট-বড় কয়েকশো কোম্পানি তাদের প্রোডাকশনে বিভিন্ন ধরনের কাজের জন্য Rust ব্যবহার করে। এই কাজগুলোর মধ্যে রয়েছে কমান্ড লাইন টুল, ওয়েব সার্ভিস, DevOps টুলিং, এমবেডেড ডিভাইস, অডিও ও ভিডিও অ্যানালিসিস এবং ট্রান্সকোডিং, ক্রিপ্টোকারেন্সি, বায়োইনফরমেটিক্স, সার্চ ইঞ্জিন, ইন্টারনেট অফ থিংস অ্যাপ্লিকেশন, মেশিন লার্নিং, এমনকি ফায়ারফক্স (Firefox) ওয়েব ব্রাউজারের প্রধান কিছু অংশ।
ওপেন সোর্স ডেভেলপার (Open Source Developers)
যারা Rust প্রোগ্রামিং ল্যাঙ্গুয়েজ, কমিউনিটি, ডেভেলপার টুল এবং লাইব্রেরি তৈরি করতে চান, Rust তাদের জন্য। আপনি যদি Rust ল্যাঙ্গুয়েজে অবদান রাখেন তবে আমরা অত্যন্ত খুশি হব।
যারা গতি এবং স্থিতিশীলতাকে গুরুত্ব দেন (People Who Value Speed and Stability)
যারা একটি প্রোগ্রামিং ল্যাঙ্গুয়েজে গতি এবং স্থিতিশীলতা দুটোই চান, Rust তাদের জন্য। এখানে গতি বলতে বোঝানো হয়েছে, Rust কোড কত দ্রুত চলতে পারে এবং আপনি কত দ্রুত Rust ব্যবহার করে প্রোগ্রাম লিখতে পারেন। Rust-এর কম্পাইলার বিভিন্ন চেকের মাধ্যমে ফিচার যোগ এবং রিফ্যাক্টরিং (refactoring) করার সময় কোডের স্থায়িত্ব নিশ্চিত করে। অন্যান্য ল্যাঙ্গুয়েজে যেখানে এই ধরনের চেক থাকে না, সেখানে পুরনো কোড পরিবর্তন করতে ডেভেলপাররা প্রায়ই ভয় পান। অন্যদিকে, Rust চেষ্টা করে "শূন্য-খরচের অ্যাবস্ট্রাকশন" তৈরি করতে। এর মানে হল, উচ্চ-স্তরের ফিচারগুলো এমনভাবে নিম্ন-স্তরের কোডে কম্পাইল হবে, যেন মনে হয় সেগুলো হাতে লেখা হয়েছে এবং এর জন্য বাড়তি কোনো খরচ হবে না। Rust-এর লক্ষ্য হল নিরাপদ কোডকে দ্রুতগতির কোডে পরিণত করা।
Rust ল্যাঙ্গুয়েজ আরও অনেক ব্যবহারকারীকে সমর্থন করার আশা রাখে; উপরে যাদের উল্লেখ করা হয়েছে তারা কেবল প্রধান স্টেকহোল্ডারদের মধ্যে কয়েকজন। Rust-এর মূল লক্ষ্য হল নিরাপত্তা এবং উৎপাদনশীলতা, গতি এবং এরগোনোমিক্স (ergonomics) একসাথে সরবরাহ করে প্রোগ্রামারদের এতদিন ধরে যে আপস করতে হয়েছে সেটা দূর করা। Rust ব্যবহার করে দেখুন এবং এর বৈশিষ্ট্যগুলো আপনার জন্য কতটা উপযোগী তা যাচাই করুন।
এই বইটি কাদের জন্য (Who This Book Is For)
এই বইটি লেখার সময় ধরে নেওয়া হয়েছে যে আপনি অন্য কোনো প্রোগ্রামিং ল্যাঙ্গুয়েজে কোড লিখেছেন, তবে সেটি কোন ল্যাঙ্গুয়েজ তা নির্দিষ্ট করা হয়নি। আমরা চেষ্টা করেছি বইটির বিষয়বস্তু যাতে বিভিন্ন প্রোগ্রামিং ব্যাকগ্রাউন্ডের ব্যক্তিরা সহজে বুঝতে পারেন। প্রোগ্রামিং কী বা এটি নিয়ে কীভাবে চিন্তা করতে হয়, সে বিষয়ে আমরা খুব বেশি আলোচনা করিনি। আপনি যদি প্রোগ্রামিংয়ে একেবারে নতুন হন, তবে আপনার জন্য এমন একটি বই পড়া ভালো হবে যেখানে প্রোগ্রামিংয়ের প্রাথমিক বিষয়গুলো নিয়ে আলোচনা করা হয়েছে।
এই বইটি কীভাবে ব্যবহার করবেন (How to Use This Book)
সাধারণভাবে, ধরে নেওয়া হয়েছে যে আপনি এই বইটি শুরু থেকে শেষ পর্যন্ত ধারাবাহিকভাবে পড়বেন। পরের দিকের চ্যাপ্টারগুলো আগের চ্যাপ্টারের ধারণার ওপর ভিত্তি করে লেখা হয়েছে। আবার, কোনো কোনো ক্ষেত্রে আগের চ্যাপ্টারে কোনো বিষয়ের বিস্তারিত আলোচনা না থাকলেও পরের চ্যাপ্টারে সেই বিষয়ে ফিরে আসা হয়েছে।
এই বইটিতে আপনি দুই ধরনের চ্যাপ্টার পাবেন: কনসেপ্ট (ধারণা) চ্যাপ্টার এবং প্রোজেক্ট চ্যাপ্টার। কনসেপ্ট চ্যাপ্টারে আপনি Rust-এর কোনো একটি দিক সম্পর্কে জানতে পারবেন। প্রোজেক্ট চ্যাপ্টারে, আমরা একসাথে ছোট ছোট প্রোগ্রাম তৈরি করব এবং সেখানে আপনি যা শিখেছেন তা প্রয়োগ করার সুযোগ পাবেন। ২, ১২ এবং ২১ নম্বর চ্যাপ্টারগুলো হল প্রোজেক্ট চ্যাপ্টার; বাকিগুলো কনসেপ্ট চ্যাপ্টার।
চ্যাপ্টার ১-এ Rust ইন্সটল করার পদ্ধতি, “Hello, world!” প্রোগ্রাম লেখার নিয়ম এবং Rust-এর প্যাকেজ ম্যানেজার ও বিল্ড টুল Cargo ব্যবহারের উপায় বলা হয়েছে। চ্যাপ্টার ২-তে Rust দিয়ে একটি প্রোগ্রাম লেখার হাতে-কলমে অভিজ্ঞতা দেওয়া হয়েছে, যেখানে আপনি একটি সংখ্যা অনুমান করার গেম তৈরি করবেন। এখানে আমরা বিভিন্ন কনসেপ্ট নিয়ে ওপর-ওপর আলোচনা করেছি, পরের চ্যাপ্টারগুলোতে বিস্তারিত আলোচনা করা হবে। আপনি যদি শুরুতেই হাতে-কলমে কিছু করতে চান, তাহলে চ্যাপ্টার ২ আপনার জন্য। চ্যাপ্টার ৩-এ Rust-এর এমন সব ফিচার নিয়ে আলোচনা করা হয়েছে, যেগুলো অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজের মতোই। চ্যাপ্টার ৪-এ আপনি Rust-এর ownership সিস্টেম সম্পর্কে জানতে পারবেন। আপনি যদি এমন কেউ হন যিনি প্রতিটি খুঁটিনাটি বিষয় না জেনে এগোতে চান না, তাহলে আপনি চ্যাপ্টার ২ বাদ দিয়ে সরাসরি চ্যাপ্টার ৩-এ চলে যেতে পারেন। তারপর যখন আপনি নিজের শেখা বিষয়গুলো কাজে লাগিয়ে কোনো প্রোজেক্টে কাজ করতে চাইবেন, তখন চ্যাপ্টার ২-এ ফিরে আসতে পারেন।
চ্যাপ্টার ৫-এ structs এবং methods নিয়ে আলোচনা করা হয়েছে। চ্যাপ্টার ৬-এ রয়েছে enums, match
এক্সপ্রেশন এবং if let
কন্ট্রোল ফ্লো কনস্ট্রাক্ট। Rust-এ আপনি কাস্টম টাইপ তৈরি করার জন্য structs এবং enums ব্যবহার করবেন।
চ্যাপ্টার ৭-এ আপনি Rust-এর মডিউল সিস্টেম এবং আপনার কোড ও এর পাবলিক অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (API) সাজানোর জন্য প্রাইভেসি রুলস সম্পর্কে জানতে পারবেন। চ্যাপ্টার ৮-এ স্ট্যান্ডার্ড লাইব্রেরিতে থাকা কিছু কমন কালেকশন ডেটা স্ট্রাকচার, যেমন ভেক্টর, স্ট্রিং এবং হ্যাশ ম্যাপ নিয়ে আলোচনা করা হয়েছে। চ্যাপ্টার ৯-এ Rust-এর এরর-হ্যান্ডলিংয়ের ফিলোসফি এবং টেকনিকগুলো আলোচনা করা হয়েছে।
চ্যাপ্টার ১০-এ জেনেরিকস (generics), ট্রেইটস (traits) এবং লাইফটাইম (lifetimes) নিয়ে বিস্তারিত আলোচনা করা হয়েছে, যা আপনাকে এমন কোড লেখার ক্ষমতা দেয় যা একাধিক টাইপের জন্য ব্যবহার করা যায়। চ্যাপ্টার ১১-এর মূল বিষয় হল টেস্টিং। Rust-এর নিজস্ব নিরাপত্তা ব্যবস্থা থাকা সত্ত্বেও আপনার প্রোগ্রামের লজিক ঠিক আছে কিনা, তা নিশ্চিত করার জন্য টেস্টিং প্রয়োজন। চ্যাপ্টার ১২-তে আমরা grep
কমান্ড লাইন টুলের কার্যকারিতার একটি অংশ নিজেরা তৈরি করব, যেটি ফাইলগুলোর মধ্যে টেক্সট খুঁজে বের করে। এর জন্য আমরা আগের চ্যাপ্টারগুলোতে আলোচনা করা অনেক কনসেপ্ট ব্যবহার করব।
চ্যাপ্টার ১৩-তে ক্লোজার (closures) এবং ইটারেটর (iterators) নিয়ে আলোচনা করা হয়েছে। এগুলো Rust-এর এমন কিছু ফিচার যেগুলো ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজ থেকে নেওয়া হয়েছে। চ্যাপ্টার ১৪-তে আমরা Cargo নিয়ে আরও বিস্তারিত আলোচনা করব এবং অন্যদের সাথে আপনার লাইব্রেরি শেয়ার করার সেরা উপায়গুলো জানব। চ্যাপ্টার ১৫-তে স্ট্যান্ডার্ড লাইব্রেরির স্মার্ট পয়েন্টার এবং সেই পয়েন্টারগুলোর কার্যকারিতার জন্য দায়ী ট্রেইটগুলো নিয়ে আলোচনা করা হয়েছে।
চ্যাপ্টার ১৬-তে আমরা কনকারেন্ট প্রোগ্রামিংয়ের বিভিন্ন মডেল নিয়ে আলোচনা করব এবং Rust কীভাবে আপনাকে নির্ভয়ে মাল্টিপল থ্রেডে প্রোগ্রাম করতে সাহায্য করে, সে বিষয়ে কথা বলব। চ্যাপ্টার 17-এ আমরা Rust-এর async এবং await সিনট্যাক্স এবং এরা যে লাইটওয়েট কনকারেন্সি মডেল সমর্থন করে সে বিষয়ে জানবো।
চ্যাপ্টার ১৮-তে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের যে প্রিন্সিপালগুলোর সঙ্গে আপনি হয়তো পরিচিত, Rust-এর ইডিয়ামগুলো সেগুলোর থেকে কতটা আলাদা, তা দেখানো হয়েছে।
চ্যাপ্টার ১৯ হল প্যাটার্ন এবং প্যাটার্ন ম্যাচিং-এর একটি রেফারেন্স। Rust প্রোগ্রামগুলোতে আইডিয়া প্রকাশের জন্য এগুলো খুবই শক্তিশালী উপায়। চ্যাপ্টার ২০-তে আরও কিছু অ্যাডভান্সড বিষয় নিয়ে আলোচনা করা হয়েছে, যেমন আনসেফ (unsafe) Rust, ম্যাক্রো (macros), এবং লাইফটাইম, ট্রেইট, টাইপ, ফাংশন ও ক্লোজার সম্পর্কে আরও বিস্তারিত তথ্য।
চ্যাপ্টার ২১-এ আমরা একটি প্রোজেক্ট শেষ করব, যেখানে আমরা একটি নিম্ন-স্তরের মাল্টিথ্রেডেড ওয়েব সার্ভার তৈরি করব!
সবশেষে, কিছু অ্যাপেন্ডিক্সে (appendices) ল্যাঙ্গুয়েজটি সম্পর্কে আরও কিছু দরকারী তথ্য দেওয়া হয়েছে, যেগুলো অনেকটা রেফারেন্সের মতো কাজ করবে। Appendix A-তে Rust-এর কীওয়ার্ড, Appendix B-তে Rust-এর অপারেটর ও সিম্বল, Appendix C-তে স্ট্যান্ডার্ড লাইব্রেরি থেকে পাওয়া ডিরাইভেবল ট্রেইট, Appendix D-তে কিছু দরকারী ডেভেলপমেন্ট টুল এবং Appendix E-তে Rust-এর এডিশনগুলো নিয়ে আলোচনা করা হয়েছে। Appendix F-এ আপনি বইটির অন্যান্য অনুবাদ খুঁজে পাবেন এবং Appendix G-এ আমরা Rust কীভাবে তৈরি হয়েছে এবং নাইটলি Rust কী, সে বিষয়ে আলোচনা করব।
এই বইটি পড়ার কোনো নির্দিষ্ট নিয়ম নেই: আপনি যদি কোনো অংশ বাদ দিয়ে এগিয়ে যেতে চান, তাহলে যেতে পারেন! তবে কোনো কিছু বুঝতে অসুবিধা হলে আপনাকে হয়তো আগের চ্যাপ্টারগুলোতে ফিরে যেতে হতে পারে। আপনার যেভাবে সুবিধা হয়, সেভাবেই পড়ুন।
Rust শেখার প্রক্রিয়ার একটি গুরুত্বপূর্ণ অংশ হল কম্পাইলারের দেখানো এরর মেসেজগুলো পড়তে শেখা। এই মেসেজগুলোই আপনাকে সঠিক কোডের দিকে নিয়ে যাবে। তাই, আমরা এখানে অনেক উদাহরণ দিয়েছি যেখানে কোড কম্পাইল হবে না এবং প্রতিটি ক্ষেত্রে কম্পাইলার আপনাকে কী এরর মেসেজ দেখাবে, সেটাও বলা হয়েছে। মনে রাখবেন, আপনি যদি কোনো একটি উদাহরণ নিয়ে কাজ করেন, তাহলে সেটি কম্পাইল নাও হতে পারে! আপনি যে উদাহরণটি নিয়ে কাজ করছেন, সেটি এরর দেওয়ার জন্য তৈরি কিনা, তা বোঝার জন্য আশেপাশের লেখাগুলো অবশ্যই পড়বেন। যেসব কোড কাজ করার কথা নয়, Ferris সেগুলোকে আলাদা করতে আপনাকে সাহায্য করবে:
Ferris | অর্থ (Meaning) |
---|---|
এই কোড কম্পাইল হবে না! | |
এই কোড প্যানিক (panic) করবে! | |
এই কোড প্রত্যাশিত আচরণ করবে না। |
বেশিরভাগ ক্ষেত্রে, যেসব কোড কম্পাইল হয় না, সেগুলোর সঠিক ভার্সন কোনটি, তা আমরা আপনাকে দেখিয়ে দেব।
সোর্স কোড (Source Code)
এই বইটি তৈরি করার জন্য যে সোর্স ফাইলগুলো ব্যবহার করা হয়েছে, সেগুলো GitHub-এ পাওয়া যাবে।