سيصل Firefox 70 مع مترجم جافا سكريبت محسّن

فايرفوكس 70

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

للقيام بذلك ، قامت Mozilla بتطوير وإضافة مترجم ثانوي جديد جافا سكريبت لمحرك عرض JavaScript المدمج في Firefox 70. مع توفر Firefox 70 في أكتوبر القادم ، تعلن Mozilla عن إدارة أفضل لشفرات JavaScript باستخدام مترجم الشفرة الجديد الذي تمت إضافته إلى محرك JavaScript الخاص بها.

لتحقيق هذا الهدف ، توضح موزيلا ذلك في محركات JavaScript الحديثة ، يتم تنفيذ كل وظيفة مبدئيًا في مترجم الشفرة.

يتم تجميع الوظائف التي تسمى الكثير في كود الجهاز الأصلي. وهذا ما يسمى تجميع أو تجميع JIT على الطاير. بما يخص يشتمل Firefox أيضًا على مترجم شفرات JavaScript مكتوب بلغة C ++ ومستويات مختلفة من تجميع JIT.

أولاً ، لدينا مترجم JIT أساسي يقوم بتجميع كل عبارة ثنائية الرمز مباشرة في جزء صغير من رمز الآلة باستخدام التخزين المؤقت المضمّن لكل من الأداء وجمع المعلومات لمترجم JIT المسمى IonMonkey أو Ion.

بدوره ، يستخدم مترجم IonMonkey تحسينات متقدمة لإنشاء رمز سريع للخيارات الهامة.

وتجدر الإشارة إلى أنه عندما يتم استدعاء دالة يتم تجميعها بالفعل بنوع جديد من الوسيطة ، يمكن "تعديل" الرمز الموجود في الوظيفة وإسقاطه. في هذه الحالة ، يستمر التنفيذ في الكود الأساسي حتى بناء Ion التالي.

على الرغم من أن عملية تفسير شفرة JavaScript هذه قد نجحت بشكل جيد حتى الآن ، إلا أن فريق يوضح Firefox أنه واجه بعض المشكلات مع الأول جزء تتكون من مترجم C ++ ومترجم JIT الأساسي.

فايرفوكس 70

في الواقع، بعض تطبيقات الويب الحديثة مثل مستندات Google أو Gmail تشغيل الكثير من جافا سكريبت لدرجة أن المترجم قاعدة وحتى مترجم JIT يمكنهم قضاء وقت طويل في محاولة تجميع آلاف الوظائف.

أيضًا ، كان مترجم C ++ بطيئًا جدًا ولا يقوم بجمع معلومات عن النوع ، مما يؤخر التجميع الأساسي. كان أحد الحلول هو سحبها من الخيط ، لكن ذلك كان سيشكل مخاطرة في الأداء.

لحل هذه المشكلات ، علق الأشخاص في Mozilla بما يلي:

يكون المترجم الأساسي بين مترجم C ++ ومترجم JIT الأساسي ويحتوي على عناصر من كلا المستويين.

ينفذ جميع عبارات الرمز الثنائي مع حلقة مترجم ثابتة (مثل مترجم C ++) ، ويستخدم تقنيات التخزين المؤقت المضمنة لتحسين الأداء وجمع معلومات النوع (مثل JIT الأساسية).

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

أيضا ، منذ ذلك الحين أراد مطورو Firefox أن يستخدم المترجم الأساسي نفس ذاكرات التخزين المؤقت عبر الإنترنت ونفس المعلومات مثل JIT ، تمت إضافة بنية بيانات جديدة تسمى JitScript.

يحتوي JitScript على جميع معلومات النوع وهياكل بيانات التخزين المؤقت المضمنة المستخدمة من قبل المترجمين الأساسيين ومجمع JIT.

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

من ناحية أخرى ، نظرًا لأن المترجم الأساسي والمترجم JIT متطابقان ، يمكن أيضًا مشاركة الكثير من الشفرة التي تم إنشاؤها.

للقيام بذلك ، تم إنشاء فئة أساسية تسمى BaselineCodeGen مع فئتين مشتقتين أخريين. يستخدم المحول البرمجي الأساسي الفئة الأولى BalineCompiler لترجمة الرمز الثانوي للبرنامج النصي إلى رمز الجهاز.

يتم استخدام فئة BaselineInterpreterGenerator الثانية لإنشاء رمز للمترجم الأساسي. وباستخدام فئة BaselineInterpreterGenerator ، تمكن فريق Firefox من بناء مترجم أساسي.

مصدر: https://hacks.mozilla.org/


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.