LuaJIT

LuaJIT هو مترجم ومفسر فوري لتتبع لغة البرمجة Lua .

تاريخ

بدأ مشروع LuaJIT في عام 2005 على يد المطور مايك بال، وتم إصداره بموجب ترخيص المصادر المفتوحة MIT. [ 4 ]

تضمن الإصدار الرئيسي الثاني من المترجم، 2.0.0، تحسينات كبيرة في الأداء. [ 5 ]

يستخدم LuaJIT إصدارات متجددة. يوصي مايك بال، مبتكر البرنامج والقائم على صيانته، باستخدام أحدث إصدار من الفرع v2.1، ولا يؤمن بالإصدارات الثابتة. [ 6 ]

استقال مايك بال في عام 2015، ولم يقم منذ ذلك الحين إلا بإجراء تعديلات طفيفة على الإصدار 2.1 المستقبلي. [ 7 ]

مستخدمون بارزون

أداء

غالبًا ما يكون LuaJIT أسرع بيئة تشغيل للغة Lua. [ 13 ] كما تم تصنيف LuaJIT على أنه أسرع تطبيق للغة برمجة ديناميكية. [ 14 ] [ 15 ]

تتضمن LuaJIT واجهة وظائف خارجية متوافقة مع هياكل بيانات C. ويُنصح باستخدامها في الحسابات العددية. [ 16 ]

التتبع

LuaJIT هو مُصرّف تتبع فوري . يختار LuaJIT الحلقات واستدعاءات الدوال كنقاط ارتكاز للتتبع لبدء تسجيل المسارات الساخنة المحتملة . تتطلب استدعاءات الدوال ضعف عدد مرات الاستدعاء لبدء التسجيل مقارنةً بالحلقات. بمجرد أن يبدأ LuaJIT التسجيل، يتم تضمين جميع عمليات التحكم، بما في ذلك القفزات والاستدعاءات، لتشكيل تتبع خطي. تُخزّن جميع تعليمات البايت كود المُنفّذة وتُحوّل تدريجيًا إلى تمثيل وسيط ثابت أحادي التعيين خاص بـ LuaJIT . غالبًا ما يكون مُصرّف التتبع الخاص بـ LuaJIT قادرًا على تضمين وإزالة عمليات الإرسال من البرمجة الكائنية، والمعاملات ، وتعديلات الأنواع . [ 17 ]

التمثيل الداخلي

يستخدم LuaJIT نوعين من التمثيل الداخلي. يُستخدم رمز بايت قائم على المكدس للمفسر ، بينما يُستخدم نموذج إسناد ثابت أحادي للمترجم الفوري. غالبًا ما يقوم المترجم الفوري بتعديل رمز بايت المفسر، عادةً لبدء تنفيذ تتبع مُجمَّع أو لتمييز جزء من رمز البايت لتسببه في عدد كبير جدًا من عمليات إيقاف التتبع. [ 15 ]

-- حلقة تكرارية باستخدام عبارة ifالموضع x = 0for i = 1 , 1e4 do x = x + 11 if i % 10 == 0 then -- if-statement x = x + 22 end x = x + 33 end
---- بداية التتبع 1 Ex.lua:5 التتبع 1 IR 0001 int SLOAD #2 CI 0002 > num SLOAD #1 T 0003 num ADD 0002 +11 0004 int MOD 0001 +10 0005 > int NE 0004 +0 0006 + num ADD 0003 +33 0007 + int ADD 0001 +1 0008 > int LE 0007 +10000 0009-- حلقة ------------ 0010 num ADD 0006 +11 0011 int MOD 0007 +10 0012 > int NE 0011 +0 0013 + num ADD 0010 +33 0014 + int ADD 0007 +1 0015 > int LE 0014 +10000 0016 int PHI 0007 0014 0017 num PHI 0006 0013 ---- TRACE 1 stop -> loop TRACE 2 start 1/4 Ex.lua:8 TRACE 2 IR 0001 num SLOAD #1 PI 0002 int SLOAD #2 PI 0003 num ADD 0001 +22 0004 num ADD 0003 +33 0005 int ADD 0002 +1 0006 > int LE 0005 +10000 0007 num CONV 0005 num.int TRACE 2 stop -> 1

