
روز ۳: ساختار پروژههای Rust و فایل Cargo.toml
بعد از نصب Rust و ساخت اولین پروژه، مهمترین قدم برای درک عمیق این زبان، شناخت ساختار پروژههای Rust است. Rust از همان ابتدا توسعهدهنده را به سمت نظم و استاندارد هدایت میکند و این موضوع در ساختار پروژهها کاملاً مشخص است. در روز سوم از سری آموزش «Rust در ۵۰ روز» یاد میگیریم هر فایل و پوشه چه نقشی دارد و چرا Cargo.toml قلب هر پروژه Rust محسوب میشود.
شناخت درست ساختار پروژههای Rust باعث میشود در ادامه مسیر، هنگام کار با پروژههای بزرگ یا متنباز، سردرگم نشوید. بسیاری از برنامهنویسانی که از زبانهایی مثل Python یا PHP وارد Rust میشوند، در ابتدا با این ساختار کمی غریبه هستند، اما بعد از درک آن متوجه میشوند که این نظم، یکی از نقاط قوت اصلی Rust است.
ساختار پیشفرض پروژههای Rust
وقتی با دستور cargo new یک پروژه جدید ایجاد میکنید، Rust بهصورت خودکار یک ساختار استاندارد برای شما میسازد. این ساختار بهگونهای طراحی شده که هم برای پروژههای کوچک و هم برای پروژههای بزرگ مقیاسپذیر باشد. همین موضوع باعث شده تقریباً تمام پروژههای Rust ظاهری آشنا و قابل پیشبینی داشته باشند.
ساختار پایه یک پروژه Rust معمولاً شامل فایل Cargo.toml و پوشه src است. این سادگی در ظاهر، اما قدرت در عمل، باعث میشود تمرکز توسعهدهنده روی منطق برنامه باشد نه درگیری با ساختارهای پیچیده و نامفهوم. Cargo این ساختار را بهخوبی مدیریت میکند و اجازه نمیدهد پروژه از نظم خارج شود.
پوشه src و فایل main.rs
پوشه src محل اصلی قرارگیری کدهای برنامه است. در پروژههای اجرایی، فایل main.rs داخل این پوشه قرار دارد که نقطه شروع برنامه محسوب میشود. تابع main در این فایل تعریف میشود و اجرای برنامه Rust دقیقاً از همین نقطه آغاز میشود. این رویکرد شباهت زیادی به زبانهایی مثل C و Go دارد.
در پروژههای بزرگتر ممکن است فایلهای بیشتری داخل پوشه src اضافه شوند یا حتی زیرپوشههایی برای ماژولها ایجاد شود. Rust به شما اجازه میدهد کد را بهصورت کاملاً ماژولار سازماندهی کنید، بدون اینکه ساختار پروژه شلوغ یا گیجکننده شود. این موضوع در نگهداری و توسعه بلندمدت پروژه اهمیت زیادی دارد.
تفاوت main.rs و lib.rs در پروژههای Rust
در Rust دو نوع پروژه اصلی وجود دارد: پروژههای اجرایی و پروژههای کتابخانهای. در پروژههای اجرایی، فایل main.rs وجود دارد و خروجی نهایی یک برنامه قابل اجرا است. اما در پروژههای کتابخانهای، بهجای main.rs فایلی به نام lib.rs داریم که برای ساخت کتابخانه استفاده میشود.
کتابخانههای Rust معمولاً برای استفاده در پروژههای دیگر نوشته میشوند و تابع main ندارند. Cargo بهصورت خودکار تشخیص میدهد که پروژه شما از چه نوعی است و بر اساس آن فرآیند build را انجام میدهد. در ادامه این دوره، با هر دو نوع پروژه بهصورت عملی کار خواهیم کرد.
فایل Cargo.toml چیست؟
فایل Cargo.toml مهمترین فایل پیکربندی در هر پروژه Rust است. این فایل اطلاعات اصلی پروژه مثل نام، نسخه، نویسنده و وابستگیها را در خود نگه میدارد. Cargo هنگام کامپایل، اجرا و انتشار پروژه، بهصورت مستقیم از اطلاعات این فایل استفاده میکند.
فرمت Cargo.toml بر پایه TOML طراحی شده که خوانا و ساده است. این سادگی باعث میشود حتی در پروژههای بزرگ هم بتوان تنظیمات را بهراحتی مدیریت کرد. تقریباً هر تغییری که بخواهید در رفتار پروژه ایجاد کنید، از طریق همین فایل انجام میشود.
بخشهای اصلی فایل Cargo.toml
در فایل Cargo.toml معمولاً چند بخش اصلی وجود دارد که مهمترین آنها بخش package و dependencies است. در بخش package اطلاعات کلی پروژه مثل نام، نسخه و edition زبان Rust مشخص میشود. این اطلاعات هم برای توسعهدهنده و هم برای ابزارهای Rust اهمیت زیادی دارند.
بخش dependencies جایی است که کتابخانههای خارجی مورد استفاده پروژه تعریف میشوند. Cargo بهصورت خودکار این وابستگیها را دانلود و مدیریت میکند. همین سیستم مدیریت وابستگی قدرتمند باعث شده اکوسیستم Rust بسیار منظم و قابل اعتماد باشد.
مثال ساده از فایل Cargo.toml
در ادامه یک نمونه ساده از فایل Cargo.toml را مشاهده میکنید که ساختار کلی آن را نشان میدهد. این فایل بهصورت پیشفرض هنگام ساخت پروژه ایجاد میشود و شما میتوانید آن را بر اساس نیاز خود تغییر دهید.
[package] name = "hello_rust" version = "0.1.0" edition = "2021" [dependencies]
در این مثال هنوز وابستگی خاصی به پروژه اضافه نشده است. در روزهای آینده یاد میگیریم چگونه کتابخانههای مختلف را به این فایل اضافه کنیم و Cargo چگونه آنها را مدیریت میکند. همین سادگی در تعریف وابستگیها یکی از دلایل محبوبیت Rust است.
نقش Cargo در مدیریت پروژه
Cargo فقط یک ابزار build ساده نیست، بلکه یک مدیر کامل پروژه محسوب میشود. این ابزار کامپایل کد، اجرای برنامه، مدیریت وابستگیها، تستنویسی و حتی ساخت مستندات را انجام میدهد. به همین دلیل یادگیری Cargo بهاندازه خود زبان Rust اهمیت دارد.
وقتی ساختار پروژه و فایل Cargo.toml را بهخوبی بشناسید، میتوانید بدون دردسر روی منطق برنامه تمرکز کنید. Cargo بسیاری از مشکلات رایج توسعه نرمافزار را بهصورت خودکار حل میکند و اجازه نمیدهد پروژه از کنترل خارج شود.
جمعبندی روز سوم آموزش Rust
در روز سوم یاد گرفتیم ساختار پروژههای Rust چگونه طراحی شده و هر فایل چه نقشی دارد. همچنین با فایل Cargo.toml و بخشهای مهم آن آشنا شدیم و فهمیدیم چرا این فایل قلب هر پروژه Rust است. این دانش پایهای، مسیر یادگیری مفاهیم پیشرفتهتر Rust را برای شما هموار میکند.
در روز بعدی وارد دنیای متغیرها و قوانین مهم Rust میشویم و درباره immutable و mutable بودن دادهها صحبت خواهیم کرد. از این نقطه به بعد، کمکم وارد منطق اصلی زبان Rust میشویم.