هناك نوعان من وحدات مكتبة Rust، أحدهما يُنشئ مكتبات Rust و
الآخر يُنشئ مكتبات متوافقة مع C. بالإضافة إلى ذلك، لأغراض
نظام الإنشاء، يمكنك اعتبار وحدات الماكرو البروتوكولية في Rust (proc-macros
) نوعًا special
من المكتبات.
مكتبة rust
تُنشئ وحدة rust_library
مكتبات Rust لاستخدامها من قِبل وحدات Rust الأخرى.
بالإضافة إلى أنواع _host
، تحتوي مكتبات Rust على أنواع وحدات تتحكّم في
عمليات الربط المتاحة.
نوع وحدة مكتبة Rust | التعريف |
---|---|
rust_library | يوفّر كلا خيارَي المكتبة، rlib وdylib . ينصح إطار عمل AOSP باستخدام نوع الوحدات
هذا لمكتبات Rust، لأنّه يسمح للوحدات
بالعمل بشكل صحيح عند إدراجها كعنصر تابع ضمن السمة rustlibs
. |
rust_library_rlib | لا يوفّر سوى الصيغة rlib من مكتبة Rust. ولا يمكن ضمان توافق الوحدات التي توفّر صيغ rlib فقط مع السمة rustlibs . |
rust_library_dylib | لا يوفّر سوى الصيغة dylib من مكتبة Rust. ولا يمكن ضمان توافق الوحدات التي توفّر صيغ dylib فقط مع السمة rustlibs . |
rust_ffi
تُنشئ وحدة rust_ffi
مكتبات متوافقة مع C للتوافق مع وحدات CC.
بالإضافة إلى الصيغ _host
، تحتوي مكتبات Rust FFI على أنواع وحدات تتحكم في عملية الربط المتاحة، كما هو موضّح في الجدول التالي.
نوع وحدة مكتبة Rust FFI | التعريف |
---|---|
rust_ffi | توفّر كل من الصيغتَين لـ C library: الثابتة والمشترَكة. |
rust_ffi_shared | يوفّر هذا الخيار الصيغة C من المكتبة المشتركة فقط. |
rust_ffi_static | توفّر هذه السياسة متغير مكتبة C الثابتة فقط. |
للحصول على مثال أساسي لاستخدام rust_ffi
للاتصال بـ Rust من C، اطّلِع على صفحة
أنماط Rust في Android.
للحصول على معلومات عن الاستخدامات الأكثر تقدمًا، يُرجى الانتقال إلى مستندات 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 متطلبات معينة على أسماء ملفات المكتبة، ونتيجةً لذلك، يفرض نظام الإصدار هذه المتطلبات لتجنّب مشاكل التحويل البرمجي.
يجب أن يمتثل اسم ملف الإخراج لتنسيق |
crate_name | هذه سمة مطلوبة للوحدات الخاصة بإنتاج المكتبة، ولها علاقة أيضًا باسم ملف المخرجات. (اطّلِع على تعريف stem ). |
export_include_dirs | بالنسبة إلى وحدات rust_ffi ، تحدِّد هذه السمة قائمة من السلاسل التي تمثّل مسارات تضمين نسبية: المسارات التي تحتوي على عناوين يمكن أن تستخدمها وحدات cc التابعة. |
ربط rust_library أو rust_ffi
يتمّ تلقائيًا ربط وحدات مكتبة Rust التي تستهدف الأجهزة ديناميكيًا
باستخدام libstd
. في المقابل، فإنّ وحدات المضيف تكون مرتبطة دائمًا
بشكل ثابت مقابل libstd
.
يعتمد الربط المستخدَم لتبعيات rustlibs
على الإعدادات المفضّلة للربط في الوحدة الجذر. (على سبيل المثال، سيؤدي استخدام rust_binary
مع prefer_rlib: true
إلى
استخدام صيغ مكتبة Rust التي تربط rustlibs
باسم rlibs
).
للسماح بإنشاء وحدات التبعيات الأساسية التي لا تعتمد على أي مكتبات rlibs
ديناميكية (مثل ملفات التشغيل الثابتة)، يوفّر rlibs
نوعَي ربط libstd
، هما الربط الديناميكي والربط الثابت. يتم ربط المتغير الصحيح تلقائيًا
بواسطة Soong.