ما هو محرك Javascript الذي ستقوم بتضمينه في تطبيقك؟[مغلق]

StackOverflow https://stackoverflow.com/questions/93692

  •  01-07-2019
  •  | 
  •  

سؤال

أرغب في تضمين Javascript في محرك ألعاب هواية خاص بي.الآن بعد أن أصبح لدينا الجيل الخامس من محركات Javascript (كلها سريعة جدًا) أشعر بالفضول ما هو المحرك الذي ستختار تضمينه في إطار عمل C++ (والذي يتضمن السهولة الفعلية لتضمينه)؟

ملحوظة:فقط للتوضيح، أنا لست مهتمًا بالبرمجة النصية لـ DOM أو كتابة Javascript في المتصفح.

فيما يلي مجموعة من الروابط حتى الآن وبعض النصائح من الموضوع

للعلم فقط، أنا أحب Lua وقد قمت بالفعل بدمجها في محركات الألعاب حوالي 5 مرات في العمل.

ولكن الآن يعد هذا مشروع هواية، وأعتقد أن Javascript معروف لدى معظم مطوري الويب ولأن مطوري ECMA وFlash وFlex، فإن محرك الألعاب الذي يستخدم Javascript وXML للبرمجة النصية سيكون أكثر سهولة في الاستخدام ويلبي احتياجات شريحة أكبر من المستخدمين. قاعدة المستخدمين (والتي لم تتح لها الفرصة حتى الآن لاستخدام مهاراتهم في الألعاب) أكثر من قاعدة المستخدمين مع Lua (وهناك الكثير من الأشخاص الموجودين حولهم!).

وللتسجيل أيضًا، سأختار V8 في هذا الإصدار، غالبًا لأنني أحب أسلوب C++ الخاص به.

هل كانت مفيدة؟

المحلول

موزيلا SpiderMonkey سهل إلى حد ما وموثق جيدًا.إنها واجهة برمجة تطبيقات C، ولكن من السهل تغليفها بلغة C++.يمكن تجميعها لتكون آمنة لسلسلة المحادثات، وهو أمر مفيد للألعاب نظرًا لأنك على الأرجح تريد أن يكون لديك المنطق الرئيسي في سلسلة رسائل واحدة ومنطق واجهة المستخدم في سلسلة محادثات ثانية.

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

هناك ايضا WebKit's SquirrelFish, ، ولكن لم أتمكن من العثور على نسخة مستقلة من ذلك عندما كنت أبحث سابقًا.

نصائح أخرى

لقد جربت كلاً من SpiderMonkey وV8.مع SpiderMonkey، لم أتمكن من الحصول على أي شيء للعمل.لم أتمكن حتى من الحصول على الأمثلة الموجودة على mozilla.org لتجميعها.

لقد عمل V8 خارج الصندوق وحصلت على بعض التفاعلات الأساسية لـ C++ <-> Javascript بسرعة كبيرة.هناك بعض قوائم جوجل للأشخاص الذين يستخدمون V8، وقد وجدت الإجابة على معظم أسئلتي هناك بالفعل.

أعتقد أن الإصدار 8 يعمل فقط على معالجات x86 وx64 وarm في الوقت الحالي.والذي قد يكون عيبا.

فيما يتعلق بسلامة الخيط، من تشمل/v8.h:

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

يمكنك قراءة المزيد في الملف المصدر (يبدو مثل وثائق دوكسيجين، لكن يبدو أنهم لم يضعوه في أي مكان).

تحديث: تمت إزالة هذا التعليق، ربما منذ بعض الوقت.يبدو أن الإصدار 8 لديه الآن Isolate الكائن الذي يمثل مثيلاً للمحرك.واحد Isolate لا يمكن استخدام المثيل إلا في موضوع واحد في كل مرة، ولكن يمكن استخدام مثيلات أخرى Isolate يمكن استخدام المثيلات في سلاسل رسائل أخرى في نفس الوقت.

هل Java Script هي اللغة المناسبة حقًا للعبتك؟العديد من الألعاب الموجودة تستخدم لوا لغة البرمجة للكتابة النصية.من السهل دمجها، وهي صغيرة جدًا، ويتم تجميعها على كل منصة تقريبًا كما أنها سهلة التعلم.

هذا خارج الموضوع إلى حد ما، لكن التفكير خارج الصندوق قد يكون مهمًا لتصحيح الأمور.

ال المعيار ظهر ذلك عندما ظهر محرك V8 لأول مرة في المشهد الذي أظهر أن محرك V8 أسرع بنسبة 1000٪ (أو أيًا كان) من المحركات الأخرى وكان مرجحًا بشكل كبير لتفضيل المحركات التي كانت جيدة في العود.إذا كان الكود الخاص بك يستخدم الكثير من التكرار، فقد يمنحك V8 ميزة كبيرة من حيث السرعة.بالنسبة لعناصر الويب "العالم الحقيقي" (حاليًا، على الأقل)، يبدو أن SquirrelFish Extreme هو الفائز في الوقت الحالي (انظر بلدي بلوق وظيفة حول هذا الموضوع للحصول على نتائج الاختبار غير الرسمي الخاص بي).

وكما أشار آخرون، فإن سهولة التكامل وجودة التوثيق قد تتفوق على السرعة المحضة.هذا لا يعني جاك إذا لم تشحن!

عند الحديث عن محرك البرمجة النصية وc++، يمكنك أيضًا التفكير فيه Chaisscript.إنه قريب من برنامج ecma النصي (~Javascript) ومن السهل جدًا تضمينه في لغة c++.

البائع من صفحة الويب:

...من ناحية أخرى ، تم تصميم Chaiscript من الألف إلى الياء مع التكامل مع وضع C ++ في الاعتبار....لا يوجد لدى Chaiscript أي مُجمعات ميتا ، ولا تبعيات المكتبة ، ولا متطلبات نظام البناء ولا أمتعة قديمة من أي نوع.يمكن أن تعمل بسلاسة مع أي وظائف C ++ التي تعرضها لها.لا يجب إخباره بشكل صريح عن أي نوع ، فهو يركز على الوظيفة.

مع Chaiscript ، يمكنك بدء البرمجة النصية حرفيًا عن طريق إضافة ثلاثة أسطر من التعليمات البرمجية إلى برنامجك وعدم تعديل خطوات الإنشاء الخاصة بك على الإطلاق.

سأنتظر ظهور TraceMonkey، التطور التالي لـ SpiderMonkey.أسرع وأفضل تصميما.(يستخدم الكود المتبرع به من Adobe Flash).

تفتخر Tracemonkey بقدرتها على جعل الإجراءات المتكررة أسرع بكثير من خلال تحسين البنية بقوة في وقت التشغيل بناءً على الاستخدام الفعلي، وهو ما قد يكون مفيدًا لتعزيز اللعبة.

جرب جافا سكريبت .NET:

http://javascriptdotnet.codeplex.com/

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

قد ترغب أيضًا في إلقاء نظرة على V8 من جوجل.إنها جديدة جدًا، رغم ذلك.

أود أن أراقب الإصدار 8 لأنه محرك جافا سكريبت سريع الصراخ، وأنا متأكد من أنه سيطور دعمًا عبر الأنظمة الأساسية مع نموه حتى مرحلة النضج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top