سؤال

ما هي الاختلافات بين LLVM والمترجم العادي؟
هل هي أكثر ديناميكية وبالتالي يمكن استخدامها لتجميع لغات ديناميكية للغاية (على سبيل المثال؟Javascript) إلى كود ثنائي ثابت؟ما هي المبادئ وراء إنشاء واحد؟
أنا أعرف كتاب Dragon Book للمترجمين، ولكن هل يوجد شيء من هذا القبيل لـ LLVM؟

يحرر:لقد وجدت هذا مشروع مثير للاهتمام.

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

المحلول

هناك اختلافان بين LLVM و"المترجم العادي"، والذي سأفترض أنه يعني "gcc":

  • تم تصميم LLVM لتحليل البرنامج بالكامل (المعروف أيضًا باسم تحليل وقت الارتباط)، بحيث يمكنه اختياريًا تجميع التعليمات البرمجية إلى "رمز البت"، وهو تنسيق يمكنه إعادة تحليله لاحقًا.
  • يوفر LLVM مترجمًا في الوقت المناسب (JIT) حتى يتمكن من إعادة تحليل البرامج أثناء تشغيلها، تمامًا كما يفعل JVM.
  • تم تصميم LLVM بشكل جيد للغاية:
    • مكوناته وحدات ومنفصلة بشكل جيد،
    • ولها 3 صيغ لتمثيلها الوسيط (تمثيل نصي، ثنائي، وتمثيل في الذاكرة)، وهي متكافئة،
    • يستخدم تمثيله الوسيط نموذج SSA،
    • تمثيله الوسيط له نظام كتابة.

أما بالنسبة لجافا سكريبت واللغات الديناميكية الأخرى، فإننا نشهد الكثير من الاهتمام في LLVM من مجتمع اللغات الديناميكية، مع تجربة تطبيقات Python وRuby.ومع ذلك، هذه لا تحاول أن تكون مترجمين ثابتين.إنهم يركزون على استخدام JIT.على وجه الخصوص، يقومون بتحسين الملفات التنفيذية طويلة الأمد باستخدام "مترجم الوضع المختلط"، حيث يقومون في البداية بترجمة البرامج، ثم تجميعها باستخدام LLVM في وقت التشغيل.لم أر محرك جافا سكريبت يستخدم LLVM، ولكن من المحتمل أن يكون هناك محرك واحد.لن يقوم بإنشاء ملفات تنفيذية ثابتة، إلا في ظروف غير عادية، أو لإصدارات مختصرة من Javascript.

أما سبب إنشاء LLVM فقد بدأ كجزء من فيكرام أدفعمل المجموعة البحثية على تجميع مدى الحياة (وهو ما يعني JITs وتحسين وقت الارتباط).بعد حصوله على درجة الدكتوراه، انتقل كريس لاتنر إلى شركة Apple، مما دفع المشروع إلى الأمام بشكل كبير (ربما لأنه مرخص من BSD، مما سبب لهم مشاكل في الماضي مع gcc، وهي GPL).

نصائح أخرى

وليس هناك ما هو مترجم منتظم. وكان السبب الرئيسي لخلق لخلق منبر للبحث مترجم. لذلك تم تصميمه ليكون وحدات جدا بحيث يمكنك العمل على هذا الجزء من المترجم أن تتعامل مع البحوث الخاصة بك وليس لديها ما يدعو للقلق أجزاء أخرى من المترجم. لا يوجد مترجم التنين تماما كما لا يوجد كتاب LLVM (أي نظرية تقرأ في كتاب التنين أو ينبغي أن يكون أي كتاب مترجم آخر معمول به مباشرة). في الواقع بينما أنا لم ينظر في على LLVM في حين كانت وثائقهم الفقيرة جدا.

وأنا لا developper على الإطلاق، ولكن: حتى لو GPL أجبر المقبلة لنشر وقت ObjC في ال 80، والسبب الرئيسي لالتفاح لتمويل مترجم آخر (GPL أو لا) هو رغبتها في الاندماج مع IDE. ثبت مجلس التعاون الخليجي لديك الكثير من الجمود في هذا المجال، ودول مجلس التعاون الخليجي ليست وحدات بما يكفي لتمكين إعادة استخدام أجزاء التعليمات البرمجية (كسكودي "إصلاحه" الميزة). هذا ما فهمت من قراءاتي

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