🎙️ حلقة 30607:48١٦ يونيو ٢٠٢٦

TypeScript 7 (tsgo): Compiler أسرع بـ 10 أضعاف في

استمع إلى هذه الحلقة

مناقشة مُنشأة بالذكاء الاصطناعي بواسطة Alex و Jamie

عن الحلقة دي

انضموا للمضيفين Alex وJamie في الحلقة المثيرة دي من Nerd Level Tech البودكاست الذكي وهما بيتعمقوا في مترجم TypeScript 7 اللي هيغير اللعبة، والمعروف بالاسم الكودي "Corsa". اكتشفوا إزاي تحول Microsoft من JavaScript لمحرك شغال بلغة Go بيوعد بزيادة مذهلة في سرعات الـ build بتوصل لعشر أضعاف، واستكشفوا الأسباب الرائعة وراء التحول الكبير ده. سواء كنت خبير في TypeScript أو مجرد مهتم بجديد التكنولوجيا، الدردشة دي مليانة معلومات وفكاهة مش هتحب تفوتها!

النص المكتوب

[Alex]: أهلاً بكم من جديد في البودكاست الذكي من نيرد ليفل تك، البودكاست الوحيد اللي وقت الـ build فيه لسه أطول من المقدمة بتاعتنا—رغم إن ده ممكن يتغير قريب!

[Jamie]: اتكلم عن نفسك يا Alex. أنا لسه مستني ميزة "اعمل قهوة وأنت بتعمل build" في الـ IDE بتاعي. أهلاً يا جماعة، أنا Jamie، والنهارده هنتكلم عن حاجة خلت مجتمع TypeScript كله بيتكلم عنها: كومبيلر TypeScript 7، اللي واخد الاسم الكودي "Corsa"، ومحركه الجديد اللي شغال بـ Go، واسمه tsgo!

[Alex]: مظبوط. TypeScript 7 مش مجرد تحديث عادي للإصدار—ده بورت أصلي (native port) كامل للكومبيلر من JavaScript لـ Go. والعنوان الرئيسي ضخم: Microsoft بتقول إنه أسرع بحوالي عشر مرات من إصدارات TypeScript 6 القديمة.

[Jamie]: عشر مرات! يعني لو الـ builds بتاعتي خلصت قبل ما ألحق أفتح Twitter، المفروض أعمل إيه بإيدي؟ [PAUSE] طيب، بس يا Alex، خلينا نرجع خطوة لورا—إيه اللي اتغير فعلاً هنا؟ ليه TypeScript فجأة بقت مكتوبة بـ Go؟

[Alex]: سؤال ممتاز. لسنوات، كومبيلر TypeScript—اللي هو tsc—كان هو نفسه مكتوب بـ TypeScript وشغال كـ JavaScript على Node.js، وده معناه إنه كان عايش جوه محرك V8 ومحدود بتنفيذ أحادي المسار (single-threaded). Microsoft قضت حوالي سنة بتعمل له بورت لـ Go، مش إعادة كتابة، مجرد ترجمة سطر بسطر، عشان منطق الـ type-checking يفضل متطابق مع TypeScript 6.0. الفرق إن Go بتديك سرعة الكود الأصلي (native code) وتوازي حقيقي (real parallelism).

[Jamie]: يعني ملفات الـ .ts بتاعتي لسه بتعمل compile بنفس الطريقة، بس... بتربو؟ [PAUSE] و، اه، للناس اللي بتسمعنا—ليه Go؟ أنا عارف إن عشاق Rust غالباً ماسكين ملفات الـ Cargo.tomls بتاعتهم دلوقتي وقلبانين.

[Alex]: أوه، الجدل بين Rust و Go كان "ملحمي" على Hacker News. بس الفكرة هنا: كومبيلر TypeScript بيعتمد على كتير من هياكل البيانات المشتركة اللي مليانة pointers. Go ممتازة في ده—فيها garbage collector، وبتدعم البيانات الدائرية (cyclic data)، وبتخلي التزامن (concurrency) سهل مع الـ goroutines. أما الـ borrow checker بتاع Rust، رغم إنه رائع للأمان، كان معناه إنهم يضطروا يعيدوا تصميم الكومبيلر كله من الصفر تقريباً. فكانت Go هي الاختيار العملي: سريعة، مخاطرها قليلة، وسمحت لـ Microsoft بنقل الكود من غير ما تبدأ من الصفر.

