C++ untuk Sempadan FFI Rust
Dedahkan fungsi C++ untuk digunakan oleh FFI Rust dan lakukan perkara sebaliknya.
C++ untuk Sempadan FFI Rust ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
C++ dan Rust
Rust dan C++ ialah bahasa peringkat rendah yang kedua-duanya disusun — tetapi mempunyai ABI dan sistem jenis yang berbeza serta tidak serasi. Biasanya kedua-duanya saling kendali melalui jambatan ABI C.
Rust ke C++: extern "C"
Eksport fungsi Rust dengan extern "C" dan #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}C++ Memanggil Rust
Isytiharkan fungsi Rust dalam C++ dan pautkan dengan pustaka statik Rust.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);C++ ke Rust
Arah sebaliknya — Rust memanggil C++. Bungkus C++ dalam extern "C" dan isytiharkannya dalam Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Memautkan Pustaka Statik
Bina crate Rust sebagai staticlib atau cdylib dan pautkan dengan binaan C++.
# Cargo.toml
[lib]
crate-type = ["staticlib"]bindgen dan cbindgen
Jana pengisytiharan FFI secara automatik:
- bindgen — menjana pengikatan Rust daripada fail pengepala C++
- cbindgen — menjana fail pengepala C/C++ daripada kod Rust
Pustaka cxx
Crate cxx menyediakan saling kendali C++/Rust pada aras lebih tinggi yang lebih selamat. Isytiharkan skema dikongsi; cxx menjana pengikatan pada kedua-dua pihak dengan penaipan kukuh.
Pemilikan Memori Merentasi FFI
Kedua-dua bahasa mempunyai RAII tetapi model pemilikan yang berbeza. Hantar data milik sendiri mengikut nilai, data yang dipinjam melalui penuding mentah — dan dokumentasikan pihak yang membebaskan setiap sumber.
Rentetan Merentasi FFI
String Rust dan std::string C++ tidak serasi. Gunakan *const c_char (ditamatkan null) atau (*const u8, usize) (penuding + panjang).
Pengecualian berbanding panik
Kepanikan Rust dan pengecualian C++ tidak merentasi FFI dengan selamat. Tangkap pengecualian C++ di sempadan; gunakan std::panic::catch_unwind di sisi Rust.
Integrasi Binaan
Gunakan sistem binaan meta: CMake yang memanggil Cargo, atau Cargo yang memanggil CMake melalui skrip binaan (build.rs). Pakej cxx mengendalikan corak umum.
Contoh Dunia Sebenar
Banyak pangkalan kod pengeluaran menggabungkan C++ dan Rust: Mozilla Firefox menggunakan komponen Rust dalam enjin C++; Chromium bereksperimen dengan modul Rust; banyak pustaka kriptografi menyediakan kedua-dua pengikatan.
Semakan Pantas
Atribut Rust manakah yang menyahdayakan pengacauan nama supaya C/C++ dapat mencari simbol tersebut?
Rumusan
Kebolehoperasian C++ dan Rust dilakukan melalui ABI C. Gunakan extern "C" dan #[no_mangle]. Jana pengikatan dengan bindgen dan cbindgen, atau gunakan pakej cxx untuk jambatan bertip yang lebih selamat. Kendalikan pemilikan, rentetan dan kepanikan dengan teliti merentasi sempadan.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “C++ untuk Sempadan FFI Rust” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “C++ untuk Sempadan FFI Rust”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “C++ untuk Sempadan FFI Rust”?
Dedahkan fungsi C++ untuk digunakan oleh FFI Rust dan lakukan perkara sebaliknya. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “C++ untuk Sempadan FFI Rust” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Extern C dan ABI C
- Memanggil Python daripada C++ melalui pybind11
- C++ untuk Sempadan FFI Rust
- Menggunakan SWIG untuk Binding Berbilang Bahasa