اجرای React Compiler بهصورت نیتیو داخل oxc
خلاصهٔ کاملتر
این پولریکوئست که Boshen (نگهدارندهٔ oxc) بازش کرده، React Compiler رو بهصورت نیتیو داخل oxc یکپارچه میکنه. اساس کار اینه که پورتِ Rustیِ React Compiler (که تو خودِ ریپو React داره ساخته میشه) مستقیم به ابزار جاوااسکریپتیِ oxc وصل بشه، بهجای اینکه جاوااسکریپت رفتوبرگشت داشته باشه. هدفش اینه که مموایزیشنِ کامپوننتهای React با سرعت Rust و توی همون پایپلاین oxc انجام بشه.
قلب کار یه کریت جدید به اسم oxc_react_compiler ـه که لایهٔ تبدیل بین AST خودِ oxc و AST ای که React Compiler میخواد رو نگه میداره (تبدیل رفت، تبدیل برگشت، نگاشت اسکوپ، اعمال تغییر نامها و پیشفیلتر). کریتهای هستهٔ React Compiler هم که فرانتاند-اگنوستیکان بهعنوان وابستگی مصرف میشن.
طبق توضیح کامیتها، یه تست سرتاسری اضافه شده که کل مسیر رو میرونه: پارس و تحلیل معناییِ oxc، تبدیل به فرمت React Compiler، کامپایل، تبدیل برگشت و بعد تولید کدِ نهایی با codegen خودِ oxc. تست بررسی میکنه که نشانههای مموایزیشن (مثل ایمپورتِ react/compiler-runtime و خوندن از کش با _c(n)) واقعاً تو خروجی ظاهر بشن، و یه تست منفی هم تأیید میکنه که پیشفیلتر تابعهای غیر-React رو رد میکنه.
از نظر API، ترنسفورمر یه گزینهٔ جدید به اسم react_compiler میگیره که بهصورت پیشفرض خاموشه (مقدار None). وقتی این گزینه ست بشه، ترنسفورمر React Compiler رو بهعنوان اولین مرحله اجرا میکنه: یه Semantic میسازه، کامپایلر رو میرونه، برنامهٔ کامپایلشده رو جای برنامهٔ اصلی میذاره و اسکوپها رو برای مرحلههای بعدی بازسازی میکنه. یه باگ هم حین کار رفع شده: برنامهٔ تبدیلبرگشتی نوعِ سورس رو از دست میداد و در نتیجه مرحلههای TS و JSX پاییندستی رد میشدن؛ حالا نوعِ سورسِ اصلی روی برنامهٔ کامپایلشده حفظ میشه.
از سمت جاوااسکریپت هم باندینگِ napi یه گزینهٔ reactCompiler به transform() اضافه میکنه که میتونه true (با تنظیمات پیشفرض) یا یه آبجکت تنظیمات باشه، و تمام فیلدهای سطح-بالای PluginOptions رو فوروارد میکنه. نویسنده میگه پیکربندیِ عمیق و ۴۰-فیلدیِ محیط عمداً سطحی نشده.
یه نکتهٔ جالب دربارهٔ انتشار: کریتهای منتشرشده نمیتونن به آدرس Git وابسته باشن، برای همین یه فورک از کریتهای React Compiler با نام forked_react_compiler و مجوز MIT روی crates.io منتشر شده تا هم Cargo Deny و تحلیل امنیتی پاس بشن و هم Rolldown بتونه ازش استفاده کنه. ربات بنچمارک هم گزارش داده که مرج این تغییر روی کارایی اثری نداره.
نکات کلیدی:
- React Compiler بهصورت نیتیو و با Rust داخل oxc اجرا میشه، بدون رفتوبرگشت به JS
- کریت oxc_react_compiler لایهٔ تبدیل AST بین دو طرف رو نگه میداره
- گزینهٔ react_compiler ترنسفورمر پیشفرض خاموشه و بهعنوان اولین مرحله اجرا میشه
- باندینگِ napi گزینهٔ reactCompiler رو به transform() اضافه میکنه
- یه فورک با مجوز MIT روی crates.io منتشر شده تا مشکل وابستگی و مجوز حل بشه




