Rust প্রোগ্রামিং পর্ব ০১ - কেন শিখবো Rust?

Published on
-12 min read

সূচীপত্র

নোটঃ

একটা সিরিজ টিউটোরিয়াল তৈরি করবো ভাবছি। সেখান থেকে আমরা আজকে আমরা শুধু Rust এ্যাজ এ ল্যাঙ্গুয়েজ জানার চেষ্টা করবো। কোন কোডিং বা টেকনিক্যাল কিছু দেখাবো না। এখানে মূলত ল্যাঙ্গুয়েজ সম্পর্কে আলাপ আলোচনা করবো। যদি বোরিং আলোচনা লাগে তাহলে স্কিপ করে পরবর্তী অংশে চলে যেতে পারেন।

কেউ এই ফাতরা আলোচনা?

আসলে আমরা প্রোগ্রামাররা কোডিং ছাড়া এধরনের আলাপ আলোচনা পড়তে বা শিখতে খুব একটা পছন্দ করি না। আমরা হলাম "কথা কম, কোড বেশি"-জাতি।

talk is cheap, show me the code

"কথা কম, কোড বেশি"

আমি নিজেও এই দলে। কিন্তু আসলে Rust-এ এসে বেশ কিছু বিষয়ে আলাপ আলোচনা না করলে পুরো বিষয়টা ভালো ভাবে বুঝতে পারা যায় না। অনেক কিছুই মনে হবে, কি দরকার ছিল এত ঘুরায়ে পেঁচায়ে কোড লেখার? এই যে এই প্রশ্নটা মনে হবে এটার উত্তরের জন্যই এই আলাপ আলোচনার আয়োজন।

ভূমিকা জাতীয় কথাবার্তা

প্রতিটি প্রোগ্রামিং ল্যাঙ্গুয়েজই কোন না কোন পারপাসে বানানো হয়। যেমন, PHP তৈরি করা হয়েছিলো HTML-কে ডাইনামিক একটা লুক দিতে। Javascript এসেছে ওয়েবসাইট-কে ইন্টারেক্টিভ তৈরি করতে। এভাবে Python তৈরি হয়েছে ম্যাথমেটিশিয়ান-রা যাতে সহজে প্রোগ্রাম লিখতে পারে...ইত্যাদি ইত্যাদি। এজন্য পাইথনে রিসার্চ টাইপ প্রোজেক্ট বেশি পাওয়া যায়, PHP-তে ওয়েব রিলেটেড প্রজেক্ট, Javascript-এ ফ্রন্টএন্ড বা ইন্টারেক্টিভ প্রজেক্ট বেশি দেখা যায়।

এখন জাভাস্ক্রিপ্ট দিয়েও AI-ML-Robotics এর প্রজেক্টও করা যেতে পারে কিন্তু এতে করে ল্যাঙ্গুয়েজ সাপোর্ট, কমিউনিটি সাপোর্ট-ইত্যাদি ভালো পাওয়া যাবে না। এক্ষেত্রে তুলনামূলকভাবে পাইথনে যে সাপোর্টটা পাওয়া যাবে। সেইম ভাবে, Python দিয়েও এ্যাড্রোয়েড এ্যাপ্লিকেশন তৈরি করা যাবে কিন্তু এতে আপনার যে বেগ পোহাতে হবে তুলনামূলক ভাবে কটলিন, সুইফট বা ডার্ট ল্যাঙ্গুয়েজে পেতে হবে না।

এক্ষেত্রে জাভাস্ক্রিপ্ট কিছুটা ব্যাতিক্রম, যেহুতু জাভাস্ক্রিপ্ট খুব জনপ্রিয় ল্যাঙ্গুয়েজ ব্রাউজারের জন্য তাই এটি দিয়ে আনায়াসে আপনি ফ্রন্টএন্ড, ব্যাকএন্ড ইত্যাদি এধরনের কাজ করতে পারবেন।

এই আলোচনার মূল উদ্দেশ্য হলো, প্রতিটি টুলস টেকনোলজি একেকটা উদ্দেশ্য নিয়ে তৈরি করা হয়ে থাকে। পরবর্তীতে সেগুলো ইভলভ করে অন্যান্য ক্ষেত্রেও ইউজ হয়ে থাকে। আসুন একটি Meme দেখিঃ programming meme

