سلام دنیا

حالا که Rust را نصب کرده‌اید، اولین برنامه خود را بنویسید. مرسوم است که زمان یادگیری یک زبان جدید برنامه‌ی کوچکی که عبارت Hello, World! را در صفحه نمایش دهد بنویسند پس ما هم این‌کار را می‌کنیم.

نکته: این کتاب درنظر می‌گیرد که شما آشنایی مقدماتی با خط فرمان داشته باشید. Rust انتخاب خاصی درباره ویرایشگر متن یا محیط و ابزار شما ندارد. پس اگر ترجیح می‌دهید که از یک محیط توسعه IDE به جای خط فرمان استفاده کنید ایرادی بر آن وارد نیست. بسیاری از IDE ها تا حدی از Rust پشتیبانی می‌کنند. برای جزئیات بیشتر باید به مستندات IDE خودتان رجوع کنید. اخیراً تیم Rust روی توسعه پشتیبانی IDE تمرکز کرده
و پیشرفت زیادی در این زمینه اتفاق افتاده است!

ساخت دایرکتوری برای پروژه

با ساختن یک دایرکتوری برای نگهداری کد Rust شروع کنید. برای Rust اهمیتی ندارد که کدها را کجا قرار می‌دهید، اما برای تمرین‌ها و پروژه‌های این کتاب، پیشنهاد می‌کنیم یک دایرکتوری projects در کامپیوتر خود ساخته و کد پروژه‌هارا آنجا قرار دهید.

یک ترمینال باز کرده و دستورات زیر را برای ساخت یک دایرکتوری project و یک دایرکتوری برای برنامه «Hello World» خود درون آن وارد کنید.

برای لینوکس، مک و PowerShell روی ویندوز:

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

برای CMD روی ویندوز:

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

نوشتن و اجرای یک برنامه Rust

سپس باید یک کد منبع جدید بسازیم. نام آنرا main.rs می‌گذاریم. پسوند فایل‌های کد منبع Rust همیشه .rs می‌باشد. اگر در اسم فایل شما بیشتر از یک کلمه باشد باید آنها را با underscore از هم جدا کنید. مثلاً بجای helloworld.rs از hello_world.rs استفاده کنید.

حال فایل main.rs که ساختید را باز کرده و در آن کد ۱٫۱ را قرار دهید.

فایل: main.rs

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

کد ۱٫۱: برنامه ای که Hello, world! را چاپ می‌کند.

فایل را ذخیره کرده و به ترمینال بازگردید. در لینوکس یا مک، دستورات زیر را برای کامپایل و اجرای فایل وارد کنید:

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

روی ویندوز، دستور .\main.exe را بجای ./main وارد نمایید:

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

صرف‌نظر از سیستم‌عامل، باید رشته Hello, world! در ترمینال چاپ شود. اگر خروجی را مشاهده نمی‌کنید، به بخش عیب‌یابی قسمت نصب برای کمک گرفتن رجوع کنید.

اگر Hello, world! چاپ شد، تبریک می‌گوییم! شما رسماً یک برنامه Rust نوشته‌اید. که یعنی یک برنامه‌نویس Rust هستید. خوش‌آمدید!

آناتومی یک برنامه Rust

جزئیات اتفاقاتی که در برنامه «Hello, World» شما افتاد را بررسی کنیم. اولین بخش پازل:

fn main() {

}

این چند خط در زبان Rust یک تابع را تعریف می‌کنند. تابع main یک تابع خاص است: همیشه اولین کدی است که در یک برنامه Rust اجرا می‌شود. خط اول یک تابع به نام main می‌سازد که هیچ پارامتری ندارد و هیچ چیزی برنمی‌گرداند. اما اگر پارامتر ورودی داشت داخل پرانتز‌ها () وارد می‌شدند.

همچنین، توجه داشته باشید که بدنه تابع در {} محدود شده است. در Rust استفاده از این علامت‌ها برای تمام توابع الزامی است. شیوه خوب نوشتن کد این است که علامت } باز کننده را در همان خط تعریف تابع با یک فاصله (space) قرار دهیم.

