مقدمه

به فصل «مطالب بیشتر در مورد Cargo و crates.io» خوش آمدید. در این فصل، به بررسی قابلیت‌های پیشرفته‌تر Cargo می‌پردازیم که به ما در مدیریت، توزیع و بهینه‌سازی پروژه‌هایمان کمک می‌کنند.

در Rust، «پروفایل‌های بیلد» (Build Profiles) مجموعه‌های از پیش تعریف‌شده‌ای از گزینه‌های کامپایلر هستند که به ما اجازه می‌دهند تا کنترل دقیقی بر روی نحوه کامپایل شدن کدمان داشته باشیم. با تغییر پروفایل، می‌توانیم بین سرعت کامپایل در حین توسعه و عملکرد کد نهایی در زمان اجرا، یک مصالحه (trade-off) ایجاد کنیم. Cargo به صورت پیش‌فرض دو پروفایل اصلی دارد: پروفایل dev برای توسعه و پروفایل release برای انتشار.

پروفایل dev در مقابل پروفایل release

وقتی شما دستور cargo build را اجرا می‌کنید، Cargo به صورت پیش‌فرض از پروفایل dev استفاده می‌کند. این پروفایل برای سرعت بخشیدن به فرآیند توسعه بهینه‌سازی شده است. در این حالت، بهینه‌سازی‌های کامپایلر غیرفعال هستند تا زمان کامپایل به حداقل برسد، اما کد نهایی کندتر اجرا می‌شود.

وقتی شما دستور cargo build --release را اجرا می‌کنید، Cargo از پروفایل release استفاده می‌کند. این پروفایل برای تولید یک فایل اجرایی با حداکثر عملکرد ممکن بهینه‌سازی شده است. در این حالت، کامپایلر زمان بیشتری را صرف بهینه‌سازی‌های مختلف (مانند inlining توابع) می‌کند. زمان کامپایل طولانی‌تر است، اما کد نهایی بسیار سریع‌تر اجرا خواهد شد. این همان پروفایلی است که شما باید همیشه برای نسخه‌ای که قرار است به دست کاربر نهایی برسد، استفاده کنید.

سفارشی‌سازی پروفایل‌ها در Cargo.toml

تنظیمات پیش‌فرض این پروفایل‌ها برای اکثر پروژه‌ها مناسب است، اما شما می‌توانید آنها را با افزودن یک بخش [profile] به فایل Cargo.toml خود، سفارشی کنید.

Copy Icon Cargo.toml
[profile.dev]
opt-level = 0  # Default for dev

[profile.release]
opt-level = 3  # Default for release

گزینه opt-level سطح بهینه‌سازی کامپایلر را کنترل می‌کند و می‌تواند مقداری بین ۰ (بدون بهینه‌سازی) تا ۳ (حداکثر بهینه‌سازی) داشته باشد. شما می‌توانید این مقادیر را برای هر پروفایل تغییر دهید. برای مثال، اگر در حین توسعه بخواهید کمی بهینه‌سازی داشته باشید، می‌توانید opt-level پروفایل dev را به ۱ افزایش دهید.

مستندسازی کد با cargo doc

یکی دیگر از ویژگی‌های فوق‌العاده Cargo، توانایی آن در تولید خودکار مستندات برای پروژه شماست. با اجرای دستور cargo doc، Cargo تمام کامنت‌های مستندسازی (documentation comments) در کد شما را خوانده و یک وب‌سایت HTML کامل و قابل جستجو از مستندات API پروژه شما ایجاد می‌کند.

کامنت‌های مستندسازی

کامنت‌های مستندسازی از سه اسلش (///) برای آیتم‌های بیرونی (مانند توابع و structها) و از //! برای آیتم‌های درونی (مانند ماژول‌ها) استفاده می‌کنند. این کامنت‌ها از Markdown پشتیبانی می‌کنند که به شما اجازه می‌دهد تا کد مثال، لیست‌ها و قالب‌بندی‌های دیگر را به مستندات خود اضافه کنید.

Copy Icon src/lib.rs
//! # My Crate
//!
//! `my_crate` is a collection of utilities to make certain calculations more convenient.

/// Adds one to the number given.
///
/// # Examples
///
/// ```
/// let arg = 5;
/// let answer = my_crate::add_one(arg);
///
/// assert_eq!(6, answer);
/// ```
pub fn add_one(x: i32) -> i32 {
    x + 1
}

Cargo پس از اجرای cargo doc --open، مستندات را ساخته و آن را در مرورگر شما باز می‌کند. نکته جالب این است که Cargo کد مثال‌های داخل مستندات را نیز به عنوان تست اجرا می‌کند تا از صحت و به‌روز بودن آنها اطمینان حاصل کند!

در این درس با پروفایل‌های بیلد در Cargo و نقش آنها در بهینه‌سازی فرآیند توسعه و انتشار آشنا شدیم. همچنین دیدیم که چگونه می‌توان با استفاده از کامنت‌های مستندسازی و دستور cargo doc، به راحتی مستندات حرفه‌ای برای کتابخانه‌های خود ایجاد کنیم. این ابزارها به ما کمک می‌کنند تا پروژه‌های Rust را به صورت کارآمد و حرفه‌ای مدیریت کنیم. در درس بعدی، به بررسی نحوه «انتشار یک Crate» در رجیستری عمومی crates.io خواهیم پرداخت تا بتوانیم کدهای خود را با جامعه بزرگ Rust به اشتراک بگذاریم.