اکسپو ماژولهای نیتیو رو خیلی سادهتر کرد
خلاصهٔ کاملتر
نوشتن ماژول نیتیو برای ریاکت نیتیو قراره خیلی راحتتر و سریعتر بشه. تو Expo Modules 2.0، یه ماژول فقط یه کلاس سوییفت یا کاتلین با چندتا annotation ـه؛ متدها و پراپرتیهایی که میخوای تو جاوااسکریپت در دسترس باشن رو مشخص میکنی و همین. تو نسخهی ۱، باید یه زبان مخصوص خود اکسپو (result builder DSL) رو یاد میگرفتی با چیزایی مثل Function، AsyncFunction و Property؛ تو نسخهی ۲ همهی اینها فقط سینتکس معمولی سوییفته.
متد async سوییفت خودکار تو جاوااسکریپت به یه Promise تبدیل میشه، پراپرتیهای قابل نوشتن سوییفت (var) تو JS هم قابل نوشتنن، و پراپرتیهای فقطخواندنی (let) فقطخواندنی میمونن؛ یعنی نوع و رفتارشون مستقیم از خود کد سوییفت خونده میشه. مهاجرت هم لازم نیست یهجا انجام بشه: میتونی همزمان از تعریف قدیمی و annotationهای جدید تو یه ماژول استفاده کنی، و حتی یه ابزار (skill) هست که این مهاجرتو خودکار انجام میده.
دلیل اصلی این تغییر فقط راحتی نیست، سرعتم هست. نسخهی ۱ هر فراخوانی رو موقع اجرا (runtime) با یه لایهی reflection تبدیل میکرد که هزینه داره؛ نسخهی ۲ با ماکرو @JS نوع دقیق پارامترها رو موقع build میخونه، پس دیگه نیازی به اون تبدیل پویا نیست. رو یه آیفون ۱۶ پرو، فراخوانیهای همزمان (sync) تا ۵.۶ برابر از نسخهی ۱ سریعتر شدن.
نویسنده میگه دلیل مهم دیگهای هم پشت این کاره: امروز خیلی از کدهای native با کمک ایجنتهای کدنویسی نوشته میشن، و مدلهای زبانی روی میلیونها نمونه سوییفت و کاتلین معمولی آموزش دیدن، نه اون DSL مخصوص اکسپو. با سینتکس خالص سوییفت، ایجنت راحتتر کد درست مینویسه و خطاهاشم زودتر و شفافتر پیدا میشه. فعلاً فقط iOS تو SDK 57 آمادهست، اندروید و پشتیبانی از viewها بعداً میاد و بتای رسمی تو SDK 58 منتشر میشه.
نکات کلیدی:
- تو Expo Modules 2.0، یه ماژول فقط کلاس سوییفت/کاتلین با annotationهای @JS، @Record و @Event ـه؛ دیگه DSL جدا لازم نیست.
- فراخوانیهای sync تا ۵.۶ برابر از نسخهی ۱ سریعترن چون نوع پارامترها موقع build مشخص میشه نه runtime.
- مهاجرت تدریجیه و skill رسمی expo-migrate-module میتونه بخشی از کارو خودکار انجام بده.
- فعلاً فقط iOS تو SDK 57 در دسترسه؛ اندروید، ویوها و بتای رسمی تو SDK 58 میان.




