تایپ‌اسکریپت ۷جهش عملکردی۲۶ تیر ۱۴۰۵، ۲۰:۲۳· 6 دقیقه مطالعه· #2 از 6 در فناوری

مایکروسافت کامپایلر TypeScript را با Go بازنویسی کرد؛ ۱۰ برابر سرعت بیشتر برای توسعه‌دهندگان جهانی

مایکروسافت TypeScript 7.0 را منتشر کرد که شامل یک کامپایلر کاملاً بازنویسی شده با زبان برنامه‌نویسی Go است. این تغییر معماری، بدون اینکه توسعه‌دهندگان مجبور به تغییر در نحوه کدنویسی خود باشند، تا ۱۰ برابر بهبود سرعت را در فرآیندهای بیلد و بررسی نوع (type-checking) ارائه می‌دهد.

به قلم تیم سردبیری کوهستان

تیم‌های مهندسی سازمانی 40%تحلیلگران معماری سیستم‌ها 35%نگه‌دارندگان اکوسیستم ابزارها 25%
تیم‌های مهندسی سازمانی
بر ارزش تجاری فوری خطوط لوله یکپارچه‌سازی مداوم سریع‌تر و بهبود سرعت توسعه‌دهنده تمرکز دارد.
تحلیلگران معماری سیستم‌ها
عمل‌گرایی فنی انتخاب Go به جای Rust را به دلیل جمع‌آوری زباله و سازگاری ساختاری آن تحلیل می‌کند.
نگه‌دارندگان اکوسیستم ابزارها
دوره گذار برای پلاگین‌های شخص ثالثی که به API برنامه‌نویسی قدیمی TypeScript متکی هستند را زیر نظر دارد.

زوایای پوشش‌داده‌نشده

  • · توسعه‌دهندگان انفرادی با پایگاه‌های کد کوچک که ممکن است متوجه افزایش سرعت چشمگیر نشوند.
  • · نگه‌دارندگان ابزارهای قدیمی جاوااسکریپت که با تغییر به زبان‌های سیستمی جایگزین شده‌اند.

چرا مهم است

TypeScript زبان زیربنایی برای توسعه وب مدرن است، اما زمان‌های کامپایل کُند آن مدت‌هاست که تیم‌های مهندسی را با مشکل مواجه کرده است. این افزایش ۱۰ برابری سرعت مستقیماً به توسعه سریع‌تر محصول، کاهش هزینه‌های رایانش ابری و یک گردش کار روزانه بسیار روان‌تر برای میلیون‌ها توسعه‌دهنده منجر می‌شود.

نکات کلیدی

  • مایکروسافت TypeScript 7.0 را منتشر کرده است که شامل یک کامپایلر کاملاً بازنویسی شده با زبان برنامه‌نویسی Go است.
  • کامپایلر جدید تا ۱۰ برابر بهبود سرعت را برای بیلدها و بررسی نوع در پروژه‌های بزرگ ارائه می‌دهد.
  • زمان بارگذاری پروژه Visual Studio Code از تقریباً ۱۰ ثانیه به تنها ۱.۲ ثانیه کاهش یافته است.
  • Go به جای Rust انتخاب شد زیرا جمع‌آوری زباله آن امکان انتقال وفادارانه معماری موجود را فراهم کرد.
  • این ارتقاء نیازی به تغییر در کدهای TypeScript موجود ندارد و می‌تواند به راحتی از طریق npm نصب شود.
  • کامپایلر جدید تقریباً نصف حافظه را مصرف می‌کند و هزینه‌های خطوط لوله بیلد ابری خودکار را به طور قابل توجهی کاهش می‌دهد.
10x
میانگین بهبود سرعت بیلد
10.6s
زمان بررسی نوع VS Code (کاهش از بیش از ۲ دقیقه)
50%
کاهش مصرف حافظه کامپایلر
1.2s
زمان بارگذاری پروژه در ویرایشگر (کاهش از ۹.۶ ثانیه)

