راهنمای سبک کدنویسی Rust گوگل منتشر شد
خلاصهٔ کاملتر
گوگل یه style guide برای Rust منتشر کرده که به گفته خودش «سبک» رو فراتر از فرمت کد میبینه و طراحی API و پیادهسازی رو هم شامل میشه. Rust تو google3، Android، ChromeOS، Fuchsia و Chrome استفاده میشه و هدف اینه که کد همه اینجاها یکدست باشه. پایه کار همون Rust Style Guide رسمی و Rust API Guidelines هست و این راهنما فقط جایی که لازم بوده ازشون فاصله گرفته.
طبق متن راهنما، دلیل اصلی این فاصلهها کمک به LSCها هست (یعنی Large-Scale Changes، تغییرات بزرگی که با ابزار روی کل کدبیس اجرا میشن). برای همین قوانین، خوانایی رو به سرعت نوشتن ترجیح میدن. مثلاً glob import ممنوعه چون پیدا کردن منشأ یه تایپ رو سخت میکنه. هر دستور use هم باید فقط از یه ماژول import کنه (همون تنظیم imports_granularity = Module تو rustfmt):
use foo::Foo;
use foo::bar::{Bar, Baz};بخشی از قوانین فقط برای Chromium هستن. اونجا crateها (یعنی واحد کامپایل تو Rust) باید تا جای ممکن کوچیک باشن، حتی یه فایل. فایلهای یه crate هم باید تو یه پوشه تخت باشن، نه زیرپوشه. نویسندهها میگن اگه حس کردی به زیرپوشه نیاز داری، یعنی crate زیادی بزرگ شده و باید شکسته بشه. این برخلاف ساختار معمول Cargo هست.
تو بحث ownership، راهنما میگه سراغ Rc و Arc (اشارهگرهای مالکیت مشترک) نرید مگه اینکه جایگزینش خیلی پیچیده بشه، چون سربار runtime دارن. .clone() هم نباید جای borrow کردن رو بگیره. برای ورودی تابع، &str بهجای &String و &[T] بهجای &Vec بگیرید تا تابع انعطاف بیشتری داشته باشه.
راهنما بین کد کتابخونه و کد اپلیکیشن فرق میذاره. برای کتابخونه، قوانین طراحی API اجباریان؛ مثلاً برگردوندن iterator بهجای Vec یا گرفتن impl Into. ولی برای کد اپلیکیشن فقط توصیهان و سادگی اولویت داره. یه قانون دیگه هم اینه که بهجای پارامتر bool که معنیش معلوم نیست، از enum استفاده کنید.
نکات کلیدی:
- حداکثر طول خط تو rustfmt: ۱۰۰ ستون (max_width = 100)
- glob import جز چند استثنا (مثل use super::* تو ماژولهای inline) ممنوعه
- تو Chromium: crateهای کوچیک و ساختار فایل تخت، برخلاف Cargo
- Rc و Arc فقط وقتی جایگزین خیلی پیچیده باشه
- قوانین API برای کتابخونه اجباری و برای اپلیکیشن توصیهست
- #[rustfmt::skip] فقط برای ترازبندی دستی یا کد تولیدشده مجازه