তাহলে Rust এর উদ্দ্যেশ্য কি? ২০১০ সালে মজিলা মূলত এই ল্যাঙ্গুজটি তৈরি করে। C এবং C++ এর অলটারনেটিভ হিসেবে। কেন? কারণ C প্রোগ্রামে মেমরি ম্যানেজ করা বেশ কঠিন এবং যারা C-তে বড় কোন প্রোগ্রাম লিখেছেন এবং মাল্টিপল মেশিনে বিল্ড করেছেন তারা হয়তো কখনো না কখনো Invalid Memory Access অথবা Segmentation Failure এর সম্মুখীন হয়েছেন। এজন্য মূলত Rust প্রোগ্রামে ম্যানুয়াল মেমরি ম্যানেজ করা হয়। আমরা বিস্তারিত জানবো মেমরি ম্যানেজমেন্ট এবং Borrow Checker নিয়ে।

Rust প্রোগ্রামের ফিলসফি

যেকোনো ল্যাঙ্গুয়েজের ক্ষেত্রে সেই প্রোগ্রামিং ল্যাঙ্গুয়েজ তৈরির পেছনের ফিলসফিটা জানা দরকার। তাহলে আপনি ওই প্রোগ্রামের মত করে ভাবতে পারবেন।

আমরা জানি দুই রকমের প্রোগ্রামিং ল্যাঙ্গুয়েজ হয়ঃ

  • ১। কমপ্লাইড (পুরো প্রোগ্রাম একসাথে কম্পাইল হয়ে বাইনারি রান করে থাকে)
  • ২। ইন্টারপ্রেটেড (পুরো প্রোগ্রাম একসাথে কম্পাইল না হয়ে অন্য লাইন বাই লাইন ইন্টারপ্রেট করে এক্সিকিউট করে)

কম্পাইলড ল্যাঙ্গুয়েজ হচ্ছেঃ C, C++, Golang, Rust, Java, C#, Kotlin, Swift ইত্যাদি ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ হচ্ছেঃ Python, Javascript, PHP, Ruby, Lua ইত্যাদি

কম্পাইলড ল্যাঙ্গুয়েজগুলোর ন্যাচার থাকে একরকম ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ গুলো অন্য রকম। যেমন, যে ল্যাঙ্গুয়েজগুলো কম্পাইল হয় সেগুলো সাধারণত স্ট্যাটিক টাইপড হয়ে থাকে। আর যে ল্যাঙ্গুয়েজগুলো ইন্টারপ্রেটেড সেগুলো ডাইনামিক টাইপড হয়ে থাকে। তবে কিছুক্ষেত্রে সুপারসেট এ্যাড করে স্টাটাইক টাইপ করা যায় টাইপস্ক্রিপ্ট, আবার কটলিন-কে ইন্টারপ্রেটের মুডে রান করে (স্ক্রিপ্টিং) কিছুটা স্টাটাইক/স্ট্রং টাইপড তৈরি করা যায়।

যাহোক, Rust এর আলোচনায় ফিরে আসি।

Rust তৈরি করা হয়েছে C++ এর অলটারনেটিভ হিসেবে যা মূলত C++ এর মত হাই পারফরম্যেন্স দিবে কিন্তু সেই সাথে মেমরি সেইফও হবে। এখানে এই দুটো বিষয় একসাথে চাওয়াটা চ্যালেঞ্জিং। কারণ মেমরি সেইফ হতে হলে গার্বেজ কালেক্টর লাগবে। আর গার্বেজ কালেক্টর থাকলে রানটাইম কিছুটা হেভি হবে। এবং প্রোগ্রাম কিছুটা স্লো-ও হতে পারে। আবার মেমরি যদি পুরোপুরি প্রোগ্রামারের হাতে দায়িত্ব দিয়ে দেই(C/C++ এর মত) তাহলে মেমরি লিক হওয়ার রিস্ক থেকে যায়।

এখানে Rust একটা চমৎকার সিদ্ধান্ত নিয়েছে। মাঝামাঝি একটা মডেল নিয়ে এসেছে মেমরি চেকিং -এ যাকে আমরা Borrow Checker নামে জানি। এই ওয়ার্ড-টা আমি মাঝে মাঝেই বলতে থাকবো কারণ এটার সাথে পরিচিত হওয়া এবং মনে রাখা খুবই গুরুত্বপূর্ন। এটার জন্যই মানুষজন Rust ল্যাঙ্গুয়েজকে এত পছন্দ করে এবং নতুনরা যুদ্ধ করে!