در زمان نگارش این متن، یک ابزار فرمت خودکار به نام rustfmt در حال توسعه است. اگر می‌خواهید یک شیوه استاندارد برای پروژه‌ها استفاده کنید، rustfmt کد شما را به یک شیوه هماهنگ می‌کند. تیم Rust در نظر دارد در نهایت این ابزار را در توزیع استاندارد Rust وارد کند. مانند rustc. پس مشروط به اینکه چه زمانی این کتاب را می‌خوانید، ممکن است همین الان روی کامپیوتر شما نصب شده باشد! برای جزئیات بیشتر مستندات آنلاین را بیشتر بررسی کنید.

درون تابع main کد زیر وجود دارد:


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

این خط ساده تمام کار در این برنامه کوچک را انجام می‌دهد: متنی را روی صفحه چاپ می‌کند. چهار نکته جالب توجه وجود دارد. اول اینکه شیوه Rust این است که با ۴ کاراکتر فاصله (Space) indent یا مرتب سازی کد انجام شود و از tab استفاده نشود.

دوم اینکه println! یک ماکرو در Rust صدا می‌زند. اگر یک تابع صدا زده بود به شکل println (بدون کاراکتر !) نوشته می‌شد. بیشتر در مورد ماکروها و جزئیات آنها در فصل ۱۹ صحبت خواهیم کرد. فعلا باید بدانید که استفاده از ! به معنی صدا زدن یک ماکرو به جای یک تابع معمولی است.

سوم اینکه رشته "Hello, world!" را می‌بینیم. آنرا به عنوان آرگومان به println! داده‌ایم، و این رشته روی صفحه چاپ شد.

چهارم: ما خط را با یک ; (Semicolon) پایان داده‌ایم که نشان دهنده پایان عبارت و آمادگی شروع عبارت بعدی است. اکثر خطوط در Rust با این کاراکتر پایان میابند.

کامپایل و اجرا جداگانه هستند

برنامه جدید خود را اجرا کردید. هر قدم از این روند اجرا را بررسی می‌کنیم.

قبل از اجرای برنامه Rust، لازم است آنرا با استفاده از کامپایلر Rust و وارد کردن rustc کامپایل کنیم. اسم فایل کد منبع را به عنوان ورودی به این دستور می‌دهیم. به شکل زیر:

$ rustc main.rs

اگر پس‌زمینه ای از C یا C++ داشته باشید متوجه شباهت با gcc یا clang خواهید شد. بعد از موفقیت کامپایل، Rust یک فایل قابل اجرای دودویی خروجی می‌دهد.

در لینوکس، مک، و پاورشل ویندوز، می‌توانید خروجی قابل اجرا را با وارد کردن دستور ls مشاهده کنید. در لینوکس و مک دو فایل خواهید دید. در پاورشل ویندوز یا CMD سه فایل خواهید دید.

$ ls
main  main.rs

با CMD در ویندوز باید دستور زیر را وارد کنید:

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

این دستور کد منبع با پسوند .rs، فایل خروجی قابل اجرا (main.exe در ویندوز و main در سایر) و اگر از ویندوز استفاده کنید فایلی حاوی اطلاعات دیباگ با پسوند .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 دهید باید برای اجرای آنها یک پیاده سازی از Ruby یا Python یا Javascript (به ترتیب) نصب داشته باشند. ولی در این زبان‌ها برای اجرای برنامه تنها یک دستور کافی است. همه چیز در طراحی زبان‌های برنامه‌نویسی مثل معامله می‌ماند.

فقط استفاده از rustc برای کامپایل برنامه‌های ساده کافی است. ولی هرچه پروژه شما بزرگتر شود، می‌خواهید گزینه‌های مربوط را مدیریت کرده و کد خود را راحت‌تر به اشتراک بگذارید. در ادامه، شما را با ابزار کارگو آشنا خواهیم کرد که کمک می‌کند برنامه‌های واقعی Rust بنویسید.