لقد قام الناس بنقل لعبة Doom إلى كل شيء بدءًا من الآلات الحاسبة وحتى سجلات النقد الخاصة بماكدونالدز. في الآونة الأخيرة، كانت هناك ضغوط لتشغيل البرنامج على الأنظمة الأساسية التي لا تتمتع بقوة المعالجة الفعلية، وتعتبر مستندات PDF وWord أحدث الأمثلة. بالطبع، هذه الأساليب بطيئة جدًا، ولكن بشكل لا يصدق، يمكن تنفيذ اللعبة على منصات غير الكمبيوتر.

لقد قام الناس بنقل لعبة Doom إلى كل شيء بدءًا من الآلات الحاسبة وحتى سجلات النقد الخاصة بماكدونالدز. في الآونة الأخيرة، كانت هناك ضغوط لتشغيل البرنامج على الأنظمة الأساسية التي لا تتمتع بقوة المعالجة الفعلية، وتعتبر مستندات PDF وWord أحدث الأمثلة. بالطبع، هذه الأساليب بطيئة جدًا، ولكن بشكل لا يصدق، يمكن تنفيذ اللعبة على منصات غير الكمبيوتر.

أخذ مهندس البرمجيات دميتري ميتروبولوس عمل نقل Doom إلى منصات غير الكمبيوتر إلى مستوى جديد تمامًا. نجح هذا المبرمج في تشغيل Doom ضمن نظام الكتابة الخاص بـ TypeScript، والذي كان معقدًا للغاية لدرجة أنه استغرق عامًا كاملاً لإكمال هذا العمل الفذ.

TypeScript هي لغة طورتها Microsoft وتضيف إمكانات التحقق من النوع الثابت إلى JavaScript لاكتشاف أخطاء الترميز قبل التنفيذ. فكر في الأمر كمدقق إملائي أو نحوي للتعليمات البرمجية الخاصة بك، مما يضمن إدخال الوظائف والمتغيرات بشكل صحيح. غالبًا ما يستخدمه المطورون لإنشاء تطبيقات JavaScript كبيرة.

يعتبر تشغيل الألعاب ضمن نظام الكتابة الخاص بـ TypeScript "مستحيلاً". حتى أن ميتروبولوس أشار إلى أنه بدأ المشروع ليثبت "بسرعة" سبب عدم إمكانية تنفيذه. ومع ذلك، عندما تعمق في بحثه، أصبح مهووسًا بإنجاحه. في النهاية، حتى مطوري TS ذوي الخبرة أعجبوا به ولم يكن لديهم ما يقولونه.

يتفاعل ميتروبولوس مع TypeScript الذي يعرض أخيرًا الإطار الأول لنهاية العالم.

قامت نسخة Mitropoulos من Doom بتشغيل 3.5 تريليون صف من الأنواع واستهلكت 177 تيرابايت. يستغرق تجميع إطار واحد 12 يومًا، مما يؤدي إلى بطء لا يصدق يبلغ 0.0000009645 إطارًا في الثانية. يجب أن يقوم متتبع النوع TypeScript بمعالجة 20 مليون مثيل كتابة في الثانية لإنتاج المخرجات، مما يؤدي إلى معدلات إطارات بطيئة للغاية.

وعلى الرغم من التكلفة، يعتقد ميتروبولوس أن تحقيق مكاسب في الأداء أمر ممكن. في قناة Michigan TypeScript Discord، اقترح أنه مع مزيد من التحسينات، يمكن تقليل أوقات التجميع إلى "1 إلى 12 ساعة". لقد حدد المجالات التي يمكنه فيها تحسين سرعته.

ولتحقيق ذلك، قام ببناء جهاز افتراضي بالكامل باستخدام أنواع TypeScript، بما في ذلك التنفيذ المنطقي لجميع تعليمات WebAssembly البالغ عددها 116 تعليمات اللازمة لتشغيل Doom. يجب إعادة إنشاء كل عنصر من عناصر الكمبيوتر العامل - الذاكرة، ومساحة القرص، وحتى ذاكرة التخزين المؤقت لوحدة المعالجة المركزية L1 - بعناية في نظام الكتابة. نظرًا لأن TypeScript يسمح فقط بتكرار السلاسل من الجانب الأيسر، فعليه كتابة الخوارزمية الثنائية في الاتجاه المعاكس.

يتطلب تشغيل البرنامج وقت تشغيل WebAssembly مخصصًا يتعامل مع كل شيء في محرر TypeScript. بالإضافة إلى ذلك، كان لا بد من تعديل مترجم TypeScript للتعامل مع الحجم الهائل للمشروع، حيث استهلك متتبع النوع وحده أكثر من 90 جيجابايت من ذاكرة الوصول العشوائي أثناء التنفيذ.

ووصف ميتروبولوس العمل بأنه تحدٍ شاق. لقد كتب 12364 اختبارًا مكتوبًا بخط اليد، وتعلم لغات برمجة متعددة، وقدر في البداية أن المشروع سيتطلب 1.25 بيتابايت قبل التحسين. في مرحلة ما، كان تجميع الإطار يتطلب إنشاءًا مستمرًا لمدة ثلاثة أشهر. وقال إن الذكاء الاصطناعي لا يمكن أن يساعد.

وقال ميتروبولوس في شرحه المقتضب بالفيديو ومدته سبع دقائق: "أوه، الذكاء الاصطناعي لا يمكنه فعل أي شيء بشأن أي من هذه الأشياء". "إنه مستوى منخفض جدًا، ولا توجد مصفوفات أو كائنات أو سلاسل أو منطقيات داخل المحرك، فقط أرقام ثنائية، ويستخدم Doom فقط أعدادًا صحيحة 64 بت و32 بت، هذا كل شيء. أوه، وهذه الأعداد الصحيحة ليست موقعة أو غير موقعة. لقد استغرق الأمر مني طوال اليوم لمعرفة ذلك."

استغرقت هذه المهمة الشاقة عامًا كاملاً، حيث عملت 18 ساعة يوميًا لإنجازها. كان لدى مطوري TS الآخرين الكثير من الأسئلة حول المشروع، لذلك يخطط ميتروبولوس لإصدار مقطعي فيديو إضافيين يشرحان التفاصيل عالية التقنية ودوافعه. الآن، لدينا دليل آخر على أن لعبة Doom يمكنها العمل على أي شيء، بما في ذلك الأشياء التي لا يمكنها تشغيل اللعبة على الإطلاق.