TypeScript 7 (tsgo): مترجم أسرع بـ 10 أضعاف في
١٦ يونيو ٢٠٢٦
TypeScript 7 هو نقل أصلي (native port) للمترجم (compiler) والأدوات من JavaScript إلى لغة Go. تقول Microsoft إنه يعمل أسرع بنحو 10 مرات من TypeScript 6، ويمكنك تثبيت النسخة التجريبية العامة (public beta) اليوم بأمر npm واحد. إليك بالضبط ما تم إصداره، وما الذي سيتعطل، ومتى يُتوقع الإصدار المستقر — بناءً على إعلانات Microsoft الرسمية.
ملخص
- TypeScript 7 (الاسم الكودي "Corsa") هو نقل أصلي لمترجم
tsc، وخدمة اللغة، والأدوات من قاعدة بيانات JavaScript الأصلية إلى Go.12 - تقول Microsoft إنه "غالبًا ما يكون أسرع بنحو 10 مرات من TypeScript 6.0،" بفضل سرعة الكود الأصلي بالإضافة إلى التوازي في الذاكرة المشتركة (shared-memory parallelism).2
- انطلقت النسخة التجريبية العامة في 21 أبريل 2026. قم بتثبيتها باستخدام
npm install -D @TypeScript/native-preview@betaوقم بتشغيلtsgoبدلاً منtsc.2 - في اختبارات الأداء (benchmarks) الخاصة بـ
tscالتي نشرتها Microsoft، قام النقل الأصلي بفحص قاعدة بيانات VS Code المكونة من 1.5 مليون سطر في 7.5 ثانية مقابل 77.8 ثانية (أسرع بـ 10.4 مرة) وقلل وقت تحميل المشروع في المحرر من حوالي 9.6 ثانية إلى حوالي 1.2 ثانية (أسرع بـ 8 مرات)، مع استهلاك نصف الذاكرة تقريبًا.1 - يقدم الإصدار تغييرات جذرية حقيقية (breaking changes): تفعيل
strictافتراضيًا، وتعيينmoduleافتراضيًا إلىesnext، وقائمة من الأعلام المهجورة (مثلtarget: es5، وbaseUrl، وmoduleResolution: node، وغيرها) التي أصبحت الآن أخطاء صريحة.2 - اعتبارًا من منتصف يونيو 2026، لا يزال TypeScript 7 في المرحلة التجريبية، ويتجه نحو نسخة مرشحة للإصدار (release candidate). وضعت خطة Microsoft المعلنة الإصدار المستقر في غضون شهرين تقريبًا من بيتا أبريل — أي في أواخر يونيو 2026 تقريبًا.2
ما ستتعلمه
- ما هو TypeScript 7 في الواقع، وكيف يختلف عن TypeScript 6
- أرقام الأداء التي نشرتها Microsoft — وما هو الخط الأساسي الحقيقي
- كيفية تثبيت
tsgoوتشغيله جنبًا إلى جنب معtscالحالي - عناصر التحكم الجديدة في التوازي:
--checkers، و--builders، و--singleThreaded - أعلام التكوين والأنماط التي ستتعطل عند الترقية
- لماذا اختارت Microsoft لغة Go بدلاً من Rust أو C#
- أين يقف الإصدار المستقر 7.0 اعتبارًا من يونيو 2026
ما هو TypeScript 7
TypeScript 7 هو اسم الإصدار لـ النقل الأصلي لمترجم TypeScript. طوال فترة وجوده، كان tsc مكتوبًا بلغة TypeScript ويتم تشغيله كـ JavaScript على Node.js، مما يعني أنه يرث جامع القمامة (garbage collector) الخاص بـ V8 ونموذج التنفيذ أحادي المسار (single-threaded). على مدار عام تقريبًا، أعادت Microsoft بناء قاعدة البيانات تلك بلغة Go.12
هناك تفصيل رئيسي يضيع في عناوين "إعادة الكتابة": هذا نقل (port)، وليس إعادة تصميم. وكما قال فريق TypeScript، فإن قاعدة بيانات Go "تم نقلها بشكل منهجي من تنفيذنا الحالي بدلاً من إعادة كتابتها من الصفر، ومنطق فحص الأنواع (type-checking) الخاص بها مطابق هيكليًا لـ TypeScript 6.0."2 بعبارة أخرى، نظام الأنواع الذي تعرفه بالفعل لم يتغير — نفس ملفات .ts التي يتم تجميعها تحت TS 6 من المفترض أن يتم تجميعها بشكل متطابق تحت TS 7، ولكن بشكل أسرع بكثير.
تستخدم Microsoft اسمين كوديين داخليين ستراهما في الالتزامات (commits) والمناقشات: "Strada" لقاعدة بيانات TypeScript الأصلية، و "Corsa" للنقل الأصلي.1 وبالنسبة للتسمية من الآن فصاعدًا، يشير الفريق إليهما ببساطة باسم TypeScript 6 (JS) و TypeScript 7 (native).1
ما مدى سرعته حقًا؟
العنوان الرئيسي هو "10 أضعاف"، وصياغة Microsoft في إعلان النسخة التجريبية محددة: TypeScript 7.0 هو "غالبًا ما يكون أسرع بنحو 10 مرات من TypeScript 6.0."2 تأتي هذه الزيادة في السرعة من شيئين يعملان معًا — كود أصلي مجمع بدلاً من JavaScript مفسر، و توازي الذاكرة المشتركة الذي لم يكن بإمكان وقت التشغيل القديم أحادي المسار استغلاله.2
عندما أعلنت Microsoft لأول مرة عن النقل الأصلي في مارس 2025، نشرت توقيتات سطر أوامر tsc عبر قواعد بيانات مفتوحة المصدر معروفة. تقارن هذه التوقيتات النقل الأصلي بالمترجم الحالي القائم على JavaScript:1
| قاعدة البيانات | الحجم (LOC) | tsc القائم على JS | الأصلي (Native) | زيادة السرعة |
|---|---|---|---|---|
| VS Code | 1,505,000 | 77.8 ثانية | 7.5 ثانية | 10.4x |
| Playwright | 356,000 | 11.1 ثانية | 1.1 ثانية | 10.1x |
| TypeORM | 270,000 | 17.5 ثانية | 1.3 ثانية | 13.5x |
| date-fns | 104,000 | 6.5 ثانية | 0.7 ثانية | 9.5x |
| tRPC (server + client) | 18,000 | 5.5 ثانية | 0.6 ثانية | 9.1x |
| rxjs (observable) | 2,100 | 1.1 ثانية | 0.1 ثانية | 11.0x |
تتجمع زيادات السرعة حول مرتبة مقدار واحدة بغض النظر عن حجم المشروع، ولهذا السبب التصق مصطلح "10x".1
ومع ذلك، فإن الرقم الذي سيشعر به معظم المطورين فعليًا هو بدء تشغيل المحرر. باستخدام قاعدة بيانات VS Code كمعيار، قاست Microsoft الوقت المستغرق لتحميل المشروع بالكامل في المحرر والذي انخفض من حوالي 9.6 ثانية إلى حوالي 1.2 ثانية — أي تحسن بمقدار 8 أضعاف في وقت تحميل المشروع.1 وبلغ إجمالي استخدام الذاكرة نصف تنفيذ JavaScript تقريبًا، مع ملاحظة الفريق أنهم لم يقوموا حتى بتحسين الذاكرة بعد.1
تحذير صادق لأي شخص يكرر هذه الأرقام: جدول المعايير أعلاه مأخوذ من الإعلان الأصلي لعام 2025 ويقيس النقل الأصلي مقابل مترجم JS الحالي في ذلك الوقت. ادعاء "10x مقابل TypeScript 6.0" هو الادعاء الذي أرفقته Microsoft بنسخة 7.0 التجريبية الفعلية.12 كلاهما أرقام Microsoft الخاصة على أجهزة Microsoft الخاصة — وهي تمثيلية، ولكنها ليست معيارًا مستقلاً.
تثبيت وتشغيل tsgo
لا يتعين عليك انتظار الإصدار المستقر لتجربته. يتم شحن الإصدار التجريبي (beta) تحت اسم حزمة معاينة مع ملف ثنائي منفصل حتى لا يتعارض مع مجموعة أدواتك الحالية.2
npm install -D @TypeScript/native-preview@beta
ثم قم بتشغيل tsgo تماماً في المكان الذي كنت ستشغل فيه tsc:
npx tsgo --version
# Version 7.0.0-beta
npx tsgo --project tsconfig.json
الملف التنفيذي tsgo "له نفس السلوك على جميع أكواد TypeScript مثل tsc من إصدار TypeScript 6.0 — لكنه أسرع بكثير."2 لاحظ أن اسم الحزمة والملف الثنائي مؤقتان: عند الإصدار المستقر، سيتم نشر TypeScript 7 تحت حزمة TypeScript المعتادة وسيستخدم نقطة الإدخال المألوفة tsc.2
بالنسبة للمحرر، قم بتثبيت إضافة TypeScript Native Preview لـ VS Code. وهي مبنية على Language Server Protocol (LSP) — وهو تغيير مخطط له منذ فترة طويلة في البنية التحتية يربط TypeScript بكيفية دمج اللغات الأخرى في المحررات — لذا يمكن تشغيلها في معظم المحررات الحديثة، وليس فقط VS Code.12
التشغيل جنباً إلى جنب مع TypeScript 6
نظراً لأن الإصدار المستقر 7.0 سيستحوذ في النهاية على اسم tsc، فقد نشرت Microsoft حزمة توافق، @TypeScript/typescript6، والتي توفر نقطة إدخال tsc6 وتعيد تصدير API الخاص بـ TypeScript 6.0.2 يسمح ذلك للأدوات التي تستورد من TypeScript مباشرة (TypeScript-eslint، على سبيل المثال) بالاستمرار في العمل. النهج الموصى به هو استخدام اسم مستعار (npm alias):2
npm install -D TypeScript@npm:@TypeScript/typescript6
عناصر التحكم الجديدة في التوازي
أكبر تغيير معماري يفتحه Go هو إنجاز العمل بالتوازي. يقوم TypeScript 7 بموازاة عمليات التحليل (parsing)، وفحص الأنواع (type-checking)، والإخراج (emitting) — وهي خطوات كان على بيئة تشغيل JavaScript أحادية المسار (single-threaded) القيام بها واحدة تلو الأخرى.2 تمنحك ثلاثة أعلام (flags) جديدة التحكم في ذلك:
--checkersيحدد عدد عمال فحص الأنواع. الافتراضي هو 4. يحصل كل عامل على رؤيته الخاصة للبرنامج؛ وبالنظر إلى نفس المدخلات، فإنهم يقسمون العمل بشكل متطابق وينتجون نفس النتائج. يمكن لزيادة عدد الفاحصين تسريع قواعد الأكواد الكبيرة على الأجهزة متعددة الأنوية، على حساب الذاكرة. قد ترغب أدوات CI ذات الأنوية القليلة في عدد أقل.2--buildersيتحكم في عدد بناة مراجع المشاريع (project-reference builders) التي تعمل في وقت واحد — وهو مفيد لـ monorepos التي تحتوي على العديد من المشاريع المركبة. يتضاعف مع--checkers، لذا فإن--checkers 4 --builders 4يمكن أن يطلق ما يصل إلى 16 فاحص أنواع في وقت واحد، وهو ما تشير Microsoft إلى أنه "قد يكون مفرطاً".2--singleThreadedيجبر كل شيء على مسار واحد. وهو مخصص لتصحيح الأخطاء، أو المقارنات المباشرة مع TypeScript 6، أو البيئات محدودة الموارد.2
هناك تفصيلة دقيقة تستحق التنبيه للفرق: في حالات نادرة، يمكن أن يؤدي تغيير --checkers إلى ظهور نتائج تعتمد على الترتيب، لذا تقترح Microsoft تثبيت عدد الفاحصين عبر فريقك لضمان الاتساق.2
التغييرات الجذرية التي تحتاج للتخطيط لها
"فحص الأنواع المتطابق هيكلياً" لا يعني "ترقية مباشرة دون تعديل". يتبنى TypeScript 7 الإعدادات الافتراضية الجديدة لـ TypeScript 6.0 ويحول الخيارات التي تم إهمالها سابقاً إلى أخطاء صريحة.2 وهذا هو بالضبط السبب في أن Microsoft شحنت TypeScript 6 أولاً كـ إصدار جسر يعتمد على JavaScript — فقد قدم عمليات الإهمال بحيث تكون القفزة إلى 7 أصغر.23
تغييرات الإعدادات الافتراضية الملحوظة:2
strictأصبح الآنtrueافتراضياً.moduleيفترض افتراضياًesnext.targetيفترض افتراضياً إصدار ECMAScript المستقر الحالي الذي يسبقesnextمباشرة.noUncheckedSideEffectImportsهوtrueافتراضياً.stableTypeOrderingهوtrueو لا يمكن إيقاف تشغيله.rootDirيفترض الآن افتراضياً./(المشاريع التي يقع فيهاtsconfig.jsonخارجsrcيجب أن تحدده صراحة).typesيفترض الآن افتراضياً[]— قم بإدراج حزم@typesالتي تحتاجها (مثل["node", "jest"]) صراحة.
والخيارات المهملة التي أصبحت الآن أخطاء صريحة مع سلوك عدم التنفيذ (no-op):2
target: es5وdownlevelIterationلم يعودا مدعومين.moduleResolution: node/node10وmoduleResolution: classicقد اختفوا — استخدمnodenextأوbundler.module: amd، وumd، وsystem، وnoneقد اختفوا — استخدمesnextأوpreserveمع أداة تجميع (bundler).baseUrlلم يعد مدعوماً — اجعلpathsنسبية لجذر المشروع بدلاً من ذلك.esModuleInteropوallowSyntheticDefaultImportsلم يعد من الممكن ضبطهما علىfalse.
هناك أيضاً مجموعة أكثر هدوءاً من تغييرات JavaScript/JSDoc: أعاد TypeScript 7 صياغة دعمه لـ JS ليتصرف بشكل أشبه بتحليله لـ .ts، لذا فإن بعض أنماط JSDoc بأسلوب Closure (مثل @enum، و @class على دالة، و ? المستقلة كنوع، وصيغة دالة Closure) لم تعد تحظى بتمييز خاص.2 إذا كان لديك قاعدة أكواد كبيرة من JS مع JSDoc، فخصص وقتاً لاختبارها.
إذا كنت تقوم بصيانة أدوات، فلاحظ شيئاً إضافياً: لن تصل واجهة برمجة تطبيقات (API) برمجية مستقرة حتى إصدار TypeScript 7.1 أو أحدث — "بعد عدة أشهر على الأقل" من الإصدار التجريبي 7.0.2 إذا كان بناؤك يعتمد على استيراد API المترجم، فهذا سبب للبقاء على TypeScript 6 في الوقت الحالي.
لماذا Go، وليس Rust أو C#؟
كان هذا هو الجدل المفضل على الإنترنت عند الإعلان عن عملية النقل، لذا فمن الجدير فهمه بشكل صحيح. قال المهندس المعماري الرئيسي Anders Hejlsberg إن الفريق قام بعمل نماذج أولية للنقل بعدة لغات ووجد أن Go هي الأنسب. السبب الجوهري عملي: المترجم الحالي يعتمد بشكل كبير على هياكل البيانات القابلة للتغيير والمشتركة، ورسوم بيانية مرجعية، وعمليات تنقل كثيفة المؤشرات، وكان نقل ذلك إلى Go أكثر وضوحاً بكثير من Rust - التي كان مدقق الاستعارة (borrow checker) الخاص بها سيجبرهم على إعادة تصميم أساسية لهياكل البيانات تلك.4
وصف Hejlsberg لغة Go بأنها تقريباً أدنى لغة مستوى لا تزال تقدم كوداً أصلياً (native) محسناً على كل منصة، وتحكماً جيداً في تخطيط البيانات، ودعماً لهياكل البيانات الدائرية، وإدارة تلقائية للذاكرة عبر جامع القمامة (garbage collector)، وتزامناً قوياً من خلال الـ goroutines.4 لخص Ryan Cavanaugh، قائد تطوير TypeScript، مسألة Rust بإيجاز: Rust "تنجح بشكل هائل في أهداف تصميمها، ولكن 'سهولة النقل إلى Rust من قاعدة كود JavaScript هذه تحديداً' ليس من أهداف تصميمها بشكل عقلاني تماماً."4
لذا لم يكن هذا استفتاءً على أي لغة "أفضل" - بل كان حول أي لغة تسمح لشركة Microsoft بنقل قاعدة كود عمرها عقد من الزمان، مليئة برسوم بيانية للمؤشرات، بأعلى دقة وأقل مخاطرة.
وضع الإصدار المستقر (يونيو 2026)
في النسخة التجريبية (beta) بتاريخ 21 أبريل 2026، قالت Microsoft إن خطتها هي إصدار TypeScript 7.0 في غضون الشهرين المقبلين، مع إصدار مرشح (release candidate) قبل ذلك ببضعة أسابيع.2 وهذا يضع الهدف المستقر في أواخر يونيو 2026 تقريباً. اعتباراً من منتصف يونيو 2026، لا يزال TypeScript 7 في المرحلة التجريبية، مع تركيز الفريق على إصلاح الأخطاء، والتوافق، وتحسين المحرر، وتنفيذ أكثر كفاءة لـ --watch.
ومع ذلك، فهو ليس مجرد وعود وهمية. تقول Microsoft إن النسخة التجريبية تعمل على قواعد كود تضم ملايين الأسطر داخل وخارج الشركة، وأن فرقاً في Bloomberg و Canva و Figma و Google و Lattice و Linear و Miro و Notion و Slack و Vanta و Vercel و VoidZero اختبرت إصدارات ما قبل الإصدار، وأبلغت عن تسريعات مماثلة.2 تصنيف "beta" هنا أكثر تحفظاً مما يبدو - تقول Microsoft صراحةً أنه يمكنك "على الأرجح البدء في استخدام هذا في عملك اليومي على الفور."2
إذا كنت ترغب في التعمق في مقايضات تصميم اللغة وراء كل هذا، فإن تحليلنا العميق للغات Python و JavaScript و TypeScript و Go و Rust يغطي سبب استمرار هذه الأنظمة البيئية في التقارب حول الأدوات الأصلية (native). وإذا كنت تقوم بترقية خدمة TypeScript، فإن دليل إنتاج gRPC في Node.js و TypeScript و درس خادم MCP في TypeScript كلاهما مبنيان على إعدادات تستفيد مباشرة من الفحوصات الأسرع لـ tsgo.
الخلاصة
يعد TypeScript 7 التغيير الأكثر أهمية في مجموعة أدوات TypeScript منذ عقد من الزمان - ليس لأن اللغة تغيرت، ولكن لأن المترجم أصبح أسرع بمقدار عشرة أضعاف دون تغيير الدلالات التي تعتمد عليها. خطة العمل العملية اليوم: قم بتثبيت @TypeScript/native-preview، وشغل tsgo مقابل عمليات بناء CI والعمليات المحلية للتأكد من زيادة السرعة، واستخدم نافذة النسخة التجريبية لتنظيف أعلام tsconfig.json التي ستصبح أخطاءً صريحة. إن اعتماد TypeScript 6 أولاً يجعل القفزة النهائية إلى 7 مملة تقريباً - وهو، بالنسبة لعملية نقل بهذا الطموح، بالضبط ما تريده.
Footnotes
-
أندرس هيجلسبرج، "A 10x Faster TypeScript," مدونة TypeScript (Microsoft)، ١١ مارس ٢٠٢٥. https://devblogs.microsoft.com/TypeScript/TypeScript-native-port/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13
-
دانيال روزنواسر، "Announcing TypeScript 7.0 Beta," مدونة TypeScript (Microsoft)، ٢١ أبريل ٢٠٢٦. https://devblogs.microsoft.com/TypeScript/announcing-TypeScript-7-0-beta/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24 ↩25 ↩26 ↩27 ↩28 ↩29 ↩30 ↩31 ↩32 ↩33 ↩34 ↩35
-
دانيال روزنواسر، "Announcing TypeScript 6.0," مدونة TypeScript (Microsoft)، ٢٣ مارس ٢٠٢٦. https://devblogs.microsoft.com/TypeScript/announcing-TypeScript-6-0/ ↩
-
ديفيد كاسيل، "Microsoft TypeScript Devs Explain Why They Chose Go Over Rust, C#," موقع The New Stack، ٢٠٢٥. https://thenewstack.io/microsoft-TypeScript-devs-explain-why-they-chose-go-over-rust-c/ ↩ ↩2 ↩3 ↩4