์์
CXX์์๋ ์ ์ฒด C++/Rust ๊ฒฝ๊ณ๊ฐ .rs
์์ค ์ฝ๋ ๋ด์ cxx::bridge
โmodulesโ์ ์ ์ธ๋์ด์ผ ํฉ๋๋ค.
#[cxx::bridge]
mod ffi {
extern "Rust" {
type MultiBuf;
fn next_chunk(buf: &mut MultiBuf) -> &[u8];
}
unsafe extern "C++" {
include!("example/include/blobstore.h");
type BlobstoreClient;
fn new_blobstore_client() -> UniquePtr<BlobstoreClient>;
fn put(self: &BlobstoreClient, buf: &mut MultiBuf) -> Result<u64>;
}
}
// Rust ์ ํ ๋ฐ ํจ์์ ์ ์๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ฐธ๊ณ :
- Although this looks like a regular Rust
mod
, the#[cxx::bridge]
procedural macro does complex things to it. The generated code is quite a bit more sophisticated - though this does still result in amod
calledffi
in your code. - Rust์์ C++โ์
std::unique_ptr
๊ธฐ๋ณธ ์ง์ - Native support for Rust slices in C++
- C++์์ Rust ํธ์ถ ๋ฐ Rust ์ ํ(์๋จ)
- Rust์์ C++ ํธ์ถ ๋ฐ C++ ์ ํ(ํ๋จ)
์ผ๋ฐ์ ์ธ ์คํด: C++ ํค๋๊ฐ Rust์์ ํ์ฑ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์คํด์ ์์ง๊ฐ ์์ต๋๋ค. ์ด ํค๋๋ Rust์์ ํด์๋์ง ์์ผ๋ฉฐ C++ ์ปดํ์ผ๋ฌ์ ์ด์ ์ ์ํด ์์ฑ๋ C++ ์ฝ๋์ ๋จ์ํ #include
๋ฉ๋๋ค.