روابط روبي لمحرك جافا سكريبت من جانب الخادم؟

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

  •  22-09-2019
  •  | 
  •  

سؤال

أرغب في أن يكون تطبيق الرف الخاص بي قادرًا على التواصل مع محرك JavaScript من جانب الخادم.

اعتبارا من الآن الطريقة الوحيدة التي أعرف أن هذا يمكن أن تكون ممكنة ، هي عن طريق تشغيل Jruby و Rhino على JVM ، لكنني آمل في حل أصغر.

هل سمع أحد عن خيار آخر ، ربما ، خيار؟

تحرير: قراءة التعليقات التي بدأت أظن أنني كنت مخطئًا في أن وجود كل من Jruby و Rhino Run على JVM سيؤكد بعض التشغيل البيني بين Ruby و JavaScript ...؟
هذا ليس حلاً مرغوبًا فيه بالنسبة لي على أي حال ، لكن ما زلت أرغب في توضيح ذلك.

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

المحلول

المتسابق روبي الآن خارج الألفا ويحوم في مكان ما بين ألفا وبيتا. يدعم الآن:

  • استدعاء رمز Ruby من JavaScript
  • استدعاء وظائف JavaScript من Ruby
  • تضمين كائنات روبي في نطاق جافا سكريبت.
  • ترك الأشياء روبي يكون نطاق JavaScript الخاص بك

نصائح أخرى

  • جونسون هو Rubygem الذي يحول محرك Mozilla Spidermonkey JavaScript إلى امتداد التصوير بالرنين المغناطيسي ويسمح بالتكامل العميق بين روبي وجافا سكريبت ،
  • هناك شوكة جونسون الذي يحل محل محرك SpiderMonkey بمحرك Mozilla Tracemonkey و
  • ليندون يشبه جونسون ولكن مع JavaScriptCore بدلاً من Spidermonkey و Macruby بدلاً من التصوير بالرنين المغناطيسي.

أعتقد أنني أتذكر أيضًا شخصًا يعمل على تضمين V8 مع التصوير بالرنين المغناطيسي ، لكن لا يمكنني العثور على المرجع الآن.

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

التوقف عن الربط

تم بناء Lyndon على أساس أفضل بكثير ، ولكن من الواضح أنه يتطلب تشغيل OSX على الخادم. بالإضافة إلى ذلك ، لم يتم إصدار Macruby بعد.

أعتقد أن Jruby+Rhino ربما يكون الخيار الأكثر استقرارًا ، على الرغم من أنه سيتعين عليك بناء التكامل بنفسك: إنهما مجرد تطبيقات لغة مستقلة تحدث على نفس VM ، ولكن لا يوجد تكامل بينهما.

مختلف عن المشكلة هو آر كيلي وهو محلل جافا سكريبت ومحرك التنفيذ مكتوب في روبي.

كبديل ، يمكنك محاولة التعامل مع المشكلة من اتجاه مختلف: بدلاً من الحفاظ على منطق التطبيق الخاص بك في JavaScript وتشغيله على العميل والخادم ، يمكنك الحفاظ على منطق التطبيق الخاص بك في Ruby وتشغيله على الخادم و العميل: هناك اثنين من المترجمين الذين يمكنهم تجميع (مجموعة فرعية من) Ruby إلى JavaScript. عليهم Rubyjs. (يوجد ايضا Hotruby, ، وهو مترجم yarv bytecode مكتوب في JavaScript ، ولكن من المحتمل جدًا أن يكون ذلك مبالغة هائلة لما تفعله.)

وأخيراً وليس آخراً ، يمكنك أن تفعل ما فعلته القضبان في الأصل مع مساعدي JavaScript الخاصة بهم: أنت لا تحدد منطقك في Ruby أو JavaScript ، بدلاً من ذلك تحدده بمجرد في Ruby DSL الداخلي و انشاء كل من الياقوت و منطق JavaScript من ذلك.

القي نظرة على روبي وحيد القرن. يستخدم Jruby و Rhino لتضمين JavaScript في بيئة الياقوت. من بين أشياء أخرى ، يدعم التقييم الآمن ، واتصال وظائف Ruby من JavaScript والعكس بالعكس (وظائف JavaScript من Ruby)

هناك أيضًا "The Ruby Racer" الذي يدمج V8 في التصوير بالرنين المغناطيسي. لا تزال هذه مرحلة ما قبل الألفا ، لكنني آمل أن أحصل على نسخة صالحة للاستخدام في وقت ما في مارس من العام المقبل

محرك آخر أعرفه هو Snarl الذي يستخدم أيضًا Jruby و Rhino لتأثير مماثل.

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