سؤال

AFAIK GHC هو المترجم الأكثر شيوعًا اليوم ، لكنني أرى أيضًا أن بعض الأدوات الأخرى متوفرة أيضًا. هل GHC حقًا هو الخيار الأفضل لجميع الأغراض أم هل يمكنني استخدام شيء آخر بدلاً من ذلك؟ على سبيل المثال ، قرأت أن بعض البراميل (نسيت الاسم) أفضل في التحسينات ، ولكن لا ينفذ جميع الامتدادات.

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

المحلول

GHC هو إلى حد بعيد برنامج التحويل البرمجي الأكثر استخدامًا على نطاق واسع ، ويوفر معظم الميزات. هناك خيارات أخرى ، والتي لديها في بعض الأحيان بعض الفوائد على GHC. هذه بعض البدائل الأكثر شعبية:

عناق - Hugs هو مترجم (لا أعتقد أنه يشمل برنامج التحويل البرمجي) وهو سريع وفعال. ومن المعروف أيضًا إنتاج رسائل خطأ أكثر فهمًا من GHC.

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

uhc - يقع برنامج التحويل البرمجي Utrecht Haskell بالقرب من مكتمل الميزات (أعتقد أن الشيء الوحيد المفقود هو أنماط N+K) لـ Haskell98. وهو ينفذ العديد من الامتدادات الأكثر شعبية في GHC وبعض الامتدادات الأصلية أيضًا. وفقًا لرمز الوثائق ، فإنه ليس بالضرورة محسّنًا جيدًا حتى الآن. هذا هو أيضا مترجم جيد للاختراق.

باختصار ، إذا كنت تريد رمزًا فعالًا وميزات متطورة ، فإن GHC هو أفضل رهان لك. تستحق JHC المحاولة إذا لم تكن بحاجة إلى MPTC أو بعض الميزات الأخرى. قد تكون ملحقات UHC مقنعة في بعض الحالات ، لكنني لن أعول عليها للرمز السريع حتى الآن.

نصائح أخرى

  1. يتم تعريف Haskell بشكل غير رسمي على أنها اللغة التي تعالجها GHC.
  2. GHC هو المترجم منصة هاسكل.
  3. قد تؤتي محاولة تحسين الكود الخاص بك باستخدام GHC أكثر من التبديل إلى مترجم آخر حيث ستتعلم بعض مهارات التحسين.
  4. هنالك الكثير جداً امتدادات مفيدة في GHC. لا أستطيع أن أرى كيف أعيش بدونهم.

لذلك ، لأي شيء خطير (على سبيل المثال ، غير أكاديمي ، غير تجريبي ، غير متقلبة أو باستخدام العديد من الحزم) ، فإن الخيار العملي هو الذهاب مع GHC.

أعتقد أنه من الجدير بالذكر أيضًا NHC98. من Blurb على الصفحة الرئيسية:

NHC98 هو مترجم صغير وسهل التثبيت ومتوافق مع المعايير لشركة Haskell 98 ، لغة البرمجة الوظيفية البطيئة. إنه محمول للغاية ، ويهدف إلى إنتاج مواد تنفيذية صغيرة تعمل بكميات صغيرة من الذاكرة. إنه ينتج رمزًا متوسطًا ، والتجميع هو نفسه بسرعة كبيرة. كما يأتي مع دعم أدوات واسع النطاق للتجميع التلقائي ، وتواصل اللغة الأجنبية ، والكوتين والتوصيف الزمني ، والتتبع ، والتصحيح.

اعتبارًا من عام 2011 ، لا يوجد خيار آخر غير GHC للبرمجة اليومية. يشجع فريق HP بقوة استخدام GHC من قبل جميع مبرمجي Haskell.


إذا كنت باحثًا ، فقد تستخدم استخدام UHC ، إذا كنت على نظام غريب للغاية ، فقد يكون لديك فقط عناق أو NHC98 المتاح. إذا كنت من اللقاء الرجعية مثلي ، فلا يزال لديك تركيب Gofer و HBC و HBI:

$ hbi
Welcome to interactive Haskell98 version 0.9999.5c Pentium 2004 Jun 29!
Loading prelude... 1 values, 4 libraries, 200 types found.
Type "help;" to get help.
> help;
        HBI  -- Interactive Haskell B 1.3

HBI رائع لأنه أ) ينفذ Haskell B ، و B) وهو يدعم اللغة الكاملة في سطر الأوامر:

> data L a = I | X a (L a) deriving Show;
data L b = I | X b (L b) deriving (Show)
> X 4 (X 3 I);
X 4 (X 3 I)

وينتج المترجم رمزًا جيدًا ، حتى بعد 15 عامًا.

GHC هو مترجم صلب. إن القول بأن هذا هو الخيار الأفضل لجميع الأغراض أمر قوي للغاية. والبحث عن مثل هذه الأداة غير مجدية.

استخدمه ، وإذا كنت تحتاج حقًا إلى شيء آخر ، فمن المحتمل أن تعرف ما هو عليه.

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