Rust দিয়ে কি কি করা যাবে?

সংক্ষেপে C/C++ দিয়ে যা করা যায় সবই আপনি করতে পারবেন। যেমন,

  • ওয়েব ব্রাউজার তৈরি করা
  • নতুন আরেকটা প্রোগ্রামিং ল্যাঙ্গুয়েজ তৈরি করা
  • অন্য কোন প্রোগ্রামিং ল্যাঙ্গুয়েজের রানটাইম তৈরি করা
  • ওয়েব সার্ভার, রিভার্স প্রক্সি সার্ভার (nginx/apache) তৈরি করা
  • গেম ডেভলপমেন্ট বা গেম ইঞ্জিন তৈরি করা
  • ডেস্কটপ এ্যাপ্লিকেশন তৈরি করা
  • অপারেটিং সিস্টেম তৈরি করা
  • লিনাক্সের কার্নেল ইম্প্রুভ করা

এছাড়া,ব্যাকেন্ড এ্যাপ্লিকেশন, ডেটাবেজ,নেটওয়ার্ক বা সার্ভার ইনফ্রাস্ট্রাকচার ডেভলপ করা তো থাকছেই।

ইত্যাদি ইত্যাদি....

Rust কি কি বেনিফিট/সুবিধা দিচ্ছে?

টাইপ সিস্টেমঃ

Rust একটি স্ট্রং টাইপড ল্যাঙ্গুয়েজ। মানে এখানে সব কিছুর টাইপ ডিফাইন করা থাকতে হবে। ভেরিয়েবল, ফাংশন এর প্যারামিটার, রিটার্ন টাইপ ইত্যাদি সব কিছুর নিদৃষ্ট টাইপ বলে দিতে হবে। যারা জাভা, সি শার্প, সি/সি++ ল্যাঙ্গুয়েজে অভিজ্ঞতা আছে তাদের জন্য এটা নতুন কিছু না। তবে যারা ডাইনামিক টাইপড ল্যাঙ্গুয়েজে কাজ করেছেন যেমন, জাভাস্ক্রিপ্ট, PHP, পাইথন, রুবি ইত্যাদি তাদেরকে টাইপড সিস্টেমের সাথে পরিচিত হতে হবে। ডাইনমানিক টাইপ ল্যাঙ্গুয়েজে আসলে রানটাইমে টাইপ ডিক্লেয়ার করে নেয়। টাইপ যে নেই তা না, আমরা জাস্ট সেটাকে নিয়ে অতটা চিন্তা করতে হয় না। যেহুতু রানটাইমে টাইপ ডিক্লেয়ার হয় তাই প্রোগ্রাম রান হার আগে প্রর্যন্ত কেউ জানে না ভেরিএবলটি কি টাইপে আছে। ডাইনামিক টাইপড ল্যাঙ্গুয়েজে ভেরিএবলে কি এ্যাসাইন করা আছে সেই অনুযায়ী টাইপ ধরে নেয়। এতে করে প্রোগ্রামাররা ফ্লেক্সিবিলিটি পায়। টাইপ নিয়ে মাথা কম ঘামানো লাগে। অল্প-সময়ে বেশি কোড লিখতে পারে। এজন্য বর্তমান জগতে ডাইনামিক টাইপ ল্যাঙ্গুয়েজের জনপ্রিয়তা বেশি।

এখানেই মূলত সমস্যা ডাইনামিক টাইপ ল্যাঙ্গুয়েজ গুলতে। যেহুতু টাইপ ডিক্লেয়ার হচ্ছে রান টাইমে এবং সেটা হচ্ছে অনেকটা গেসিং এর মাধ্যমে এইজন্য এধরনের ল্যাঙ্গুয়েজে বাগ বেশি প্রোডিউস হয়। জাভাস্ক্রিপ্টের আনডিফাইন্ড, বা পিএইচপি তে Undefiend Index জাতীয় এরর সকলেই জীবনের কোন না কোন পর্যায়ে দেখেছেন। এবং সেটা ডিবাগ করি কিভাবে? এখানে সেখানে console_log() বা var_dump() অথবা dd() ইত্যাদি ডিবাগ ফাংশন বসিয়ে দেখি অমুক ভেরিএবলে কি সেট করা আছে। যারা আরেকটু স্মার্ট তারা IDE-তে ব্রেকপয়েন্ট বসিয়ে একই কাজ করে থাকে। কিন্তু স্ট্রং টাইপড ল্যাঙ্গুয়েজগুলোতে আপনি অলরেডি জানেন একটা string ভেরিএবলে কখনো number টাইপ বসতেই পারবে না। তাই আলাদা করে কোন টাইপের কি এসাইন হচ্ছে সেই চিন্তা থেকে আপনার ডিবাগিং ইজি হয়ে গেল।

