📋

حقائق رئيسية

  • تستخدم العملية Visual Studio 2022 لترجمة كود C++23 لنظام ويندوز 95.
  • تم تعطيل دعم الاستثناءات والمكتبة القياسية لضمان التوافق.
  • يتم استخدام رابط (Linker) من عام 1998 لإنشاء الملف التنفيذي النهائي.
  • يعمل الكود على معالج Pentium بذاكرة عشوائية بحجم 16 ميجابايت.

ملخص سريع

يسلط عرض تقني الضوء على إمكانية كتابة الكود باستخدام معيار C++23 الحديث وتشغيله على نظام تشغيل قديم هو ويندوز 95. يتطلب هذا الإنجاز إعدادات محددة داخل Visual Studio 2022 لاستهداف الأجهزة الأقدم، وتحديداً معالج Pentium ذي الذاكرة العشوائية 16 ميجابايت فقط.

تتضمن العملية تجاوز تبعات المكتبة القياسية للعمل مباشرة مع WinAPI. من خلال التخلص من وسائل الراحة الحديثة مثل الاستثناءات والمخصصات القياسية، يمكن للمطورين إنشاء ملف تنفيذي خفيف الوزن. تحدد المقالة الخطوات اللازمة لتحقيق ذلك، بما في ذلك إنشاء تنفيذيات بسيطة للفئات القياسية واستخدام رابط من حقبة 1998 لإنهاء عملية البناء.

تحدي التوافق مع الأنظمة القديمة

يشكل تشغيل البرامج المكتوبة بأحدث ميزات اللغة على الأجهزة القديمة عائقاً تقنياً كبيراً. يتعلق المفهوم بالاستفادة من قدرات C++23 - مثل الوحدات (modules)، والدوال اللامبرية (lambdas)، وconstexpr - وإجبارها على العمل ضمن القيود الصارمة لبيئة ويندوز 95. تفتقر هذه البيئة إلى أنظمة الدعم القوية الموجودة في أنظمة التشغيل الحديثة.

العقبة الرئيسية هي غياب مكتبة قياسية حديثة. في تثبيت ويندوز 95 القياسي، لا توجد مكتبات روابط ديناميكية (DLLs) تدعم الميزات المطلوبة بواسطة C++23. لذلك، يجب أن يكون الكود متكاملاً بذاته. يثبت العرض أنه بالضبط الإعدادات المناسبة، يمكن للمترجم إنشاء كود لا يعتمد على تبعات تشغيلية خارجية غير موجودة ببساطة على النظام المستهدف.

إعداد بيئة البناء

يبدأ الإعداد بـ Visual Studio 2022، وهي بيئة تطوير متكاملة (IDE) حديثة. لاستهداف النظام القديم، يجب إعداد المترجم لإنشاء كود آلة 32 بت x86. ومع ذلك، تتضمن أهم التعديلات ما يتم استبعاده من عملية البناء.

تتطلب العملية تعطيل مكونين رئيسيين:

  • الاستثناءات: يتم إيقاف آلية try/catch لتجنب الربط مع تشغيل معالجة الاستثناءات.
  • المكتبة القياسية: يتم إزالة تضمين الترويسات القياسية مثل <string> أو <vector> لمنع الربط التلقائي مع المكتبة القياسية.

تضمن هذه الإعدادات أن المترجم ينتج أصغر ملف ثنائي ممكن دون تبعات خفية.

إعادة تنفيذ المكونات القياسية

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

علاوة على ذلك، تم تصميم مخصصات مخصصة للعمل مع وظائف WinAPI وهي GlobalAlloc وGlobalFree. من خلال كتابة هذه المغلفات (wrappers)، يمكن للكود الاستفادة من إدارة ذاكرة نظام التشغيل مباشرة. يسمح هذا باستخدام بناء الجملة الحديثة والميزات مثل الدوال اللامبرية وconstexpr بينما يتم ضبط الآليات الأساسية لتناسب البنية القديمة.

الربط والتنفيذ

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

يعمل البرنامج الناتج بنجاح على جهاز Pentium مزود بذاكرة عشوائية 16 ميجابايت فقط. يثبت هذا الن outcome أن معيار C++23 مرن بما يكفي لدعم قاعدة كود موحدة. يمكن للمطورين نظرياً كتابة الكود مرة واحدة، وباستخدام علامات الترجمة ومكتبات الدعم الصحيحة، نشره على أنظمة متطورة وعشاق الحوسبة القديمة على حد سواء.