Вправа правил побудови
У вашій збірці Chromium додайте нову ціль Rust до файлу //ui/base/BUILD.gn, що містить:
#![allow(unused)] fn main() { // БЕЗПЕКА: Не існує іншої глобальної функції з таким іменем. #[unsafe(no_mangle)] pub extern "C" fn hello_from_rust() { println!("Привіт від 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, налаштуйте Rust для роботи у VSCode. Це стане у нагоді у наступних вправах. Якщо вам це вдалося, ви зможете скористатися командою “Go to definition” правою кнопкою миші на println!.
Де знайти допомогу
- Опції, доступні для 
rust_static_libraryшаблону gn - Інформація про 
#[unsafe(no_mangle)] - Інформація про 
extern "C" - Інформація про перемикач 
--export-rust-projectgn - Як встановити rust-analyzer у VSCode
 
Цей приклад є незвичайним, тому що він зводиться до мови взаємодії з найменшим спільним знаменником - C. І C++, і Rust можуть оголошувати та викликати функції C ABI на мові C. Пізніше у курсі ми підключимо C++ безпосередньо до Rust.
Тут потрібен allow_unsafe = true, оскільки #[unsafe(no_mangle)] може дозволити Rust згенерувати дві функції з однаковими іменами, і Rust більше не зможе гарантувати, що буде викликано правильну функцію.
Якщо вам потрібен чистий виконуваний файл Rust, ви також можете зробити це за допомогою шаблону gn rust_executable.