مقدمه
به فصل «مطالب بیشتر در مورد 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 خود، سفارشی کنید.
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 پشتیبانی
میکنند که به شما اجازه میدهد تا کد مثال، لیستها و قالببندیهای دیگر را به مستندات خود اضافه
کنید.
src/lib.rs
pub fn add_one(x: i32) -> i32 {
x + 1
}
Cargo پس از اجرای cargo doc --open، مستندات را ساخته و آن را در مرورگر شما باز میکند.
نکته جالب این است که Cargo کد مثالهای داخل مستندات را نیز به عنوان تست اجرا میکند تا از
صحت و بهروز بودن آنها اطمینان حاصل کند!
در این درس با پروفایلهای بیلد در Cargo و نقش آنها در بهینهسازی فرآیند توسعه و انتشار
آشنا شدیم. همچنین دیدیم که چگونه میتوان با استفاده از کامنتهای مستندسازی و دستور cargo doc،
به راحتی مستندات حرفهای برای کتابخانههای خود ایجاد کنیم. این ابزارها به ما کمک میکنند تا
پروژههای Rust را به صورت کارآمد و حرفهای مدیریت کنیم. در درس بعدی، به بررسی نحوه «انتشار یک
Crate» در رجیستری عمومی crates.io خواهیم پرداخت تا بتوانیم کدهای خود را با جامعه بزرگ Rust به
اشتراک بگذاریم.