যেমন নিচের জাভাস্ক্রিপ্ট কোডটি দেখুনঃ

let x = 10
console.log(typeof x) // `number`
x = 'hello'
console.log(typeof x) // `string`

একই ধরনের কোড PHP বা পাইথনেও লেখা যাবে। একই ভেরিএবল একবার আমি নাম্বার টাইপ এ্যাসাইন করেছি, আরেকবার স্ট্রিং টাইপ এ্যাসাইন করেছি। ডাইনমাইক টাইপ এই ফ্রিডমটা প্রোগ্রামারকে দিয়ে থাকে। এখানে প্রোগ্রামারের রেস্পন্সিবিলিটি ভবিষ্যতে টাইপ যেন চেঞ্জ না হয়। কিন্তু স্ট্রিক্ট টাইপড ল্যাঙ্গুয়েজে এটা কম্পাইলারের দায়িত্ব। আপনি এমন কোড কোন strict টাইপড ল্যাঙ্গুয়েজে লিখতেই পারবেন না। বা লিখলে কম্পাইল হবে না। এটি একটি অনেক বড় একটি এডভ্যান্টেজ লার্জ স্কেল সফটওয়্যার তৈরিতে।

ডাইনামিক ল্যাঙ্গুয়েজ গুলতে আপনি শুরু করতে পারবেন ইজিলি। কিন্তু মেইনটেইন করা কঠিন। আসুন নিচের কথাটি সকলে মিলে একবার বলিঃ

Building is easy, Maintaining is hard

Rust এর টাইপ সিস্টেম নিয়ে একটি Meme: rust string meme

মেমরি সেইফটি

Rust একটি মেমরি সেইফ ল্যাঙ্গুয়েজ। এর মানে Rust কম্পাইলার আপনাকে গ্যারান্টি দিবে যে যাতে কোন মেমরি লিক বা অন্য কোন মেমরি রিলেটেড এরর না থাকে। Rust কম্পাইলার এমন গ্যারান্টি দিতে পারে এর কারন মূলতঃ ১। Ownership System ২। Borrow checker

এই দুটি খুবই গুরুত্বপূর্ন কনসেপ্ট Rust প্রোগ্রামিং শেখার জন্য। আরেকদিন বিস্তারিত আলোচনা করবো। আপাতত এই দুটি নাম মনে রাখলেই চলবে।

Rust-এ কোন গার্বেজ কালেক্টর নেই

অন্য বেশিরভাগ ল্যাঙ্গুয়েজেই গার্বেজ কালেক্টর থাকে। যা মূলত অ-ব্যাবহৃত বিষয়াদি অটোমেটিক মেমরি থেকে মুছে ফেলে দিয়ে মেমরি ফ্রি রাখে। যাতে করে কখনোই মেমরির কারণে আপনার প্রোগ্রাম ক্রাশ না হয়। এটি এক হিসেবে ভালো যে প্রোগ্রামারদের মেমরি নিয়ে খুব একটা চিন্তা করতে হয় না। যখন খুশি ভেরিএবল ডিক্ল্যেয়ার করি, যখন খুশি এ্যাসাইন করি। গার্বেজ কালেক্টর বাকিটা ডিল করে নেয় :D

বুকে হাত দিয়ে PHP, Javascript প্রোগ্রামার-রা বলতে পারবেন জীবনে কতবার মেমরি এলোকেশন নিয়ে চিন্তা করেছেন? সর্বোচ্চ ডাটাবেজের কানেকশন যাতে সিঙ্গেলটোন হয় ওই প্রর্যন্তই, এরপরে কতবার মেমরি নিয়ে ভাবছেন? সত্যি বললে মার্কস কাটা যাবে না। একবারও না :D আমিও এই কাজ করি নাই কখনো।

