Modul Perpustakaan

Ada dua jenis modul perpustakaan Rust, satu yang menghasilkan perpustakaan Rust dan satu lagi yang menghasilkan perpustakaan yang kompatibel dengan C. Selain itu, untuk tujuan sistem pembangunan, Anda dapat mempertimbangkan makro prosedural Rust ( proc-macros ) sebagai jenis pustaka khusus.

rust_library

Modul rust_library menghasilkan pustaka Rust untuk digunakan oleh modul Rust lainnya.

Selain varian _host , pustaka Rust memiliki tipe modul yang mengontrol tautan yang tersedia.

Jenis Modul Perpustakaan Rust Definisi
rust_library Menyediakan varian library, rlib dan dylib . AOSP merekomendasikan jenis modul ini untuk perpustakaan Rust, karena memungkinkan modul untuk bekerja dengan benar ketika terdaftar sebagai ketergantungan di bawah properti rustlibs
rust_library_rlib Hanya menyediakan varian rlib dari perpustakaan Rust; modul yang hanya menyediakan varian rlib tidak dapat dijamin berfungsi dengan properti rustlibs .
rust_library_dylib Hanya menyediakan varian dylib dari perpustakaan Rust; modul yang hanya menyediakan varian dylib tidak dapat dijamin berfungsi dengan properti rustlibs .

rust_ffi

Modul rust_ffi menghasilkan pustaka yang kompatibel dengan C untuk interop dengan modul CC.

Selain varian _host , pustaka Rust FFI memiliki tipe modul yang mengontrol tautan yang tersedia, yang ditunjukkan pada tabel berikut.

Jenis Modul Perpustakaan FFI Rust Definisi
rust_ffi Menyediakan kedua varian pustaka C: statis dan bersama.
rust_ffi_shared Hanya menyediakan varian pustaka bersama C.
rust_ffi_static Hanya menyediakan varian pustaka statis C.

Untuk contoh dasar penggunaan rust_ffi untuk memanggil Rust dari C, lihat halaman Android Rust Patterns .

Untuk informasi tentang penggunaan lebih lanjut, kunjungi dokumentasi resmi Rust .

rust_proc_macro

Makro prosedural karat (proc-makro) dapat berguna untuk memperluas kompiler untuk melakukan transformasi kode sumber atau menyediakan atribut baru. Informasi lebih lanjut dapat ditemukan di halaman Macro Prosedural dari dokumentasi resmi Rust.

Untuk keperluan sistem pembangunan, modul rust_proc_macro bekerja mirip dengan modul rust_library . Untuk modul yang bergantung pada rust_proc_macros , tambahkan nama modul ke properti proc_macros .

Karena proc_macros adalah plugin kompiler, mereka harus menargetkan host dan tidak menghasilkan kode apa pun yang akan berjalan di perangkat.

Properti perpustakaan Rust yang terkenal

Properti yang ditentukan dalam tabel di bawah ini adalah tambahan dari Properti umum penting yang berlaku untuk semua modul. Ini sangat penting untuk modul perpustakaan Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_library .

Properti Perpustakaan Rust Definisi
batang / nama Properti stem mengontrol nama file perpustakaan keluaran, yang jika tidak default ke name .

Kompiler Rust memberlakukan persyaratan tertentu pada nama file perpustakaan, dan sebagai hasilnya, sistem build memberlakukan persyaratan ini untuk menghindari masalah kompilasi. Nama file keluaran harus sesuai dengan format lib<crate_name><suffix> . (Ada ketergantungan di sini pada properti crate_name ).

peti_nama Ini adalah properti yang diperlukan untuk modul penghasil perpustakaan; itu juga memiliki hubungan dengan nama file keluaran. (Lihat definisi stem .)
include_dirs Untuk modul rust_ffi , properti ini mendefinisikan daftar string yang mewakili relative include paths: path yang berisi header yang dapat digunakan modul cc dependen.

Tautan rust_library atau rust_ffi

Secara default, modul perpustakaan Rust yang menargetkan perangkat selalu ditautkan secara dinamis dengan libstd . Modul host, bagaimanapun, selalu ditautkan secara statis terhadap libstd .

Tautan yang digunakan untuk dependensi rustlibs bergantung pada preferensi tautan modul root. (Misalnya, rust_binary dengan prefer_rlibs akan menggunakan varian pustaka Rust yang menautkan rustlibs sebagai rlibs .)

Untuk memungkinkan produksi modul dependensi root yang tidak bergantung pada pustaka rust dinamis apa pun (seperti executable statis), rlibs menyediakan varian tautan libstd dinamis dan statis. Varian yang benar secara otomatis ditautkan oleh Soong.