تمرین قواعد ساخت
در ساخت Chromium خود، یک Rust target جدید به //ui/base/BUILD.gn
اضافه کنید که حاوی:
مهم: توجه داشته باشید که 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
Speaker Notes
It's really important that students get this running, because future exercises
will build on it.
این مثال غیرعادی است زیرا به زبان متقابل با کمترین مخرج مشترک، C خلاصه میشود. بعداً در دوره، ++C آن را مستقیماً به Rust وصل خواهیم کرد.
allow_unsafe = true
در اینجا مورد نیاز است زیرا #[no_mangle]
ممکن است به Rust اجازه دهد دو تابع با نام یکسان تولید کند و Rust دیگر نمیتواند تضمین کند که تابع مورد نظر فراخوانی شده است.
اگر به یک فایل اجرایی Rust خالص نیاز دارید، میتوانید این کار را با استفاده از الگویrust_executable
gn نیز انجام دهید.