[Jamie]: يعني الموضوع كان أقل عن "أنهي لغة أروش" وأكتر عن "أنهي لغة مش هتخلينا نعيد كتابة كود بقاله عشر سنين ونقعد نعيط"؟

[Alex]: بالظبط! وعلى قد ما بحب Rust، ساعات بتبقى عايز تتحرك بسرعة ومن غير ما تكسر الحاجات—إلا لو الحاجات دي هي أوقات الـ build بتاعتك.

[Jamie]: بمناسبة أوقات الـ build—خلينا نتكلم بالأرقام. إحنا بنتكلم في سرعة قد إيه بالظبط؟

[Alex]: Microsoft جربت tsgo على مشاريع كود كبيرة جداً. خد VS Code مثلاً—فيه 1.5 مليون سطر كود. بالـ tsc القديم اللي مبني على JavaScript، كان بياخد حوالي 78 ثانية للـ type-check. بـ tsgo؟ خد 7.5 ثانية بس.

[Jamie]: ده... واو. ده زي الفرق بين إنك تعمل فطار وبين إنك تاكل Pop-Tart.

[Alex]: أو إنك تاكل الـ Pop-Tart نية من غير تسخين حتى! [PAUSE] ومش بس VS Code. مشاريع زي Playwright و TypeORM، وحتى مشاريع أصغر زي rxjs—كلها شافت تسريع من 9 لـ 13 ضعف. ده غير إن وقت تحميل المشروع في الـ editor نزل من حوالي 10 ثواني لثانية واحدة بس. واستهلاك الذاكرة (memory)؟ نزل للنص.

[Jamie]: تمام، بس أنت عارف أنا هسأل عن إيه—إزاي نجرب ده فعلاً؟ هل هو متاح دلوقتي، ولا لازم نستنى الإصدار المستقر (stable release)؟

[Alex]: تقدر تجربه دلوقتي طبعاً. النسخة التجريبية (public beta) نزلت في أبريل اللي فات. بس شغل `npm install -D typescriptnative-previewbeta` واستخدم أمر `tsgo` بدل `tsc`. تقدر تشغلهم جنب بعض، فمش محدد تضحي ببيئة العمل الحالية بتاعتك. مفيد للناس اللي زينا اللي بيحبوا يعيشوا في خطر، بس مش خطر "أوي" يعني.

[Jamie]: [يضحك] يعني بس بدل `tsc` بـ `tsgo` وانطلق! [PAUSE] هل محتاجين أي حركات في الـ editor؟

[Alex]: أيوه، فيه إضافة TypeScript Native Preview لـ VS Code. هي مبنية على الـ Language Server Protocol، وده معناه إنها المفروض تشتغل كويس مع الـ editors التانية كمان. الفريق فعلاً بيخلي TypeScript تتماشى مع الطريقة اللي اللغات التانية بتتربط بيها بالـ editors دلوقتي.

[Jamie]: طيب، خلينا ندخل في الحاجات التقيلة. هل فيه أي تغييرات جذرية (breaking changes) أو "فخاخ" لو حدثت مشروعي؟

[Alex]: أوه، فيه شوية تغييرات لازم تتأكد منها قبل ما تحدث. أولاً، وضع الـ `strict` بقى شغال افتراضياً. فلو كنت عايش حياتك بـ typing سايب، جه الوقت إنك تلتزم أو تستقبل errors.

[Jamie]: زي ما تاكل كابوتشا بدل الشيبسي—مفيد ليك، بس مش دايما ده اللي بتبقى عايزه. إيه تاني؟

[Alex]: الـ Modules دلوقتي بقت افتراضياً `esnext` في TypeScript 7، وشوية flags قديمة في الـ config اختفت—زي `target: es5` و `baseUrl` و `moduleResolution: node`. دي دلوقتي بتطلع errors صريحة. الـ flags اللي كانت متهالكة (deprecated) زي `amd` و `umd` و `system` modules مابقتش مدعومة. لو عندك configs قديمة، هتحتاج تنظفها. كمان، لو الكود بتاعك بيعتمد كتير على JavaScript مع JSDoc، فيه شوية annotations بأسلوب Closure مابقتش تتعرف عليها بشكل خاص، فضروري تختبر الحاجات دي.

