LLVM مقابل.ج— ;كيف يمكن أن لا يكون LLVM أفضل بالنسبة لهاسكل من C--؟

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

سؤال

لقد كنت متحمسا LLVM كونه منخفضًا بما يكفي لنمذجة أي نظام ، ورأى أنه يعد بأن Apple كانت تبنيه ؛ولكن مرة أخرى لا تدعم Apple ذلك على وجه التحديد هاسكل;

ويعتقد البعض أن هاسكل سيكون أفضل حالًا معه ج--:

أن LLVM'ers لم يحل مشكلة مجموعة القمامة صفر رأس ليست مفاجئة للغاية.يعد حل هذا مع الحفاظ على عدم وجود نظام بيانات نموذجًا مفتوحًا في علوم الكمبيوتر.

-- لن يستخدم LHC LLVM.

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

المحلول

حسنا، هناك مشروع في UNSW لترجمة GHC الأساسية لLLVM

وتذكر: لم يكن واضحا قبل 10 سنوات أن LLVM ستبني كان كل C-- البنية التحتية غير قادرة على. للأسف، LLVM لديها البنية التحتية للمحمول، رمز الأمثل، ولكن ليس البنية التحتية لطيف دعم لغة عالية المستوى، أن C-- هكتار (ق) د.

وهناك مشروع مثير للاهتمام سيكون لاستهداف LLVM <م> من C-- ...


تحديث ، اعتبارا من GHC 7، <وأ href = "http://www.haskell.org/pipermail/cvs-ghc/2010-February/052606.html" يختلط = "noreferrer "> GHC يستخدم LLVM لتوليد كود . استخدام العلم -fllvm. وقد تحسن هذا الأداء العددي لبعض البرامج مستوى منخفض. خلاف ذلك، وأداء مماثل لدول مجلس التعاون الخليجي الخلفية القديمة.

نصائح أخرى

بعد أن عملت قليلاً مع الواجهة الخلفية الجديدة لتوليد التعليمات البرمجية والتي تتلاعب بـ C--، أستطيع أن أقول إن هناك عددًا من الأسباب التي تجعل C-- أفضل من LLVM، وأيضًا لماذا ليسا نفس الشيء على الإطلاق.

  1. C-- يعمل على مستوى أعلى من التجريد من LLVM؛على سبيل المثال، يمكننا إنشاء تعليمات برمجية بلغة C-- حيث يكون مؤشر المكدس ضمنيًا تمامًا، ولا يظهر إلا لاحقًا أثناء عملية الترجمة.وهذا يجعل تطبيق أنواع معينة من التحسينات أسهل بكثير، لأن التمثيل ذو المستوى الأعلى يسمح بمزيد من حركة التعليمات البرمجية مع عدد أقل من الثوابت.

  2. بينما نسعى جاهدين لإصلاح هذه المشكلة، تعاني LLVM من نفس المشكلة التي عانت منها الواجهة الخلفية via-C:يتطلب منا أن نخلق نقاط بروك. ما هي نقاط بروك؟بشكل أساسي، نظرًا لأن هاسكل لا يستخدم اصطلاح الاتصال/الاستدعاء الكلاسيكي، كلما قمنا بإجراء المعادل الأخلاقي لاستدعاء الإجراء الفرعي، نحتاج إلى دفع الاستمرار إلى المكدس ثم الانتقال إلى الإجراء الفرعي.عادةً ما تكون هذه الاستمرارية عبارة عن تسمية محلية، لكن LLVM تتطلب أن تكون إجراءً فعليًا، لذلك نحتاج إلى تقسيم الوظائف إلى أجزاء أصغر (تسمى كل قطعة بنقطة proc).هذه أخبار سيئة بالنسبة للتحسينات، التي تعمل على مستوى الإجراء.

  3. يتبع C-- وLLVM نهجًا مختلفًا لتحسين تدفق البيانات.يستخدم LLVM أسلوب SSA التقليدي مع عقد phi:C-- يستخدم إطارًا رائعًا يسمى Hoopl والذي لا يتطلب منك الحفاظ على ثبات SSA.استطيع التاكيد:تعد تحسينات البرمجة في Hoopl ممتعة جدًا، على الرغم من أن أنواعًا معينة من التحسينات (تتبادر إلى الذهن تضمين المتغيرات المستخدمة لمرة واحدة) ليست بالضبط الأكثر طبيعية في إعداد تدفق البيانات هذا.

وGHC ديها الآن رسميا الخلفية LLVM، واتضح أنه من <لأ href = "http://donsbot.wordpress.com/2010/02/21/smoking-fast-haskell-code-using-ghcs- جديد-llvm-codegen / "يختلط =" noreferrer "> المنافسة مع دول مجلس التعاون الخليجي وأصلي codegen وفعلا أسرع في بعض الحالات . وLLVM قد وافقت على اتفاقية جديدة الدعوة ديفيد Terei لهاسكل على LLVM، لذلك مثير للدهشة، ومشاريع يعملان معا بالفعل الآن.

وكانت قضية واحدة في ممارسة LLVM أكثر من ذلك بكثير من هدف متحرك.

لقد كان GHC بعض المتاعب في محاولة لدعم إصدارات متعددة من LLVM. هناك مناقشة على البريدية GHC-ديف قائمة حول هذا الموضوع.

وراجع للشغل، في الوقت الراهن الخلفية llvm في شركة الخليج القابضة هي بعد ترجمة هاسكل إلى اللغة ل أ ج ب (التي أعتقد أنه في الغالب مجرد C-- موسعة مع بعض السجلات من اللغة STG)، ونظرا إلى ما سبق إلى لما كانت حل المصاعب التي تواجهها، هناك تحسينات زائدة يجري القيام به مما يبطئ عملية التجميع.

وأيضا، من الناحية التاريخية، وحاليا AFAIK، لا أولويات المشروع LLVM توفير منصة محمولة، وجعلت بعض المطورين نقطة توضيح أنه <في أ href = "http://lists.cs.uiuc.edu /pipermail/llvmdev/2011-October/043719.html "يختلط =" نوفولو "> هو IR مترجم وليس شكلا من أشكال لغة التجميع المحمولة .

ووLLVM IR تكتب عن الهدف intendend واحد قد لا تكون على كل مفيد للهدف المقصود مختلفة. وعلى سبيل المقارنة، فإن الموقع C-- الواقع يشير إلى أنها التجمع المحمولة. "هل سيكون أكثر سعادة مع واحد لغة التجميع المحمولة التي يمكن أن يكون ..." هو اقتباس من موقعه على الانترنت . يذكر أن الموقع أيضا واجهة وقت التشغيل لتخفيف المحمولة <م> التنفيذ جمع القمامة ومعالجة الاستثناء.

وهكذا كنت أفكر فيه C-- كأرضية مشتركة المحمولة لجميع الواجهات الأمامية التي تحتوي على أكثر قليلا من القواسم المشتركة مع CIL وجافا رمز بايت وLLVM IR-باعتبارها أرضية مشتركة التعبيرية لجميع الخلفيات الخاصة بك التي يسهل تحسينات موحدة على مستوى منخفض مشتركة لأهداف متعددة. كما يوفر LLVM IR مكافأة أضاف أن المشروع LLVM ستنفذ الكثير من تلك المنخفضة المستوى الأمثل. أن يقال، في بعض النواحي LLVM IR يمكن النظر في الواقع مستوى أعلى من C--، على سبيل المثال LLVM IR لديها أنواع مختلفة حيث كما هو الحال في C-- كل شيء هو مجرد بت ناقلات.

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