الإضافات

يضيف LuaJIT العديد من الإضافات إلى تطبيقه الأساسي، Lua 5.1، ومعظمها لا يخل بالتوافق. [ 18 ]

  • "BitOp" للعمليات الثنائية على الأعداد الصحيحة غير الموقعة 32 بت (يتم تجميع هذه العمليات أيضًا بواسطة المترجم في الوقت المناسب) [ 19 ]
  • "CoCo"، مما يسمح باستئناف تشغيل الجهاز الظاهري بشكل كامل عبر جميع السياقات [ 20 ]
  • واجهة وظيفة خارجية [ 21 ]
  • بايت كود قابل للنقل (بغض النظر عن البنية أو حجم الكلمة أو ترتيب البايتات، وليس الإصدار) [ 18 ]

مراجع

  1. علامات LuaJIT
  2. "LuaJIT" . LuaJIT . تم الاطلاع عليه بتاريخ 25 فبراير 2022 .
  3. "LuaJIT/حقوق النشر في الإصدار 2.1 · LuaJIT/LuaJIT" . جيثب . 7 يناير 2022.
  4. "مشروع LuaJIT" . luajit.org . تم الاطلاع عليه بتاريخ 17-06-2023 .
  5. بال، مايك. "ردًا على: [ إعلان ] llvm-lua 1.0" . lua-users.org . تم الاطلاع عليه بتاريخ 25 فبراير 2022 .
  6. "حالة المشروع - المشكلة رقم 665 - LuaJIT/LuaJIT" . GitHub . تم الاطلاع عليه في 3 فبراير 2023 .
  7. " [ إعلان ] نبحث عن مشرفين جدد لـ LuaJIT - luajit - FreeLists" . www.freelists.org . تاريخ الاسترجاع: 29-03-2023 .
  8. دينيو، لوران. "لغة لوا (جيت) لحساب فيزياء حزمة المسرع" . خادم وثائق سيرن . سيرن . تم الاسترجاع في 25 فبراير 2022 .
  9. "OpenResty® - الموقع الرسمي" . openresty.org .
  10. "Lua - وثائق Neovim" . neovim.io . تم ​​الاطلاع عليه بتاريخ 2024-05-07 .
  11. "Kong/kong" . GitHub . Kong. 25 فبراير 2022. تم الاسترجاع في 25 فبراير 2022 .
  12. "المساعدة في جعل Luajit أسرع" . blog.cloudflare.com . ١٩ أكتوبر ٢٠١٧. تم الاطلاع عليه بتاريخ ٢٥ فبراير ٢٠٢٢ .
  13. "أداء LuaJIT" .
  14. "لورانس ترات: أثر التتبع الميتا على تصميم وتنفيذ الآلات الافتراضية" . tratt.net . تم الاطلاع عليه بتاريخ 2 مارس 2022 .
  15. 1 2 داندريا، لوران (2019). تحليل سلوكي لمترجم JIT المتتبع المدمج في برنامج تصميم المسرع المنهجي (أطروحة). سيرن . تم الاطلاع عليه في 31 يوليو 2022 .
  16. بال، مايك. "ضبط الحسابات العددية لـ LuaJIT (كان ردًا على: [ ANN ] Sci-1.0-beta1) - luajit - FreeLists" . www.freelists.org .
  17. روتنكولبر، ماكس. "الربط اللاحق: الترجمة الفورية للغة برمجة ديناميكية حديثة." ELS. 2020
  18. 1 2 "الامتدادات" . LuaJIT . تم الاسترجاع في 27-03-2026 .
  19. "دلالات عمليات البت" . LuaJIT . تم الاطلاع عليه بتاريخ 25 فبراير 2022 .
  20. "Coco - True C Coroutines" . LuaJIT . تم الاطلاع عليه بتاريخ 25 فبراير 2022 .
  21. "مكتبة FFI" . LuaJIT . تم الاطلاع عليه بتاريخ 25 فبراير 2022 .