در تاریخ ۸ جولای ۲۰۲۶، مایکروسافت با انتشار TypeScript 7.0، چشم‌انداز عملکردی توسعه وب مدرن را به طور اساسی تغییر داد. این به‌روزرسانی یک ارتقاء استاندارد نیست که صرفاً سینتکس یا انواع ابزارهای جدیدی را معرفی کند؛ بلکه نشان‌دهنده مهم‌ترین بازنگری معماری در تاریخ این زبان است. کل کامپایلر TypeScript به طور کامل بازنویسی شده و پایه جاوااسکریپتی اصلی خود را به نفع زبان برنامه‌نویسی Go کنار گذاشته است. نتیجه، یک جهش نسلی در عملکرد است که زمان‌های بیلد را تقریباً ۱۰ برابر سریع‌تر می‌کند.[1][2]

سال‌هاست که TypeScript به عنوان سنگ بنای برنامه‌های وب مقیاس‌پذیر عمل می‌کند و با افزودن بررسی نوع سخت‌گیرانه روی جاوااسکریپت، خطاها را قبل از اجرای کد شناسایی می‌کند. با این حال، با افزایش محبوبیت این زبان و بزرگ شدن حجم کدها، عملکرد کامپایلر به یک گلوگاه بدنام تبدیل شد. از آنجایی که کامپایلر اصلی خود با TypeScript نوشته شده بود (و بنابراین روی یک محیط اجرایی تک‌رشته‌ای جاوااسکریپت مانند Node.js اجرا می‌شد)، در پردازش درخت‌های وابستگی عظیم برنامه‌های سازمانی مدرن دچار مشکل می‌شد. توسعه‌دهندگان به طور معمول با زمان‌های بیلدی مواجه می‌شدند که به دقیقه می‌رسید و در حالی که ماشین‌هایشان میلیون‌ها خط کد را پردازش می‌کردند، به ترمینال‌های بیکار خیره می‌ماندند.[3][5]

مقیاس این مشکل در مخازن بزرگ متن‌باز کاملاً مشهود بود. پایگاه کد Visual Studio Code، که یکی از بزرگترین پروژه‌های TypeScript موجود است، قبلاً برای یک بررسی نوع کامل به بیش از دو دقیقه زمان نیاز داشت. در عصری که یکپارچه‌سازی مداوم (CI) و استقرار سریع اهمیت بالایی دارند، این تأخیرها نشان‌دهنده یک اتلاف انباشته عظیم در سرعت مهندسی بود. مایکروسافت تشخیص داد که ابزارها باید همگام با پیچیدگی روزافزون نرم‌افزاری که می‌سازد، مقیاس‌پذیر شوند، و این امر منجر به یک ابتکار محرمانه با نام «پروژه کورسا» (Project Corsa) شد.[2][3]

مأموریت پروژه کورسا در مفهوم ساده اما در اجرا بسیار بزرگ بود: انتقال کل کامپایلر TypeScript به یک زبان سطح سیستمی که قادر به عملکرد بومی (Native) باشد. مایکروسافت چندین زبان از جمله Rust و C# را ارزیابی کرد و در نهایت Go را انتخاب کرد. این انتخاب برخی از ناظران صنعت را که انتظار داشتند مایکروسافت از C# داخلی خود یا Rust که محبوبیت فزاینده‌ای داشت، حمایت کند، شگفت‌زده کرد، اما این تصمیم ریشه در عمل‌گرایی مهندسی سخت داشت. Go ترکیبی منحصر به فرد از زمان‌های راه‌اندازی سریع، مدیریت حافظه قوی و – مهم‌تر از همه – سازگاری ساختاری با پایگاه کد موجود TypeScript را ارائه می‌داد.[3][5]

برخلاف بازنویسی از پایه، که مستلزم بازنگری مفاهیم اساسی مانند مدیریت حافظه و ساختاردهی داده‌ها بود، Go به مایکروسافت اجازه داد تا یک انتقال بسیار وفادارانه را انجام دهد. هم کامپایلر قدیمی جاوااسکریپت و هم کامپایلر جدید Go بر جمع‌آوری زباله (Garbage Collection) تکیه دارند. علاوه بر این، سیستم نوع و مدل حافظه Go به طرز شگفت‌انگیزی با ساختارهای داده داخلی TypeScript، به ویژه نمودارهای چرخه‌ای که به طور گسترده در طول بررسی نوع استفاده می‌شوند، همسو هستند. این شباهت ساختاری امکان ترجمه تقریباً یک به یک الگوریتم‌های کامپایلر را فراهم کرد و خطر معرفی رگرسیون‌های رفتاری را به شدت کاهش داد.[5][6]

