Exercise: Interoperability with C++
1๋ถ
- ์ด์ ์ ๋ง๋ Rust ํ์ผ์์, C++์์ ํธ์ถํ
hello_from_rust
๋ผ๋ ๋จ์ผ ํจ์๋ฅผ ์ง์ ํ๋#[cxx::bridge]
๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ํจ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. - ์ด์ ์
hello_from_rust
ํจ์๋ฅผ ์์ ํ์ฌextern "C"
๋ฐ#[no_mangle]
์ ์ญ์ ํฉ๋๋ค. ์ด ํจ์๋ ์ด์ ํ์ค Rust ํจ์์ ๋๋ค. gn
ํ๊ฒ์ ์์ ํ์ฌ ์ด๋ฌํ ๋ฐ์ธ๋ฉ์ ๋น๋ํฉ๋๋ค.- C++ ์ฝ๋์์
hello_from_rust
์ ์ ๋ฐฉํฅ ์ ์ธ์ ์ญ์ ํฉ๋๋ค. ๋์ ์์ฑ๋ ํค๋ ํ์ผ์ ํฌํจํฉ๋๋ค. - ๋น๋ ๋ฐ ์คํ
2๋ถ
CXX๋ฅผ ์ฌ์ฉํด ๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. Chromium์ Rust๊ฐ ์ค์ ๋ก ์ผ๋ง๋ ์ ์ฐํ์ง ์๊ฐํด ๋ณด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Some things to try:
- Rust์์ C++๋ก ๋ค์ ํธ์ถ ํ์ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
cxx::bridge
์์include!
ํ ์ ์๋ ์ถ๊ฐ ํค๋ ํ์ผ์ ๋๋ค. ์ ํค๋ ํ์ผ์์ C++ ํจ์๋ฅผ ์ ์ธํด์ผ ํฉ๋๋ค.- ์ด๋ฌํ ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ฌ๊ธฐ์ ์ค๋ช
๋ ๋๋ก
#[cxx::bridge]
์์unsafe
ํค์๋๋ฅผ ์ง์ ํ๋unsafe
๋ธ๋ก์ ๋๋ค. #include "third_party/rust/cxx/v1/crate/include/cxx.h"
๊ฐ ํ์ํ ์๋ ์์ต๋๋ค.
- C++์์ Rust๋ก C++ ๋ฌธ์์ด์ ์ ๋ฌํฉ๋๋ค.
- C++ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ Rust๋ก ์ ๋ฌํฉ๋๋ค.
- ์๋์ ์ผ๋ก
#[cxx::bridge]
์์ ์ผ์นํ์ง ์๋ Rust ํจ์ ์๋ช ์ ๊ฐ์ ธ์์ ํ์๋๋ ์ค๋ฅ์ ์ต์ํด์ง๋๋ค. - ์๋์ ์ผ๋ก
#[cxx::bridge]
์์ ์ผ์นํ์ง ์๋ C++ ํจ์ ์๋ช ์ ๊ฐ์ ธ์์ ํ์๋๋ ์ค๋ฅ์ ์ต์ํด์ง๋๋ค. - Rust๊ฐ C++ ๊ฐ์ฒด๋ฅผ ์์ ํ ์ ์๋๋ก C++์์ ์ผ๋ถ ์ ํ์
std::unique_ptr
์ Rust๋ก ์ ๋ฌํฉ๋๋ค. - Rust ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด C++๋ก ์ ๋ฌํ์ฌ C++์์ ์์ ํ๋๋ก ํฉ๋๋ค. ํํธ:
Box
ํ์ - C++ ์ ํ์ ์ผ๋ถ ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค. Rust์์ ์ด๋ฅผ ํธ์ถํ์ธ์.
- Rust ์ ํ์ ์ผ๋ถ ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค. C++์์ ์ด๋ฅผ ํธ์ถํ์ธ์.
3๋ถ
์ง๊ธ๊น์ง CXX ์ํธ ์ด์ฉ์ฑ์ ๊ฐ์ ๊ณผ ํ๊ณ๋ฅผ ์ดํดํ์ผ๋, ์ธํฐํ์ด์ค๊ฐ ์ถฉ๋ถํ ๊ฐ๋จํ Chromium์ Rust ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์๊ฐํด ๋ณด์ธ์. ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ค์ผ์นํฉ๋๋ค.
๋์์ ๋ฐ์ ์ ์๋ ๊ณณ
As students explore Part Two, they're bound to have lots of questions about how
to achieve these things, and also how CXX works behind the scenes.
๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
- ์ ํ Y๋ก ์ ํ X์ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ X์ Y๋ ๋ชจ๋ ํจ์ ์ ํ์
๋๋ค. ์ด๋ C++ ํจ์๊ฐ
cxx::bridge
์ ์ ์ธ๊ณผ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. - C++ ์ฐธ์กฐ๋ฅผ Rust ์ฐธ์กฐ๋ก ์์ ๋กญ๊ฒ ๋ณํํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด UB๊ฐ ๋ฐ์ํ์ง ์์๊น์? CXX์ ๋ถํฌ๋ช ์ ํ์ ๊ฒฝ์ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ํฌ๊ธฐ๊ฐ 0์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. CXX ์ฌ์ํ ์ ํ์ ๊ฒฝ์ฐ UB๋ฅผ ์ ๋ฐํ๋ ๊ฒ์ด _๊ฐ๋ฅ_ํ์ง๋ง CXX์ ์ค๊ณ์ ์ด๋ฌํ ์๋ฅผ ๋ง๋ค๊ธฐ๊ฐ ์๋นํ ์ด๋ ต์ต๋๋ค.