المترجمين ل Haskell
-
28-09-2019 - |
سؤال
AFAIK GHC هو المترجم الأكثر شيوعًا اليوم ، لكنني أرى أيضًا أن بعض الأدوات الأخرى متوفرة أيضًا. هل GHC حقًا هو الخيار الأفضل لجميع الأغراض أم هل يمكنني استخدام شيء آخر بدلاً من ذلك؟ على سبيل المثال ، قرأت أن بعض البراميل (نسيت الاسم) أفضل في التحسينات ، ولكن لا ينفذ جميع الامتدادات.
المحلول
GHC هو إلى حد بعيد برنامج التحويل البرمجي الأكثر استخدامًا على نطاق واسع ، ويوفر معظم الميزات. هناك خيارات أخرى ، والتي لديها في بعض الأحيان بعض الفوائد على GHC. هذه بعض البدائل الأكثر شعبية:
عناق - Hugs هو مترجم (لا أعتقد أنه يشمل برنامج التحويل البرمجي) وهو سريع وفعال. ومن المعروف أيضًا إنتاج رسائل خطأ أكثر فهمًا من GHC.
JHC - برنامج التحويل البرمجي بالكامل. يمكن أن تنتج JHC رمزًا فعالًا للغاية ، لكنه لم يكمل الميزات حتى الآن (ربما يكون هذا ما تفكر فيه). لاحظ أنه ليس أسرع دائمًا من GHC ، وأحيانًا فقط. لم أستخدم JHC كثيرًا لأنه لا ينفذ فئات من النوع متعدد المعلمات ، والتي أستخدمها بشدة. لقد سمعت أن الكود المصدري واضح للغاية وقابل للقراءة ، مما يجعل هذا المترجم الجيد الذي يجب اختراقه. JHC هي أيضا أكثر ملاءمة للتجميع وعادة ما تنتج ثنائيات أصغر.
uhc - يقع برنامج التحويل البرمجي Utrecht Haskell بالقرب من مكتمل الميزات (أعتقد أن الشيء الوحيد المفقود هو أنماط N+K) لـ Haskell98. وهو ينفذ العديد من الامتدادات الأكثر شعبية في GHC وبعض الامتدادات الأصلية أيضًا. وفقًا لرمز الوثائق ، فإنه ليس بالضرورة محسّنًا جيدًا حتى الآن. هذا هو أيضا مترجم جيد للاختراق.
باختصار ، إذا كنت تريد رمزًا فعالًا وميزات متطورة ، فإن GHC هو أفضل رهان لك. تستحق JHC المحاولة إذا لم تكن بحاجة إلى MPTC أو بعض الميزات الأخرى. قد تكون ملحقات UHC مقنعة في بعض الحالات ، لكنني لن أعول عليها للرمز السريع حتى الآن.
نصائح أخرى
- يتم تعريف Haskell بشكل غير رسمي على أنها اللغة التي تعالجها GHC.
- GHC هو المترجم منصة هاسكل.
- قد تؤتي محاولة تحسين الكود الخاص بك باستخدام GHC أكثر من التبديل إلى مترجم آخر حيث ستتعلم بعض مهارات التحسين.
- هنالك الكثير جداً امتدادات مفيدة في 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 هو مترجم صلب. إن القول بأن هذا هو الخيار الأفضل لجميع الأغراض أمر قوي للغاية. والبحث عن مثل هذه الأداة غير مجدية.
استخدمه ، وإذا كنت تحتاج حقًا إلى شيء آخر ، فمن المحتمل أن تعرف ما هو عليه.