برخلاف بازنویسی از پایه، که مستلزم بازنگری مفاهیم اساسی مانند مدیریت حافظه و ساختاردهی داده‌ها بود، Go به مایکروسافت اجازه داد تا یک انتقال بسیار وفادارانه را انجام دهد.

افزایش عملکرد کامپایلر جدید ناشی از دو مزیت اصلی زبان Go است: کامپایل بومی و همزمانی حافظه مشترک. با کامپایل مستقیم به باینری‌های بومی بهینه‌سازی شده برای ویندوز، macOS و لینوکس، ابزار جدید به طور کامل سربار زمان اجرای تحمیل شده توسط Node.js را حذف می‌کند. مهم‌تر از آن، «گوروتین‌های» (goroutines) سبک وزن Go به کامپایلر اجازه می‌دهند تا از حلقه رویداد تک‌رشته‌ای جاوااسکریپت رها شود. برای اولین بار در تاریخ TypeScript، کامپایلر می‌تواند فایل‌ها را تجزیه کند، انواع را بررسی کند و کد را به صورت موازی منتشر کند و از پردازنده‌های چند هسته‌ای مدرن به طور کامل استفاده نماید.[1][5]

معیارهای دنیای واقعی منتشر شده توسط مایکروسافت، ادعاهای جاه‌طلبانه «۱۰ برابر سریع‌تر» را تأیید می‌کنند. در مخزن عظیم Visual Studio Code، زمان بررسی نوع کامل از بیش از دو دقیقه به تقریباً ۱۰.۶ ثانیه کاهش یافت. پروژه‌های کوچک‌تر نیز افزایش‌های متناسبی را مشاهده می‌کنند؛ کتابخانه پرکاربرد RxJS شاهد کاهش زمان کامپایل خود از ۱.۱ ثانیه به ۰.۱ ثانیه (تقریباً آنی) بود. این‌ها معیارهای مصنوعی نیستند، بلکه اندازه‌گیری‌هایی هستند که از پایگاه‌های کد در مقیاس تولید گرفته شده‌اند و واقعیت روزمره توسعه نرم‌افزار سازمانی را منعکس می‌کنند.[2][3]

فراتر از سرعت‌های خام بیلد، بازنویسی Go به طور چشمگیری تجربه توسعه‌دهنده محلی را در ویرایشگرهای کد بهبود می‌بخشد. سرویس زبان TypeScript، که ویژگی‌هایی مانند تکمیل خودکار، تشخیص خطای درون خطی و پیمایش کد را در IDEهایی مانند Visual Studio Code قدرت می‌بخشد، اکنون بسیار پاسخگوتر است. زمان بارگذاری پروژه تا ۸ برابر کاهش یافته و در محیط‌های آزمایش شده از تقریباً ۱۰ ثانیه به ۱.۲ ثانیه رسیده است. توسعه‌دهندگان دیگر مجبور نیستند هنگام باز کردن مخازن بزرگ (monorepos) منتظر بمانند تا ویرایشگرشان «به روز شود»، که منجر به یک گردش کار کدنویسی بدون اصطکاک می‌شود.[4]

این تغییر معماری همچنین مزایای قابل توجهی در بهره‌وری منابع سیستمی به همراه دارد. کامپایلر مبتنی بر Go تقریباً نیمی از حافظه مورد نیاز کامپایلر جاوااسکریپتی قبلی خود را مصرف می‌کند. برای کسب‌وکارهایی که خطوط لوله یکپارچه‌سازی و استقرار مداوم (CI/CD) گسترده‌ای را اجرا می‌کنند، این کاهش در سربار حافظه مستقیماً به کاهش هزینه‌های رایانش ابری منجر می‌شود. اکنون تیم‌ها می‌توانند فرآیندهای تست و بیلد خودکار خود را روی نمونه‌های سرور کوچک‌تر و ارزان‌تر اجرا کنند، بدون اینکه سرعت را فدا کنند، یا بیلد‌های موازی بیشتری را روی زیرساخت موجود خود اجرا نمایند.[4]

