تیم توسعه TypeScript پس از بررسی و نمونهسازی گسترده، زبان Go را برای پورت کردن کدبیس TypeScript انتخاب کرد. این تصمیم بر اساس ملاحظات کلیدی زیر اتخاذ شد:
- سازگاری کدبیس (Codebase Compatibility):
- حفظ شباهت معنایی (semantic) و ساختاری بین کدبیسهای جاوا اسکریپت و Go برای سهولت پورت و نگهداری بسیار مهم است.
- سبک اصطلاحی (idiomatic) Go شباهت زیادی به الگوهای کدنویسی تایپ اسکریپت دارد و این امر را تسهیل میکند.
- به عبارت دیگر، توسعهدهندگان میتوانند تغییرات را به راحتی بین دو زبان منتقل کنند، زیرا الگوهای کدنویسی در Go شباهت زیادی به الگوهای موجود در TypeScript دارد.
- این امر به ویژه در پروژههای بزرگ و پیچیده مانند TypeScript بسیار مهم است، زیرا حفظ سازگاری و جلوگیری از ایجاد مشکلات ناشی از تغییر زبان، از اولویتهای اصلی است.
- مدیریت حافظه (Memory Management):
- Go کنترل دقیق حافظه را بدون نیاز به مدیریت دستی مداوم ارائه میدهد.
- تاثیر garbage collector به دلیل ماهیت کدبیس (کامپایلهای دستهای، تخصیصهای طولانیمدت) حداقل است.
- اگرچه Go از garbage collector (جمعکننده زباله) استفاده میکند، اما این موضوع در مورد TypeScript چندان نگرانکننده نیست.
- زیرا بسیاری از عملیات کامپایل به صورت دستهای (batch) انجام میشوند و پس از پایان عملیات، garbage collector میتواند به طور کامل حافظه را آزاد کند.
- علاوه بر این، بسیاری از اشیاء در حافظه برای مدت طولانی باقی میمانند، بنابراین نیاز به اجرای مکرر garbage collector وجود ندارد.
- این ویژگی، پیچیدگی کدبیس را کاهش میدهد و در عین حال، عملکرد قابل قبولی را ارائه میدهد.
- پردازش گراف (Graph Processing):
- Go در پیمایش ارگونومیک (ergonomic) درخت و پردازش گراف که برای عملیات تایپ اسکریپت ضروری است، برتری دارد.
- TypeScript به شدت به پردازش گراف، به ویژه پیمایش درختها (tree traversal) وابسته است. Go در این زمینه عملکرد بسیار خوبی دارد.
- Go امکان پیادهسازی الگوریتمهای پیچیده پردازش گراف را به صورت کارآمد و خوانا فراهم میکند.
- این ویژگی به ویژه برای کامپایلر TypeScript که نیاز به تحلیل ساختار کد دارد، بسیار حائز اهمیت است.
- قابلیت همکاری جاوا اسکریپت (JavaScript Interoperability):
- قابلیت همکاری جاوا اسکریپت درون فرآیندی (in-process) Go یک نقطه ضعف شناخته شده است.
- یکی از نقاط ضعف Go، قابلیت همکاری نه چندان قوی آن با جاوا اسکریپت است.
- با این حال، تیم توسعه TypeScript در حال برنامهریزی برای بهبود این وضعیت است.
- آنها قصد دارند یک API جاوا اسکریپت با عملکرد بهتر و کنترلشدهتر ارائه دهند تا امکان بهینهسازیهای داخلی فراهم شود.
- این امر به توسعهدهندگان امکان میدهد تا از مزایای Go در عین حفظ سازگاری با اکوسیستم جاوا اسکریپت بهرهمند شوند.
به طور خلاصه، انتخاب Go برای پورت کردن TypeScript بر اساس ترکیبی از عوامل فنی و عملی صورت گرفته است. سازگاری، مدیریت حافظه، پردازش گراف و قابلیت همکاری با جاوا اسکریپت، از جمله مهمترین این عوامل هستند.
مشاهده مطلب اصلی