ماژول های کتابخانه

دو نوع ماژول کتابخانه Rust وجود دارد، یکی که کتابخانه‌های Rust تولید می‌کند و دیگری که کتابخانه‌های سازگار با C را تولید می‌کند. علاوه بر این، برای اهداف سیستم ساخت، می‌توانید ماکروهای رویه‌ای Rust ( proc-macros ) را به عنوان نوع خاصی از کتابخانه در نظر بگیرید.

کتابخانه زنگ زده

ماژول rust_library کتابخانه‌های Rust را برای استفاده توسط سایر ماژول‌های Rust تولید می‌کند.

علاوه بر انواع _host ، کتابخانه‌های Rust انواع ماژول‌هایی دارند که پیوند موجود را کنترل می‌کنند.

نوع ماژول کتابخانه Rust تعریف
کتابخانه زنگ زده هر دو نوع کتابخانه، rlib و dylib را ارائه می‌دهد. AOSP این نوع ماژول را برای کتابخانه‌های Rust توصیه می‌کند، زیرا به ماژول‌ها اجازه می‌دهد تا وقتی به عنوان یک وابستگی در زیر ویژگی rustlibs فهرست می‌شوند، به درستی کار کنند.
کتابخانه زنگ زده فقط نوع rlib از کتابخانه Rust را ارائه می‌دهد؛ نمی‌توان تضمین کرد که ماژول‌هایی که فقط انواع rlib را ارائه می‌دهند با ویژگی rustlibs کار کنند.
کتابخانه زنگ زده_دی لیب فقط نوع dylib از کتابخانه Rust را ارائه می‌دهد؛ نمی‌توان تضمین کرد که ماژول‌هایی که فقط انواع dylib را ارائه می‌دهند، با ویژگی rustlibs کار کنند.

rust_ffi

ماژول rust_ffi کتابخانه‌های سازگار با زبان C را برای تعامل با ماژول‌های CC تولید می‌کند.

علاوه بر انواع _host ، کتابخانه‌های Rust FFI انواع ماژول‌هایی دارند که پیوند موجود را کنترل می‌کنند، که در جدول زیر نشان داده شده است.

نوع ماژول کتابخانه Rust FFI تعریف
rust_ffi هر دو نوع کتابخانه C را ارائه می‌دهد: استاتیک و اشتراکی.
rust_ffi_shared فقط نوع کتابخانه اشتراکی C را ارائه می‌دهد.
rust_ffi_static فقط نوع کتابخانه استاتیک C را ارائه می‌دهد.

برای یک مثال ساده از استفاده از rust_ffi برای فراخوانی Rust از زبان C، به صفحه الگوهای Rust اندروید مراجعه کنید.

برای اطلاعات بیشتر در مورد کاربردهای پیشرفته‌تر، به مستندات رسمی Rust مراجعه کنید.

rust_proc_macro

ماکروهای رویه‌ای Rust (proc-macros) می‌توانند برای گسترش کامپایلر جهت انجام تبدیلات کد منبع یا ارائه ویژگی‌های جدید مفید باشند. اطلاعات بیشتر در مورد این موارد را می‌توانید در صفحه ماکروهای رویه‌ای مستندات رسمی Rust بیابید.

برای اهداف سیستم ساخت، ماژول rust_proc_macro مشابه ماژول‌های rust_library عمل می‌کند. برای ماژول‌هایی که به rust_proc_macros وابسته هستند، نام ماژول را به ویژگی proc_macros اضافه کنید.

از آنجایی که proc_macros افزونه‌های کامپایلر هستند، لزوماً میزبان را هدف قرار می‌دهند و هیچ کدی تولید نمی‌کنند که روی یک دستگاه اجرا شود.

ویژگی‌های قابل توجه کتابخانه Rust

ویژگی‌های تعریف‌شده در جدول زیر علاوه بر ویژگی‌های مشترک مهمی هستند که برای همه ماژول‌ها اعمال می‌شوند. این ویژگی‌ها یا به‌طور ویژه برای ماژول‌های کتابخانه Rust مهم هستند، یا رفتار منحصربه‌فردی را مختص به نوع ماژول rust_library نشان می‌دهند.

ویژگی‌های کتابخانه Rust تعریف
ساقه / نام ویژگی stem نام فایل کتابخانه خروجی را کنترل می‌کند، که در غیر این صورت به طور پیش‌فرض name است.

کامپایلر Rust الزامات خاصی را برای نام فایل‌های کتابخانه اعمال می‌کند و در نتیجه سیستم ساخت، این الزامات را برای جلوگیری از مشکلات کامپایل اعمال می‌کند. نام فایل خروجی باید با فرمت lib<crate_name><suffix> مطابقت داشته باشد. (در اینجا وابستگی به ویژگی crate_name وجود دارد).

نام جعبه این یک ویژگی الزامی برای ماژول‌های تولیدکننده کتابخانه است؛ علاوه بر این، با نام فایل خروجی نیز رابطه دارد. (به تعریف stem مراجعه کنید.)
دایرکتوری‌های شامل_صادرات برای ماژول‌های rust_ffi ، این ویژگی فهرستی از رشته‌ها را تعریف می‌کند که نشان‌دهنده مسیرهای نسبی include هستند: مسیرهایی که حاوی هدرهایی هستند که ماژول‌های cc وابسته می‌توانند از آنها استفاده کنند.

پیوند rust_library یا rust_ffi

به طور پیش‌فرض، ماژول‌های کتابخانه Rust که دستگاه‌ها را هدف قرار می‌دهند، همیشه به صورت پویا به libstd متصل هستند. با این حال، ماژول‌های میزبان همیشه به صورت ایستا به libstd متصل هستند.

پیوندی که برای وابستگی‌های rustlibs استفاده می‌شود، به تنظیمات پیوند ماژول ریشه بستگی دارد. (برای مثال، یک rust_binary با prefer_rlib: true از انواع کتابخانه Rust استفاده می‌کند که rustlibs به عنوان rlibs پیوند می‌دهند.)

برای اینکه امکان تولید ماژول‌های وابستگی ریشه که به هیچ کتابخانه پویای Rust (مانند فایل‌های اجرایی ایستا) متکی نیستند، فراهم شود، rlibs هر دو نوع پیوند پویا و ایستا libstd را ارائه می‌دهد. نوع صحیح به طور خودکار توسط Soong پیوند داده می‌شود.