با وجود تغییرات اساسی زیربنایی، مایکروسافت اطمینان داده است که مسیر مهاجرت برای اکثر توسعه‌دهندگان کاملاً بدون مشکل است. از آنجایی که سینتکس زبان و قوانین بررسی نوع یکسان باقی می‌مانند، تیم‌ها نیازی به بازنویسی هیچ یک از کدهای کاربردی واقعی خود ندارند. ارتقاء به کامپایلر جدید به سادگی نصب آخرین بسته TypeScript 7.0 از طریق npm است. پس از نصب، ابزارهای خط فرمان استاندارد به طور خودکار از طریق موتور جدید مبتنی بر Go هدایت می‌شوند و مزایای عملکردی را فوراً و بدون نیاز به تغییرات پیکربندی، فعال می‌کنند.[2][7]

با این حال، یک دوره گذار کوتاه برای موارد خاص در اکوسیستم ابزارهای گسترده‌تر وجود دارد. در حالی که بیلد‌های استاندارد بدون نقص کار می‌کنند، پروژه‌هایی که به شدت به API برنامه‌نویسی TypeScript متکی هستند – مانند برخی پلاگین‌های سفارشی ESLint یا تولیدکنندگان کد تخصصی – ممکن است با موانع سازگاری مواجه شوند. مایکروسافت اعلام کرده است که پشتیبانی پایدار از API برنامه‌نویسی در نسخه آتی TypeScript 7.1 به طور کامل تکمیل خواهد شد و به تیم‌هایی که وابستگی‌های عمیق به API دارند، توصیه می‌کند که در این فاصله با دقت آزمایش کنند یا از بسته‌های سازگاری جانبی استفاده نمایند.[2][7]

بیلدهای سریع‌تر و کم‌مصرف‌تر از نظر حافظه، مستقیماً به کاهش هزینه‌های محاسباتی ابری برای خطوط لوله CI/CD سازمانی منجر می‌شوند.
بیلدهای سریع‌تر و کم‌مصرف‌تر از نظر حافظه، مستقیماً به کاهش هزینه‌های محاسباتی ابری برای خطوط لوله CI/CD سازمانی منجر می‌شوند.

بازنویسی TypeScript نشان‌دهنده یک روند گسترده‌تر در سطح صنعت است که در آن ابزارهای زیربنایی جاوااسکریپت در حال بازسازی با زبان‌های سیستمی با عملکرد بالا هستند. همانطور که باندلرهایی مانند Vite و Turbopack از Go و Rust برای جایگزینی ابزارهای قدیمی مبتنی بر جاوااسکریپت استفاده کردند، کامپایلر TypeScript نیز اکنون از محیط اجرایی اصلی خود فراتر رفته است. در حالی که هوش مصنوعی سرعت تولید کد را تسریع می‌کند و پایگاه‌های کد به طور تصاعدی بزرگتر می‌شوند، تقاضا برای زیرساخت توسعه‌دهنده سریع، موازی و کارآمد از نظر حافظه هرگز به این وضوح نبوده است. TypeScript 7.0 تضمین می‌کند که این زبان برای آن آینده آماده است.[6]

روند رویداد

  1. 2012

    مایکروسافت TypeScript را منتشر می‌کند و در ابتدا کامپایلر آن را با خود TypeScript می‌نویسد تا مشارکت جامعه آسان‌تر شود.

  2. March 2025

    مایکروسافت به طور عمومی «پروژه کورسا» را اعلام می‌کند، ابتکاری برای انتقال کامپایلر TypeScript به Go.

  3. June 2026

    TypeScript 7.0 به وضعیت نامزد انتشار (Release Candidate) می‌رسد و کامپایلر مبتنی بر Go را برای آزمایش اولیه در دسترس قرار می‌دهد.

  4. July 8, 2026

    مایکروسافت رسماً TypeScript 7.0 را منتشر می‌کند و کامپایلر بومی ۱۰ برابر سریع‌تر را در اختیار عموم قرار می‌دهد.

بررسی عمیق دیدگاه‌ها

دیدگاه توسعه‌دهنده سازمانی

ارزش تجاری فوری خطوط لوله یکپارچه‌سازی مداوم سریع‌تر و بهبود سرعت توسعه‌دهنده را در اولویت قرار می‌دهد.

