لغة التجميع الموجهة للألعاب

لغة التجميع الموجهة للألعاب ( GOAL ، والمعروفة أيضًا باسم لغة التجميع لكائنات الألعاب ) هي لغة برمجة ، وهي لهجة من لغة Lisp ، تم تصميمها لألعاب الفيديو التي طورها آندي جافين وفريق Jak and Daxter في شركة Naughty Dog .

تمت كتابته باستخدام لغة Allegro Common Lisp واستخدم في تطوير سلسلة ألعاب Jak and Daxter بأكملها (باستثناء Daxter و Jak and Daxter: The Lost Frontier ).

تصميم

يشبه بناء جملة لغة GOAL لهجة لغة Scheme من لغة Lisp ، مع احتوائها على العديد من خصائص البرمجة الكائنية المميزة ، مثل الأصناف والوراثة والدوال الافتراضية . [ 1 ] تشجع GOAL أسلوب البرمجة الإجرائية : حيث تميل البرامج إلى أن تتكون من سلسلة من الأحداث المراد تنفيذها، بدلاً من أسلوب البرمجة الوظيفية الذي يعتمد على تقييم الدوال بشكل متكرر. وهذا يختلف عن لغة Scheme، التي تسمح بمثل هذه الآثار الجانبية ولكنها لا تشجع أسلوب البرمجة الإجرائية.

لا يعمل برنامج GOAL ضمن مترجم ، بل يُترجم مباشرةً إلى لغة الآلة الخاصة بجهاز PlayStation 2 للتنفيذ. يوفر البرنامج إمكانيات محدودة لجمع البيانات المهملة ، معتمدًا بشكل كبير على دعم وقت التشغيل . كما يوفر أدوات تخصيص ذاكرة ديناميكية مصممة خصيصًا لجعله مناسبًا للتشغيل في ذاكرة ثابتة على جهاز ألعاب الفيديو. يدعم GOAL بشكل واسع تضمين كود لغة التجميع باستخدام rletصيغة خاصة، [ 1 ] مما يسمح للبرامج بدمج لغة التجميع وبنى لغات البرمجة عالية المستوى بحرية ضمن دالة واحدة.

تم تنفيذ مُصرّف GOAL بلغة Allegro Common Lisp . يدعم هذا المُصرّف جلسة استماع طويلة الأمد أثناء التجميع، مما يُتيح له معرفة حالة البرنامج المُجمّع، وبالتالي البرنامج قيد التشغيل، بما في ذلك جدول الرموز. بالإضافة إلى الربط الديناميكي، يسمح هذا بتعديل دالة، وإعادة تجميعها، وتحميلها، وإدراجها في لعبة قيد التشغيل دون الحاجة إلى إعادة تشغيلها. تُشبه هذه العملية ميزة "التعديل والمتابعة" التي تُوفرها بعض مُصرّفات C++ ، ولكنها تسمح للبرامج باستبدال أجزاء كبيرة من التعليمات البرمجية (حتى ملفات الكائنات بأكملها)، دون مقاطعة اللعبة قيد التشغيل باستخدام المُصحّح. استُخدمت هذه الميزة لتنفيذ التعليمات البرمجية وتمكين تدفق المستويات في لعبتي Jak وDaxter .

الاستخدامات

استُخدمت لغة GOAL لأول مرة في لعبة Jak and Daxter: The Precursor Legacy . وقد طُوّرت اللغة السابقة لها، Game Oriented Object Lisp (GOOL)، أيضاً بواسطة آندي جافين للعبة Crash Bandicoot .

بما أن شركة Naughty Dog لم تعد توظف مهندس التطوير والصيانة الرئيسي لشركة GOAL، وكانت تحت ضغط من شركتها الأم الجديدة ، Sony ، لمشاركة التكنولوجيا بين الاستوديوهات، فقد تحولت Naughty Dog بعيدًا عن لغة Lisp: [ 2 ]

