হ্যালো, ওয়ার্ল্ড! (Hello, World!)

এখন যেহেতু আপনি Rust ইন্সটল করেছেন, তাই আপনার প্রথম Rust প্রোগ্রাম লেখার সময় এসেছে। নতুন কোনো প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার সময় পর্দায় Hello, world! লেখাটি প্রিন্ট করার একটি ছোট প্রোগ্রাম লেখা ঐতিহ্য, তাই আমরা এখানে সেটাই করব!

দ্রষ্টব্য: এই বইটি লেখার সময় ধরে নেওয়া হয়েছে যে আপনি কমান্ড লাইনের সাথে পরিচিত। আপনার এডিটিং, টুলিং, বা আপনার কোড কোথায় থাকবে, এইসব বিষয়ে Rust-এর নির্দিষ্ট কোনো বাধ্যবাধকতা নেই। তাই আপনি যদি কমান্ড লাইনের পরিবর্তে কোনো ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDE) ব্যবহার করতে পছন্দ করেন, তবে নির্দ্বিধায় আপনার পছন্দের IDE ব্যবহার করতে পারেন। এখন অনেক IDE-তেই Rust-এর সাপোর্ট রয়েছে; বিস্তারিত জানতে IDE-এর ডকুমেন্টেশন দেখুন। Rust টিম rust-analyzer-এর মাধ্যমে മികച്ച IDE সাপোর্ট দেওয়ার ওপর জোর দিচ্ছে। আরও বিস্তারিত জানতে Appendix D দেখুন।

একটি প্রোজেক্ট ডিরেক্টরি তৈরি করা (Creating a Project Directory)

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

একটি টার্মিনাল খুলুন এবং projects ডিরেক্টরি এবং এর ভেতরে "Hello, world!" প্রোজেক্টের জন্য একটি ডিরেক্টরি তৈরি করতে নিচের কমান্ডগুলো লিখুন।

Linux, macOS এবং Windows-এর PowerShell-এর জন্য, এই কমান্ডটি লিখুন:

$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world

Windows CMD-এর জন্য, এই কমান্ডটি লিখুন:

> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world

একটি Rust প্রোগ্রাম লেখা এবং চালানো (Writing and Running a Rust Program)

এরপর, একটি নতুন সোর্স ফাইল তৈরি করুন এবং সেটির নাম দিন main.rs। Rust ফাইলগুলো সবসময় .rs এক্সটেনশন দিয়ে শেষ হয়। যদি ফাইলের নামে একাধিক শব্দ ব্যবহার করেন, তাহলে সেগুলোকে আলাদা করার জন্য আন্ডারস্কোর (_) ব্যবহার করার নিয়ম রয়েছে। উদাহরণস্বরূপ, helloworld.rs-এর পরিবর্তে hello_world.rs ব্যবহার করুন।

এবার, আপনার তৈরি করা main.rs ফাইলটি খুলুন এবং Listing 1-1-এর কোডটি লিখুন।

fn main() {
    println!("Hello, world!");
}

ফাইলটি সেভ করুন এবং ~/projects/hello_world ডিরেক্টরিতে আপনার টার্মিনাল উইন্ডোতে ফিরে যান। Linux বা macOS-এ, ফাইলটি কম্পাইল এবং রান করার জন্য নিচের কমান্ডগুলো লিখুন:

$ rustc main.rs
$ ./main
Hello, world!

Windows-এ, ./main-এর পরিবর্তে .\main.exe কমান্ডটি লিখুন:

> rustc main.rs
> .\main.exe
Hello, world!

আপনার অপারেটিং সিস্টেম যাই হোক না কেন, টার্মিনালে Hello, world! স্ট্রিংটি প্রিন্ট হওয়া উচিত। যদি এই আউটপুটটি দেখতে না পান, তাহলে সাহায্য পাওয়ার উপায় জানতে ইন্সটলেশন অংশের “সমস্যা সমাধান” অংশটি দেখুন।