برای سازمان‌های بزرگی که مخازن یکپارچه عظیم (monorepos) را مدیریت می‌کنند، عملکرد کامپایلر TypeScript مدت‌هاست که یک گلوگاه پرهزینه بوده است. هر دقیقه‌ای که توسعه‌دهندگان صرف انتظار برای پایان بیلد یا بارگذاری ویرایشگر می‌کنند، یک دقیقه بهره‌وری از دست رفته است. از این منظر، افزایش ۱۰ برابری سرعت فقط یک دستاورد فنی نیست؛ بلکه یک تقویت مستقیم برای سود نهایی است. بیلدهای سریع‌تر به معنای حلقه‌های بازخورد سریع‌تر، استقرار مکررتر و کاهش قابل توجه هزینه‌های محاسباتی برای خطوط لوله CI/CD مبتنی بر ابر است. تیم‌های سازمانی مسیر ارتقاء بدون مشکل از طریق npm را یک پیروزی بزرگ می‌دانند که به آن‌ها اجازه می‌دهد بدون صرف ساعت‌ها کار مهندسی برای مهاجرت پیچیده، از این مزایا بهره‌مند شوند.

دیدگاه مهندسی سیستم‌ها

عمل‌گرایی فنی انتخاب Go به جای Rust را به دلیل جمع‌آوری زباله و سازگاری ساختاری آن تحلیل می‌کند.

معماران سیستم‌ها و طراحان زبان از نزدیک تصمیم مایکروسافت برای استفاده از Go به جای Rust را زیر نظر داشته‌اند، زیرا Rust زبانی است که اغلب برای ابزارهای عملکردی مدرن ترجیح داده می‌شود. این گروه، مهندسی عمل‌گرایانه پشت این انتخاب را ستایش می‌کنند. از آنجایی که کامپایلر اصلی TypeScript به شدت به نمودارهای چرخه‌ای و جمع‌آوری زباله متکی بود، بازنویسی آن در Rust مستلزم بازطراحی اساسی و از پایه نحوه مدیریت حافظه توسط کامپایلر بود. با انتخاب Go، مایکروسافت توانست یک انتقال وفادارانه و تقریباً یک به یک از الگوریتم‌های موجود را اجرا کند. این امر خطر معرفی باگ‌های رفتاری ظریف را به حداقل رساند، در حالی که همچنان مزایای عملکردی عظیم کامپایل بومی و همزمانی حافظه مشترک را فعال کرد.

دیدگاه اکوسیستم ابزارها

دوره گذار برای پلاگین‌های شخص ثالثی که به API برنامه‌نویسی قدیمی TypeScript متکی هستند را زیر نظر دارد.

نگه‌دارندگان اکوسیستم گسترده‌تر ابزارهای جاوااسکریپت – مانند کسانی که پلاگین‌های سفارشی ESLint، تولیدکنندگان کد و ابزارهای بیلد تخصصی می‌سازند – با واقعیتی کمی پیچیده‌تر روبرو هستند. در حالی که توسعه‌دهندگان برنامه‌های استاندارد می‌توانند فوراً ارتقا دهند، ابزارهایی که عمیقاً به API برنامه‌نویسی TypeScript متصل می‌شوند، باید خود را با معماری جدید مبتنی بر Go تطبیق دهند. این دیدگاه بر احتیاط در طول دوره گذار تأکید می‌کند. نگه‌دارندگان اکوسیستم در حال حاضر ابزارهای خود را در برابر کامپایلر جدید آزمایش می‌کنند و برای انتشار آتی TypeScript 7.1 آماده می‌شوند، که وعده تثبیت API برنامه‌نویسی جدید و تکمیل مهاجرت اکوسیستم به پایه جدید را می‌دهد.

آنچه نمی‌دانیم

  • دقیقاً چقدر طول می‌کشد تا کل اکوسیستم پلاگین‌های شخص ثالث ESLint و تولیدکنندگان کد، به طور کامل از API برنامه‌نویسی جدید مبتنی بر Go پشتیبانی کنند.
  • آیا مایکروسافت قصد دارد پس از موفقیت پروژه کورسا، سایر ابزارهای زیربنایی توسعه وب را نیز با Go بازنویسی کند.

اصطلاحات کلیدی