এখন প্রশ্ন করতে পারেন তাহলে Rust-এ কি তাহলে আমাদেরকেই মেমরি নিয়ে চিন্তা করতে হবে? এখানেই আসলে মজা। Rust-এ আসে চিন্তা করতে হবে না। কিন্তু দায়িত্ব নিতে হবে আর শুরুর দিকে Borrow Checker এর সাথে মারামারি করতে হবে একটু!

তাহলে গার্বেজ কালেক্টর না থাকার সুবিধা কি? Rust is blazing fast পারফর্মেন্স! C/C++ ল্যাঙ্গুয়েজও গার্বেজ কালেক্টর নেই এবং মেমরি সেইফটির গ্যারান্টিও নেই। তবে Rust-এ আপনাকে গার্বেজ কালেক্টর না থেকেও আপনাকে পুরোপুরি মেমরি ম্যানেজমেন্টের গ্যারেন্টি দেওয়া হচ্ছে তাই নিশ্চিন্তে হাই পারফরমেন্স কোড লিখতে পারবেন। এবং পুরো মেমরিরে কন্ট্রোল আপনার হাতেই থাকছে। আর যেহুতু গার্বেজ কালেক্টর নেই তাই প্রোগ্রামের সাইজ তুলনামূলক কমে যায়। কারণ, যে সকল ল্যাঙ্গুয়েজে গার্বেজ কালেক্টর আছে যেমন, Go, Python-ইত্যাদি এদের কমপ্লাইলড বাইনারির সাথে গার্বেজ কালেক্টরও জুড়ে দেওয়া হয়। তাই রান-টাইম একটু হেভি হয়ে থাকে। সেজন্য Rust-এর প্রোগ্রামের রানটাইম অনেক মিনিমাল

তবে সেক্ষেত্রে অবশ্যই খেয়াল রাখতে হবে যাতে কোন মেমরি লিক না হয়, কোন Dangling pointers (পয়েন্টার যা কোন কিছু পয়েন্ট করে না, বাংলা নাম কি হবে জানি না) না থাকে এবং কোডবেজ তুলনামূলক একটু কমপ্লেক্স হয়।

Speed, Performance...WHAT NOT!

Rust is blazing fast ঐযে ফিলসফি সেকশনে বলেছিলাম হাই পারফরম্যেন্স কোড হতে হবে। কোন ল্যাঙ্গুয়েজের পারফরম্যেন্স দুইভাবে পরিমাপ করতে পারি আমরা। একটা হচ্ছে, যে প্রোগ্রাম লিখলাম সেটা কত ফাস্ট রান করতে পারে। আরেকটা হচ্ছে, ডেভলপাররা কত দ্রুত প্রোডাকশন গ্রেড কোড লিখতে পারে। এখানে খ্যেয়াল করে, "প্রডাকশন গ্রেড" কোড লেখা কিন্তু ভিন্ন জিনিস। যেমন, পাইথনে সহজেই প্রোগ্রাম লেখা যায়। মোটামুটি ঘন্টাখানেক পড়াশোনা করলেই একটা বেসিক HTTP সার্ভারও বানিয়ে ফেলতে পারবেন। এটা কি প্রোডাকশন গ্রেড হল? না। তাহলে প্রোডাকশন গ্রেড কোড বলতে আমরা কি বুঝি? যে কোড মেইনটেন করা যায়, কোডের মূল অথর না কোম্পানিতে না থাকলেও যাতে করে নতুন কেউ সহজেই বুঝে নিতে পারে অথবা সহজেই নতুন ফিচার এ্যাড করা যায় খুব একটা মডিফাই না করে। কয়েক বছর পর লেগেসি কোড হয়ে গেলেও যেন সহজে রিফক্যাক্টর করা যায়।

এইসব কথা শুনে ডিজাইন প্যাটার্নের কথা মাথায় আসছে না? জানতাম! এটাই ম্যাজিক। Rust-এর কম্পাইলার এখানে ম্যাজিকটা দেখায়। ডিজাইন প্যাটার্ন ছাড়াই শুধুমাত্র কম্পাইলারের সাহায্যে ইজিলি এসকল সুবিধা পেয়ে যাবেন। তবে রিফক্টর করুন আর যাই করুন ইউনিট টেস্ট লিখতে ভুলবেন না। ইউনিট টেস্ট না লিখে কম্পাইলারের দোষ দিয়ে নিজের আলসেমি ঢাকবেন তাহলে কিন্তু বিষয়টা জমলো না।