যদি Hello, world! প্রিন্ট হয়ে থাকে, তাহলে অভিনন্দন! আপনি আনুষ্ঠানিকভাবে একটি Rust প্রোগ্রাম লিখেছেন। এর মানে আপনি এখন একজন Rust প্রোগ্রামার—স্বাগতম!

একটি Rust প্রোগ্রামের অ্যানাটমি (Anatomy of a Rust Program)

আসুন, এই “Hello, world!” প্রোগ্রামটি বিস্তারিতভাবে পর্যালোচনা করি। নিচে এই ধাঁধার প্রথম অংশটি দেওয়া হলো:

fn main() {

}

এই লাইনগুলো main নামের একটি ফাংশন সংজ্ঞায়িত করে। main ফাংশনটি বিশেষ: এটি প্রতিটি এক্সিকিউটেবল Rust প্রোগ্রামে সবার প্রথমে রান হওয়া কোড। এখানে, প্রথম লাইনটি main নামের একটি ফাংশন ঘোষণা করে, যার কোনো প্যারামিটার নেই এবং এটি কিছুই রিটার্ন করে না। যদি কোনো প্যারামিটার থাকত, তবে সেগুলো () বন্ধনীর মধ্যে যেত।

ফাংশনের বডি {}-এর মধ্যে আবদ্ধ। Rust-এ সমস্ত ফাংশন বডির চারপাশে কার্লি ব্র্যাকেট থাকা আবশ্যক। ফাংশন ঘোষণার লাইনেই, একটি স্পেস দিয়ে ওপেনিং কার্লি ব্র্যাকেট ({) বসানো একটি ভালো অভ্যাস।

দ্রষ্টব্য: আপনি যদি Rust প্রোজেক্ট জুড়ে একটি স্ট্যান্ডার্ড স্টাইল অনুসরণ করতে চান, তাহলে আপনি rustfmt নামক একটি অটোমেটিক ফরম্যাটার টুল ব্যবহার করতে পারেন। এটি আপনার কোডকে একটি নির্দিষ্ট স্টাইলে ফরম্যাট করবে (rustfmt সম্পর্কে আরও জানতে Appendix D দেখুন)। Rust টিম এই টুলটিকে স্ট্যান্ডার্ড Rust ডিস্ট্রিবিউশনের সাথে যুক্ত করেছে, যেমন rustc আছে, তাই এটি আপনার কম্পিউটারে ইতিমধ্যেই ইন্সটল হয়ে থাকার কথা!

main ফাংশনের বডিতে নিচের কোডটি রয়েছে:

#![allow(unused)]
fn main() {
println!("Hello, world!");
}

এই লাইনটি এই ছোট প্রোগ্রামটির সমস্ত কাজ করে: এটি স্ক্রিনে টেক্সট প্রিন্ট করে। এখানে তিনটি গুরুত্বপূর্ণ বিষয় লক্ষ্য করার আছে।

প্রথমত, println! একটি Rust ম্যাক্রো কল করে। যদি এটি একটি ফাংশন কল করত, তবে এটিকে println (! ছাড়া) লেখা হত। আমরা চ্যাপ্টার ২০-তে Rust ম্যাক্রোগুলো নিয়ে আরও বিস্তারিত আলোচনা করব। আপাতত, আপনাকে শুধু এটুকু জানলেই চলবে যে ! ব্যবহার করার অর্থ হল আপনি একটি ম্যাক্রো কল করছেন, সাধারণ ফাংশন নয় এবং ম্যাক্রোগুলি সবসময় ফাংশনের মতো একই নিয়ম অনুসরণ করে না।

দ্বিতীয়ত, আপনি "Hello, world!" স্ট্রিংটি দেখতে পাচ্ছেন। আমরা এই স্ট্রিংটিকে println!-এর আর্গুমেন্ট হিসেবে পাঠাই এবং এই স্ট্রিংটি স্ক্রিনে প্রিন্ট হয়।

তৃতীয়ত, আমরা লাইনটি একটি সেমিকোলন (;) দিয়ে শেষ করি। এটি নির্দেশ করে যে এই এক্সপ্রেশনটি শেষ এবং পরেরটি শুরু হওয়ার জন্য প্রস্তুত। Rust কোডের বেশিরভাগ লাইন সেমিকোলন দিয়ে শেষ হয়।

কম্পাইল করা এবং চালানো আলাদা ধাপ (Compiling and Running Are Separate Steps)

আপনি সবেমাত্র একটি নতুন তৈরি করা প্রোগ্রাম চালিয়েছেন, তাই চলুন এই প্রক্রিয়ার প্রতিটি ধাপ পরীক্ষা করি।

একটি Rust প্রোগ্রাম চালানোর আগে, আপনাকে rustc কমান্ড ব্যবহার করে এবং আপনার সোর্স ফাইলের নাম দিয়ে Rust কম্পাইলার ব্যবহার করে কম্পাইল করতে হবে, এইভাবে:

$ rustc main.rs

যদি আপনার C বা C++ ব্যাকগ্রাউন্ড থাকে, তাহলে আপনি দেখবেন যে এটি gcc বা clang-এর মতোই। সফলভাবে কম্পাইল করার পরে, Rust একটি বাইনারি এক্সিকিউটেবল আউটপুট দেয়।

Linux, macOS এবং Windows-এর PowerShell-এ, আপনি আপনার শেলে ls কমান্ডটি লিখে এক্সিকিউটেবলটি দেখতে পারেন:

$ ls
main  main.rs

Linux এবং macOS-এ, আপনি দুটি ফাইল দেখতে পাবেন। Windows-এর PowerShell-এ, আপনি CMD ব্যবহার করলে যে তিনটি ফাইল দেখতে পেতেন, সেগুলোই দেখতে পাবেন। Windows-এর CMD-তে, আপনি নিচের কমান্ডটি লিখবেন:

> dir /B %= the /B option says to only show the file names =%
main.exe
main.pdb
main.rs

এটি .rs এক্সটেনশন সহ সোর্স কোড ফাইল, এক্সিকিউটেবল ফাইল (Windows-এ main.exe, কিন্তু অন্য সব প্ল্যাটফর্মে main) এবং Windows ব্যবহার করার সময়, .pdb এক্সটেনশন সহ ডিবাগিং তথ্য সম্বলিত একটি ফাইল দেখায়। এখান থেকে, আপনি main বা main.exe ফাইলটি চালান, এইভাবে:

$ ./main # or .\main.exe on Windows

যদি আপনার main.rs ফাইলটি আপনার “Hello, world!” প্রোগ্রাম হয়, তাহলে এই লাইনটি আপনার টার্মিনালে Hello, world! প্রিন্ট করবে।

আপনি যদি রুবি (Ruby), পাইথন (Python) বা জাভাস্ক্রিপ্টের (JavaScript) মতো ডায়নামিক ল্যাঙ্গুয়েজের সাথে বেশি পরিচিত হন, তাহলে আপনি হয়তো একটি প্রোগ্রাম কম্পাইল এবং চালানোকে আলাদা ধাপ হিসেবে নাও দেখতে পারেন। Rust হল একটি অ্যাওয়েড-অফ-টাইম কম্পাইল্ড (ahead-of-time compiled) ল্যাঙ্গুয়েজ। এর মানে হল, আপনি একটি প্রোগ্রাম কম্পাইল করে এক্সিকিউটেবল ফাইলটি অন্য কাউকে দিতে পারেন এবং তারা Rust ইন্সটল না করেও সেটি চালাতে পারবেন। আপনি যদি কাউকে একটি .rb, .py বা .js ফাইল দেন, তবে তাদের যথাক্রমে রুবি, পাইথন বা জাভাস্ক্রিপ্ট ইন্সটল করা থাকতে হবে। কিন্তু সেইসব ল্যাঙ্গুয়েজে, আপনার প্রোগ্রাম কম্পাইল এবং চালানোর জন্য আপনার কেবল একটি কমান্ডই যথেষ্ট। ল্যাঙ্গুয়েজ ডিজাইনের ক্ষেত্রে সবকিছুই একটি আপস।

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