λΉŒλ“œ κ·œμΉ™

Chromium λΉŒλ“œμ—μ„œ λ‹€μŒμ„ ν¬ν•¨ν•˜λŠ” //ui/base/BUILD.gn에 μƒˆ Rust νƒ€κ²Ÿμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

#![allow(unused)]
fn main() {
#[no_mangle]
pub extern "C" fn hello_from_rust() {
    println!("Hello from Rust!")
}
}

μ€‘μš”: μ—¬κΈ°μ„œ no_mangle은 Rust μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μ•ˆμ „ν•˜μ§€ μ•Šμ€ μœ ν˜•μœΌλ‘œ κ°„μ£Όλ˜λ―€λ‘œ gn νƒ€κ²Ÿμ—μ„œ μ•ˆμ „ν•˜μ§€ μ•Šμ€ μ½”λ“œλ₯Ό ν—ˆμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이 μƒˆλ‘œμš΄ Rust νƒ€κ²Ÿμ„ //ui/base:base의 쒅속 ν•­λͺ©μœΌλ‘œ μΆ”κ°€ν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜λ₯Ό ui/base/resource/resource_bundle.cc의 맨 μœ„μ—μ„œ μ„ μ–Έν•©λ‹ˆλ‹€. λ‚˜μ€‘μ— 바인딩 생성 λ„κ΅¬λ‘œ μžλ™ν™”ν•˜λŠ” 방법을 μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.

extern "C" void hello_from_rust();

ui/base/resource/resource_bundle.cc의 μ–΄λ”˜κ°€μ—μ„œ 이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. ResourceBundle::MaybeMangleLocalizedString의 상단이 μ’‹μŠ΅λ‹ˆλ‹€. Chromium을 λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•˜μ—¬ ’Hello from Rust!’가 μ—¬λŸ¬ 번 좜λ ₯λ˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

VSCodeλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 이제 VSCodeμ—μ„œ 잘 μž‘λ™ν•˜λ„λ‘ Rustλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 이후 μ—°μŠ΅μ—μ„œ μœ μš©ν•©λ‹ˆλ‹€. μ„±κ³΅ν•˜λ©΄ println!μ—μ„œ β€™μ •μ˜λ‘œ 이동’을 마우슀 였λ₯Έμͺ½ λ²„νŠΌμœΌλ‘œ 클릭할 수 μžˆμŠ΅λ‹ˆλ‹€.

도움을 받을 수 μžˆλŠ” κ³³

It's really important that students get this running, because future exercises will build on it.

이 μ˜ˆλŠ” μ΅œμ†Œ 곡톡뢄λͺ¨ μƒν˜Έ μš΄μš©μ„± 언어인 C둜 κ·€κ²°λ˜κΈ° λ•Œλ¬Έμ— μΌλ°˜μ μ΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. C++와 Rust λͺ¨λ‘ 기본적으둜 C ABI ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ³Όμ •μ˜ ν›„λ°˜λΆ€μ—μ„œ C++λ₯Ό Rust에 직접 μ—°κ²°ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ allow_unsafe = trueκ°€ ν•„μš”ν•œ μ΄μœ λŠ” #[no_mangle]이 Rustκ°€ 이름이 같은 ν•¨μˆ˜ 두 개λ₯Ό 생성할 수 μžˆλ„λ‘ ν•  수 있고 RustλŠ” 더 이상 μ˜¬λ°”λ₯Έ ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€κ³  보μž₯ν•  수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μˆœμˆ˜ν•œ Rust μ‹€ν–‰ 파일이 ν•„μš”ν•˜λ©΄ rust_executable gn ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.