Rust-এ শুরু করাটা কঠিন। সত্যিই কঠিন। এর মানে এই না যে ল্যাঙ্গুয়েজটা কঠিন। শুরু করাটা কঠিন এই জন্য ঐযে গার্বেজ কালেক্টর নেই তাই Borrow Checker এর সাথে একটু মারপিট করা লাগে। এছাড়া বেশ কিছু বিষয় Rust ঘুরিয়ে পেঁচিয়ে করে থাকে যার জন্য অভিজ্ঞ প্রোগ্রামারদেরও অনবোর্ডিং-এ সময় লাগে। কিন্তু একবার ইউজড টু হয়ে গেলে তখন Rust খুবই পাওয়ারফুল এবং কোড লেখাও ইজি হয়।

I am impressed.. I am sold. এখন থেকে কি Rust শেখা শুরু করে দিবো?

শিখতে তো সমস্যা নেই কিছুই। Rust-শিখলে আপনার প্রোগ্রামিং সম্পর্কে একটা নতুন ধারনা তৈরি হবে। যা আপনার প্রাইমারি ল্যাঙ্গুয়েজ (মানে এখন যে ল্যাঙ্গুয়েজে করছেন Python,JS,PHP ইত্যাদি) অনেক ইম্প্রুভ হয়ে যাবে।

Rust আপনার কোম্পানির জন্য চুজ করবেন কিনা? এক্ষেত্রে, যেহুতু Rust-এ শুরু করাটা কিছুটা কঠিন। যেমন, আপনার কোনদিন পাইথনের কাজের অভিজ্ঞতা না থাকলেও আপনি সহকেই পাইথনের কোড পড়তে পারবেন যদি আপনার অন্য কোন একটা ল্যাঙ্গুয়েজে পারদর্শিতা থাকে। কারণ পাইথন খুবই সহজ পড়তে, একইভাবে Java/PHP। হয়তো প্রজেক্টের কমপ্লেসিটির কারণে বিজনেস লজিক বুঝতে কষ্ট হবে কিন্তু ল্যাঙ্গুয়েজ সিনট্যাক্স সহজেই বুঝে যাওয়ার কথা। কারণ এই ল্যাঙ্গুয়েজগুলি এতটাই ফ্রেন্ডলি আর কোডগুলো দেখতে অনেক পরিচিত।

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

এছাড়া আসলেই Rust আপনাদের দরকার কিনা এটাও একটা বিষয়। সবখানে কিন্তু Rust এর মত হাই পারফরমেন্স দরকার নাই। যেমন, Web API। আপনার যদি হাই পারফরমেন্স দরকার হয় Go ব্যাবহার করতে পারেন। অথবা যেকোনো ল্যাঙ্গুয়েই ভালো পারফরমেন্সের কোড লেখা যায় (PHP, Nodejs, Python,Java etc) যদি পারফমেন্স ইঞ্জিনিয়ারিং নিয়ে জ্ঞান থাকে। ওয়েব এ্যাপ্লিকেশনে বা ব্যাকেন্ডে ল্যাঙ্গুয়েজ খুব সময়েই পারফরমেন্সের বটলনেক হয়ে দাঁড়ায়। সেটি একেবারেই আলাদা টপিক। আলাদা আলোচনা।

তবে আপনি যদি কোন গেম ইঞ্জিন তৈরি করেন, IoT এ্যাপ্লিকেশন যা একেবারে অল্প মেমরিতে রান করা লাগবে, অথবা কোন CLI এপ্লিকেশন, নেটওয়ার্ক ইনফ্রাস্ট্রাকচার তৈরির জন্য অথবা গ্রাফিক্স এ্যাপ্লিকেশন ইত্যাদি কাজের জন্য অবশ্যই Rust বিবেচনায় রাখতে পারেন।

সংক্ষেপেঃ শেখার জন্য অবশ্যই অবশ্যই রিকমন্ডেড। আর অফিসিয়ালি এডপ্ট করার ক্ষেত্রে দরকার পরলে এডপ্ট করতে পারেন।

প্রোগ্রামিং শিখতে চাচ্ছি, Rust-দিয়ে শুরু করাটা কি ঠিক হবে?