بصراحة، السبب الرئيسي لعدم استخدامنا GOAL في تطوير الجيل القادم هو انضمامنا إلى سوني. أتخيل صدمة سوني عندما اشترت Naughty Dog قبل بضع سنوات، آملةً في الاستفادة من بعض تقنياتنا في استوديوهات سوني الأخرى، ثم أدركت استحالة استخدام أي جهة أخرى لقاعدة بياناتنا البرمجية. تريد سوني منا مشاركة الكود مع الاستوديوهات الأخرى، وهذا الأمر متبادل - استخدام الاستوديوهات الأخرى لكودنا والعكس صحيح. أضف إلى ذلك صعوبة تعلم لغة برمجة جديدة للموظفين الجدد، ونقص الدعم من أدوات التطوير الخارجية (كان لدينا مُترجمنا، ورابطنا، ومصحح الأخطاء الخاص بنا، وكنا نعتمد بشكل كبير على Emacs كبيئة تطوير متكاملة ) ، وغيرها ، ما يعني وجود العديد من العوامل الأخرى المؤثرة. مع ذلك، تجدر الإشارة إلى أن هذه المشكلات ليست تقنية بالمعنى الحرفي، بل هي مشكلات اجتماعية.

سكوت شوماكر

ومع ذلك، استأنفت شركة Naughty Dog استخدام GOAL لكتابة البرامج النصية في بعض ألعاب PlayStation 3 ، بما في ذلك The Last of Us . [ 3 ]

أوبن جول

بدأ مشروع OpenGOAL، وهو مشروع مجتمعي، في عام 2020 بهدف نقل لغة GOAL إلى معمارية x86-64 عن طريق فك تجميع ملفات ألعاب Jak and Daxter: The Precursor Legacy و Jak II و Jak 3 ، و Jak X: Combat Racing (مؤقتًا )، ثم إعادة تجميعها بلغة أصلية. [ 4 ] يتضمن المشروع مُجمِّع GOAL مكتوبًا بلغة C++، بالإضافة إلى حلقة قراءة-تقييم-طباعة لتمكين سير عمل مشابه لتنفيذ Naughty Dog الأصلي. بحلول أبريل 2026، أنتج فريق OpenGOAL نسخًا لأنظمة Windows و macOS و Linux للثلاثية الرئيسية، وهي قابلة للإكمال بنسبة 100%. [ 5 ] [ 6 ] [ 7 ] [ 8 ]

مراجع

  1. 1 2 شوماكر، سكوت (11 أغسطس 2005). " [ Sweng-gamedev ] لغات برمجة عالية المستوى (كانت: موازنة الأحمال متعددة المنصات من الجيل التالي)" . شركة ميدنايت رايدر تكنولوجيز: القائمة البريدية sweng-gamedev . مؤرشف من الأصل في 12 أبريل 2007. تم الاطلاع عليه في 20 أبريل 2019 .
  2. شوماكر، سكوت (8 أغسطس 2005). " [ Sweng-gamedev ] لغات برمجة عالية المستوى (كانت: موازنة الأحمال متعددة المنصات من الجيل التالي)" . شركة ميدنايت رايدر تكنولوجيز: القائمة البريدية sweng-gamedev . مؤرشف من الأصل في 20 يوليو 2007. تم الاطلاع عليه في 20 أبريل 2019 .
  3. أنتوني نيومان (28 أكتوبر 2017). غير متزامن: نظام القتال اليدوي في لعبة ذا لاست أوف أس (شريط فيديو). مؤتمر مطوري الألعاب. الدقيقة 37. مؤرشف من الأصل بتاريخ 14 ديسمبر 2021. تم الاطلاع عليه بتاريخ 5 نوفمبر 2017 .
  4. "OpenGOAL" . OpenGOAL . مؤرشف من الأصل في 13 ديسمبر 2022. تم الاطلاع عليه في 23 أكتوبر 2022 .
  5. "جاك وداكستر: إكمال اللعبة بنسبة 100%!" . يوتيوب . OutrageousJosh. 22 يونيو 2022. تم الاطلاع عليه في 16 مايو 2024 .
  6. "تقرير مرحلي - أكتوبر 2023" . OpenGOAL . 30 أكتوبر 2023. مؤرشف من الأصل في 16 مايو 2024. تم الاطلاع عليه في 16 مايو 2024 .
  7. "تقرير مرحلي - أبريل 2024" . OpenGOAL . 30 أبريل 2024. مؤرشف من الأصل في 16 مايو 2024. تم الاطلاع عليه في 16 مايو 2024 .
  8. "تقرير مرحلي - الربع الأول من عام 2026" . تم الاطلاع عليه في 1 أبريل 2026 .{{cite web}}: CS1 maint: url-status ( link )