مبدل کد (Transpiler)
ابزاری که کد منبع را از یک زبان برنامه‌نویسی به زبان دیگر ترجمه می‌کند، مانند تبدیل TypeScript به جاوااسکریپت قابل خواندن توسط مرورگر.
بررسی نوع (Type-checking)
فرآیند تأیید اینکه متغیرها و توابع یک برنامه با انواع داده صحیح استفاده می‌شوند، که خطاها را قبل از اجرای کد شناسایی می‌کند.
گوروتین (Goroutine)
یک تابع سبک وزن که به صورت همزمان در زبان برنامه‌نویسی Go اجرا می‌شود و امکان اجرای موازی وظایف را در چندین هسته CPU فراهم می‌کند.
جمع‌آوری زباله (Garbage Collection)
یک ویژگی مدیریت حافظه خودکار که حافظه سیستمی اشغال شده توسط اشیایی که دیگر مورد نیاز برنامه نیستند را بازیابی می‌کند.
یکپارچه‌سازی مداوم (CI)
رویه‌ای برای خودکارسازی ادغام و آزمایش تغییرات کد برای اطمینان از پایداری نرم‌افزار در حین کار چندین توسعه‌دهنده روی آن.

پرسش‌های متداول

آیا باید کد TypeScript خود را با Go بازنویسی کنم؟

خیر. خود زبان TypeScript تغییری نکرده است. فقط ابزار زیربنایی که کد شما را بررسی و کامپایل می‌کند، با Go بازنویسی شده است.

چگونه به کامپایلر جدید ارتقا دهم؟

ارتقاء برای اکثر پروژه‌ها بدون مشکل است. توسعه‌دهندگان کافی است آخرین بسته TypeScript 7.0 را از طریق npm نصب کنند و دستورات بیلد استاندارد به طور خودکار از موتور جدید Go استفاده خواهند کرد.

چرا مایکروسافت کامپایلر را با Rust بازنویسی نکرد؟

در حالی که Rust برای ابزارهای عملکردی محبوب است، مدل حافظه و جمع‌آوری زباله داخلی Go به مایکروسافت اجازه داد تا یک انتقال وفادارانه ۱:۱ از معماری کامپایلر موجود انجام دهد و خطر بروز باگ‌ها را کاهش دهد.

آیا این کار باعث می‌شود برنامه وب من برای کاربران سریع‌تر اجرا شود؟

خیر. کد نهایی جاوااسکریپت که برای کاربران ارسال می‌شود دقیقاً یکسان باقی می‌ماند. بهبودهای سرعت صرفاً مربوط به تجربه توسعه‌دهنده است—یعنی سرعت بیلد کد و سرعت پاسخگویی ویرایشگر.

منابع

پوشش منابع

7 منبع

3 دیدگاه شناسایی‌شده

تیم‌های مهندسی سازمانی 40%تحلیلگران معماری سیستم‌ها 35%نگه‌دارندگان اکوسیستم ابزارها 25%
  1. [1]Microsoftنگه‌دارندگان اکوسیستم ابزارها

    Announcing TypeScript 7.0

    مطالعه در Microsoft
  2. [2]DevelopersGlobalتیم‌های مهندسی سازمانی

    TypeScript 7.0 is Here: 10x Faster Builds with a Complete Rewrite in Go

    مطالعه در DevelopersGlobal
  3. [3]LogRocketنگه‌دارندگان اکوسیستم ابزارها

    TypeScript Is Getting A 10x Faster Compiler —Here's What It Means For Developers

    مطالعه در LogRocket
  4. [4]Origamiتیم‌های مهندسی سازمانی

    TypeScript 7: A Major Speed Leap in Software Development Tooling

    مطالعه در Origami
  5. [5]Nodeتحلیلگران معماری سیستم‌ها

    The real reason Microsoft is rewriting TypeScript in Go

    مطالعه در Node
  6. [6]spf13تحلیلگران معماری سیستم‌ها

    TypeScript compiler rewritten in Go: Agentic AI language

    مطالعه در spf13
  7. [7]Visual Studio Magazineنگه‌دارندگان اکوسیستم ابزارها

    TypeScript 7.0 RC Brings Go-Based Compiler to the Masses

    مطالعه در Visual Studio Magazine
همیشه در جریان باشید

هر زاویه. هر روز.

دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.