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μ μ€κ³μ μ΄λ¬ν μλ₯Ό λ§λ€κΈ°κ° μλΉν μ΄λ ΅μ΅λλ€.