پورت React Compiler به Rust
خلاصهٔ کاملتر
به گفتهٔ josephsavona که این PR رو باز کرده، این یه پورت آزمایشی و در حال توسعه از React Compiler به زبان Rust هست که زودتر از تست داخلی توی Meta منتشر شده تا از شرکای پروژه فیدبک بگیرن. هنوز build آمادهای وجود نداره و اگه بخوای امتحانش کنی باید یه کم دستکاری کنی. نکتهٔ جالب اینه که معماریش رو آدمها (خود نویسنده) بهصورت عملی هدایت کردن، ولی بخش عمدهٔ کدنویسیش رو AI انجام داده و نویسنده میگه وقت زیادی گذاشته تا کیفیت کد به سطح قابلقبولی برسه.
از نظر معماری، نسخهٔ Rust دقیقاً همون ساختار نسخهٔ تایپاسکریپت رو داره. کامپایلر، AST رو به یه نمایش میانی خودش به اسم HIR (سرنام High-level Intermediate Representation) تبدیل میکنه که از گراف کنترلجریان (CFG) و فرم SSA استفاده میکنه، و بعد همون سری passها با همون الگوریتمها اجرا میشن. نویسنده میگه این یه پورت کاملاً pass-by-pass هست و تفاوت اصلیش تو نمایش دادههاست؛ از ساختارهای arena-مانند و ایندکس توی این arenaها استفاده شده تا با سیستم borrowing زبان Rust جور دربیاد.
طبق ادعای نویسنده، عددهای اولیهٔ کارایی از AI گرفته شده و خودش هنوز خیلی روی درستی بنچمارکها وقت نذاشته، ولی با این احتیاط، نسخهٔ Rust خیلی سریع بهنظر میرسه. وقتی بهعنوان پلاگین Babel کار میکنه حدود ۳ برابر سریعتره؛ هزینهٔ serialization بالاست، ولی خود منطق ترنسفورم حدود ۱۰ برابر سریعتره، پس در مجموع سریعتر درمیاد. یکپارچهسازیهای native مثل OXC و SWC باید حتی سریعتر هم باشن.
از نظر درستی، نویسنده میگه هر ۱۷۲۵ فیکسچر تو snap پاس میشن، هم خروجی کد تولیدشده و هم خطاها مقایسه میشن. علاوه بر این، حالت داخلی کامپایلر بعد از هر pass تقریباً یکسانه (با کمی نرمالسازی idها). سه یکپارچهسازی الان وجود داره: یه پلاگین جایگزین Babel که بعداً حذف میشه، و نمونههایی از اینکه یکپارچهسازی OXC و SWC چه شکلی میتونه باشه (تو کریتهای react_compiler_oxc و react_compiler_swc).
نویسنده میگه API عمومی اساساً «Rust Babel AST + اطلاعات scope» ورود و «Rust Babel AST» خروجی هست. هر یکپارچهسازی (Babel، OXC، SWC) به/از نمایش native خودش تبدیل میکنه. فعلاً هر یکپارچهسازی باید اطلاعات scope رو هم بده، چون نسخهٔ کامپایلر هنوز تحلیل scope خودش رو پیاده نکرده. تیم برای کار روی این یکپارچهسازیها دنبال شریکه و از پروژههای OXC و SWC دعوت کرده شروع کنن.
نکات کلیدی:
- پورت آزمایشی React Compiler از تایپاسکریپت به Rust، با معماری یکسان و انتقال pass به pass
- بخش عمدهٔ کد رو AI نوشته، ولی معماری و استراتژی تست و تأیید رو آدم هدایت کرده
- منطق ترنسفورم حدود ۱۰ برابر و کل پلاگین Babel حدود ۳ برابر سریعتره
- از HIR با CFG و SSA و ساختارهای arena-مانند برای سازگاری با borrowing زبان Rust استفاده میکنه
- API عمومی روی Babel AST بنا شده تا با OXC و SWC یکپارچه بشه