যখন আমরা একেবারে প্রথম কিছু শিখতে যাই তখন টার্গেট থাকে বিষয়টি সম্পর্কে বেসিক ধারণা পাওয়া এবং সেটি কাজে লাগিয়ে প্রাক্টিক্যাল কিছু একটা করে ফেলা। এতে করে ওই বিষয় সম্পর্কে একটা আইডিয়া হয়ে যায়। নিজের ভালো লাগা বা ওই বিষয়টি আমার সাথে যাবে কিনা সেটি বোঝা যায়।

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

একদম বিগেইনারদের যারা আগে কখনো কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ সেভাবে ট্রাই করেনি অথবা প্রফেশনাল এক্সপেরিয়েন্স নেই তাদেরকে পরামর্শ দিবো নিম্নের বৈশিষ্ট্য বিশিষ্ট ল্যাঙ্গুয়েজ চয়েস করতেঃ

  1. Strong/Static টাইপ সিস্টেম হতে হবে
  2. সহজেই কিছু একটা বানিয়ে ফেলা যাবে। কারণ এতে করে প্রোগ্রামিং এর মজাটা পাওয়া যায়
  3. গুগল সার্চ করলে সমস্যার সমাধান পাওয়া যাবে। নতুন ল্যাঙ্গুয়েজগুলোর অনেক কিছুই সার্চ করে পাওয়া যায় না। কারণ নতুন ল্যাঙ্গুয়েজগুলো এখনো অতটা মানুষজন ব্যাবহার করতে শুরু করেনি। তাই জনপ্রিয় কোন ল্যাঙ্গুয়েজ চয়েস করা বেটার কারণ নতুন প্রোগ্রামাররা প্রতিনিয়তই এরর-এর সম্মুখীন হতে হবে। সেটি তখন সহজেই সার্চ করে বের করা যাবে।
  4. একটিভ কমিউনিটি আছে। এটি গুরুত্বপূর্ন এইজন্য যে অনেক সময় কমিউনিটির মধ্যে মিটাপ হয়, কনফারেন্স হয় সেগুলোতে অংশ নিলে ওই প্রোগ্রামিং এর অন্যরা কি করছে সেগুলো সম্পর্কে ইন্সপারেশন পাওয়া যায়। নতুন হিসেবে ইন্সপারেশন ধরে রাখাটা গুরুত্বপূর্ন। ইন্সপারেশন থেকেই কনসেটেন্সি তৈরি হয়।
  5. জব মার্কেটে চাহিদা আছে। চাকুরী না থাকলে মোটিভেশন বেশিদিন কাজ করে না

এসব বিবেচনায় আমি Rust-কে সাজেস্ট করবো না প্রথম ল্যাঙ্গুয়েজ হিসেবে। এক্ষেত্রে বরং টাইপস্ক্রিপ্ট হতে পারে দারুণ চয়েস। সহজেই শিখে ফেলা যায়। টাইপ সিস্টেম নিয়েও অনেক মাথাঘামাতে হয় না আবার একেবারেই টাইপ নেই এমনও না (জাভাস্ক্রিপ্টের মত)। এছাড়া সহজেই নিজের ছোটখাটো একটা প্রজেক্টেও দাঁড়া করিয়ে ফেলা যায়। বিগেনারদের কোন ফ্রেমওয়ার্ক চুজ না করে প্রথমে ল্যাঙ্গুয়েজের ফান্ডামেন্টাল এবং ডেটা স্ট্রাকচার শেখা উচিৎ। তারপরে ফ্রেমওয়ার্ক সিলেক্ট করতে হবে, এতে করে বোঝা যায় যে এই ফ্রেমওয়ার্ক আসলে আন্ডারলাইনিং কি করতেছে। অনেক কিছুই তখন সহজে বুঝে ফেলা যায়।

আসলে Rust এ্যাজ এ ল্যাঙ্গুয়েজ খুব একটা বিগেইনার ফ্রেন্ডলি না। মিনিমাম একটা ল্যাঙ্গুয়েজে কয়েক বছর কাজ করে Rust-শুরু করলে এর সৌন্দর্য বোঝা যায়। কারণ, Rust সুরু থেকেই একদম মেমরি সেইফ, ডেটা টাইপ, হিপ, স্ট্যাক এগুলো নিয়ে কাজ করতে শেখায়। যা আসলে বিগেনারদের জন্য কমপ্লিকেটেড লাগে। আজকে এই প্রর্যন্তই, আগামী পর্বে আমরা একচুয়াল কোড করবো এবং আস্তে আস্তে একসাথে Rust-শিখবো।