تمرین قواعد ساخت
در ساخت Chromium خود، یک Rust target جدید به //ui/base/BUILD.gn اضافه کنید که حاوی:
#![allow(unused)] fn main() { #[no_mangle] pub extern "C" fn hello_from_rust() { println!("سلام از Rust!") } }
مهم: توجه داشته باشید که no_mangle در اینجا توسط کامپایلر Rust نوعی ناامنی (type of unsafety) در نظر گرفته میشود، بنابراین باید کد unsafe را در gn target خود مجاز کنید.
این هدف جدید Rust را به عنوان وابستگی به //ui/base:base اضافه کنید. این تابع را در بالای ui/base/resource/resource_bundle.cc اعلام کنید (بعداً خواهیم دید که چگونه میتوان این کار را با ابزارهای تولید bindings خودکار کرد):
extern "C" void hello_from_rust();
این تابع را از جایی در ui/base/resource/resource_bundle.cc فراخوانی کنید - ما قسمت بالای ResourceBundle::MaybeMangleLocalizedString را پیشنهاد میکنیم. Chromium را Build و اجرا کنید و مطمئن شوید که “Hello from Rust!” بارها چاپ میشود.
اگر از VSCode استفاده میکنید، اکنون Rust را تنظیم کنید تا در VSCode به خوبی کار کند. این کار در تمرینهای بعدی مفید خواهد بود. اگر موفق شدهاید، میتوانید از کلیک راست روی“Go to definition“ درprintln! استفاده کنید.
کجا میتوان help پیدا کرد
- گزینههای موجود برای
rust_static_librarygn template - اطلاعات درباره
#[no_mangle] - اطلاعات درباره
extern "C" - اطلاعاتی درباره gnهای
--export-rust-projectswitch - How to install rust-analyzer in VSCode
این مثال غیرعادی است زیرا به زبان متقابل با کمترین مخرج مشترک، C خلاصه میشود. بعداً در دوره، ++C آن را مستقیماً به Rust وصل خواهیم کرد.
allow_unsafe = true در اینجا مورد نیاز است زیرا #[no_mangle] ممکن است به Rust اجازه دهد دو تابع با نام یکسان تولید کند و Rust دیگر نمیتواند تضمین کند که تابع مورد نظر فراخوانی شده است.
اگر به یک فایل اجرایی Rust خالص نیاز دارید، میتوانید این کار را با استفاده از الگویrust_executable gn نیز انجام دهید.