[Jamie]: يعني التحديث اللي "بيشتغل لوحده"... مش دايما "بيشتغل لوحده". أي نصايح للفرق اللي بتحاول تحدث من غير ما تكسر كل حاجة؟

[Alex]: Microsoft في الحقيقة بتنصح بتشغيل الكومبيلرين جنب بعض لفترة. حتى فيه package للتوافق اسمها `typescriptnpm:typescripttypescript6` عشان تقدر تعمل alias للـ setup القديم بتاعك وما تكسرش أدوات زي `TypeScript-eslint`.

[Jamie]: حلو أوي! وإيه حكاية التحكم في التوازي (parallelism) دي؟ شفت حاجة عن "checkers" و "builders"—هل ده زي البوكيمون، لازم نجمعهم كلهم؟

[Alex]: [يضحك] مش بالظبط، بس قريبة. مع tsgo، تقدر دلوقتي تتحكم في عدد الـ type-checking workers اللي شغالين بالتوازي باستخدام flag الـ `--checkers`. الافتراضي هو 4. لو عندك جهاز قوي، تقدر تعليه، بس workers أكتر يعني memory أكتر. وفيه كمان `--builders` للـ project-reference builders—مفيدة جداً للـ monorepos. ولو عايز تخليك قديم، فيه flag الـ `--singleThreaded` للتصحيح (debugging) أو مقارنة الأداء.

[Jamie]: بس لو زودت الـ checkers والـ builders أوي، ممكن تكسر الـ CI runner بتاعك؟

[Alex]: أيوه، ممكن ينتهي بيك الحال بـ "out of memory" errors كتير. Microsoft فعلاً بتحذر إن `--checkers 4 --builders 4` ممكن يفتح لحد 16 process، وده "ممكن يكون زيادة عن اللزوم". فـ يعني، بلاش تتهور أوي في الـ production.

[Jamie]: [PAUSE] آخر سؤال مهم—الإصدار المستقر (stable release) جاي إمتى فعلاً؟

[Alex]: خطة Microsoft كانت إنها تطلق TypeScript 7 المستقر بحلول أواخر يونيو 2026. لحد دلوقتي، هو لسه في المرحلة التجريبية (beta)، بس هو شغال فعلاً على مشاريع كود ضخمة في أماكن زي Slack و Google و Notion. وصف "beta" هنا متحفظ شوية—هما بيقولوا إنك غالباً تقدر تبدأ تستخدمه في شغلك الحقيقي من النهارده.

[Jamie]: يعني هو مش مجرد كلام في الهوا، بس هما حذرين جداً في التسمية. [PAUSE] طيب يا Alex، بسرعة كده: الناس تحدث دلوقتي ولا تستنى؟

[Alex]: لو الكود بتاعك نظيف وجاهز لـ TypeScript 6 ومش معتمد على الكومبيلر API، دوس. لو بتستخدم flags كتير متهالكة أو أدوات مخصصة (custom tools)، ممكن تستنى لحد ما 7.1 ينزل مع الـ API المستقر. بس بالنسبة للي بيدوروا على السرعة؟ ده وقتكم.

[Jamie]: وافتكروا يا جماعة، مع السرعة الكبيرة بتيجي... غالباً، وقت أكتر لشرب القهوة. أو، يعني، إنك تكتب كود فعلاً.

[Alex]: أو، لو أنت زيي، تقعد تبص للشاشة وأنت مش مصدق إن الـ build خلص خلاص. [PAUSE] ده كل اللي عندنا في حلقة النهارده من البودكاست الذكي من نيرد ليفل تك. شكراً لمتابعتكم، وافتكروا—خلوا الـ types بتاعتكم مظبوطة والـ builds سريعة زي الطلقة.

[Jamie]: لو عجبتكم الحلقة، اشتركوا، وسيبوا لنا تقييم، وشاركوها مع ملك الـ TypeScript memes المفضل عندكم. نشوفكم المرة الجاية! [موسيقى النهاية تتلاشى]