مدیریت پروژههای بزرگ با بستهها، جعبهها (crates) و ماژولها
با نوشتن برنامههای بزرگتر، سازماندهی کد شما اهمیت بیشتری پیدا میکند. با گروهبندی قابلیتهای مرتبط و جدا کردن کدی که ویژگیهای متمایزی دارد، میتوانید مشخص کنید که کد یک ویژگی خاص در کجا پیادهسازی شده و کجا میتوان آن را تغییر داد.
برنامههایی که تا اینجا نوشتهایم، همگی در یک ماژول و در یک فایل بودهاند. با رشد یک پروژه، باید کد را با تقسیم آن به چند ماژول و سپس چند فایل، سازماندهی کنید. یک پکیج میتواند شامل چندین crate دودویی باشد و بهصورت اختیاری یک crate کتابخانهای نیز داشته باشد. با گسترش یک پکیج، میتوانید بخشهایی از آن را به crateهای جداگانه استخراج کنید که به وابستگیهای خارجی تبدیل میشوند. این فصل تمام این تکنیکها را پوشش میدهد. برای پروژههای بسیار بزرگی که از مجموعهای از پکیجهای مرتبط بههم تشکیل شدهاند و با هم رشد میکنند، Cargo قابلیتی به نام workspaces ارائه میدهد که آن را در فصل ۱۴ با عنوان “Cargo Workspaces” بررسی خواهیم کرد.
همچنین درباره جزئیات پیادهسازی که به شما امکان میدهد کد را در سطح بالاتری بازاستفاده کنید صحبت خواهیم کرد: وقتی یک عملیات را پیادهسازی کردهاید، سایر کدها میتوانند از طریق رابط عمومی کد شما آن را فراخوانی کنند بدون این که لازم باشد بدانند چگونه پیادهسازی شده است. نحوه نوشتن کد شما مشخص میکند که کدام بخشها برای سایر کدها عمومی و قابل استفاده هستند و کدام بخشها جزئیات پیادهسازی خصوصی هستند که میتوانید هر زمان بخواهید تغییر دهید. این رویکرد یکی دیگر از روشهایی است که مقدار جزئیاتی که باید به خاطر بسپارید را محدود میکند.
یک مفهوم مرتبط، محدوده (scope) است: زمینهای که در آن کد نوشته شده است و مجموعهای از نامها که به عنوان «در محدوده» تعریف میشوند. هنگام خواندن، نوشتن و کامپایل کد، برنامهنویسان و کامپایلرها باید بدانند که آیا یک نام خاص در یک مکان خاص به متغیر، تابع، ساختار، enum، ماژول، ثابت یا مورد دیگری اشاره دارد و معنای آن مورد چیست. شما میتوانید محدودهها ایجاد کنید و مشخص کنید که کدام نامها در محدوده هستند یا خارج از آن. نمیتوانید دو مورد با نام یکسان در یک محدوده داشته باشید؛ ابزارهایی برای رفع تعارض نامها در دسترس هستند.
Rust مجموعهای از ویژگیها دارد که به شما امکان میدهد سازماندهی کد خود را مدیریت کنید، از جمله جزئیاتی که آشکار میشوند، جزئیاتی که خصوصی هستند، و نامهایی که در هر محدوده در برنامههای شما قرار دارند. این ویژگیها که گاهی به صورت جمعی سیستم ماژول نامیده میشوند شامل موارد زیر هستند:
- Packages: یکی از قابلیتهای Cargo که به شما اجازه میدهد crateها را بسازید، تست کنید و به اشتراک بگذارید
- Crates: یک درخت از ماژولها که یک کتابخانه یا فایل اجرایی تولید میکند
- Modules و use: به شما امکان میدهد سازماندهی، حوزه (scope)، و سطح دسترسی مسیرها را کنترل کنید
- Paths: روشی برای نامگذاری یک آیتم، مانند یک
struct
، تابع، یا ماژول
در این فصل، تمام این ویژگیها را پوشش خواهیم داد، نحوه تعامل آنها را توضیح میدهیم و نحوه استفاده از آنها برای مدیریت محدوده را بررسی میکنیم. تا پایان، باید درک جامعی از سیستم ماژول داشته باشید و بتوانید با محدودهها مانند یک حرفهای کار کنید!