تمرین قواعد ساخت
در ساخت 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_library
gn template - اطلاعات درباره
#[no_mangle]
- اطلاعات درباره
extern "C"
- اطلاعاتی درباره gnهای
--export-rust-project
switch - How to install rust-analyzer in VSCode
این مثال غیرعادی است زیرا به زبان متقابل با کمترین مخرج مشترک، C خلاصه میشود. بعداً در دوره، ++C آن را مستقیماً به Rust وصل خواهیم کرد.
allow_unsafe = true
در اینجا مورد نیاز است زیرا #[no_mangle]
ممکن است به Rust اجازه دهد دو تابع با نام یکسان تولید کند و Rust دیگر نمیتواند تضمین کند که تابع مورد نظر فراخوانی شده است.
اگر به یک فایل اجرایی Rust خالص نیاز دارید، میتوانید این کار را با استفاده از الگویrust_executable
gn نیز انجام دهید.