ما هي اللغة الأفضل للبرمجة للأغراض العامة، F# أو Haskell؟[مغلق]

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أتعلم حاليا لغة هاسكل، ما هي اللغة (F# أو هاسكل) التي تفضلها لبرمجة التطبيقات ذات الأغراض العامة؟

ما هي اللغة الأقوى في نظرك؟

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

المحلول

سأذهب إلى هاسكل. HackageDB هي مجموعة رائعة من المكتبات المكتوبة خصيصًا للغة.في حالة F#، يتعين عليك في الغالب استخدام المكتبات التي لم تتم كتابتها مع وضع لغة وظيفية في الاعتبار، لذلك لن تكون "أنيقة" الاستخدام.ولكن، بالطبع يعتمد ذلك إلى حد كبير على مقدار البرمجة الوظيفية التي تريد القيام بها وقيود المشروع الذي تريد استخدامه من أجله.وحتى "الغرض العام" لا يعني أنه ينبغي استخدامه في جميع الحالات؛)

نصائح أخرى

أنا أفضّل هاسكل.

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

  1. تحتوي F# على أدوات مرئية واسعة النطاق ولا تمتلك GHC أيًا منها.بالنسبة لي، الافتقار إلى الأدوات البصرية ليس له أهمية:أنا أعمل مع vi، وسطر أوامر Unix، ونظام بناء مخصص للغاية.إن الافتقار إلى الدعم لأسلوب التطوير الخاص بي في F # سيكون أمرًا صعبًا للغاية بالنسبة لي.من ناحية أخرى، إذا كنت تفضل العمل في بيئة من نوع Visual-Studio، فسيكون لديك رأي معاكس تمامًا.

  2. أفهم أن F# و/أو .NET يحتوي على مصحح أخطاء جيد جدًا.لدى GHC مصحح أخطاء محدود فقط يعمل في المترجم.لم أستخدم مصحح أخطاء منذ سنوات (يرجع الكثير من هذا إلى استخدام التطوير القائم على الاختبار) وعندما تعمل في الغالب باستخدام وظائف خالصة، كما هو الحال في هاسكل، يكون مصحح الأخطاء أقل أهمية بكثير.لذلك بالنسبة لي، فإن الافتقار إلى هذه الأداة غير ذي صلة إلى حد ما.

  3. المكتبات.هذا يعتمد في الغالب على المكتبات التي تحتاجها، أليس كذلك؟الكثير من المكتبات الجيدة لا تساعد إذا لم يكن المكتب الذي تحتاجه موجودًا، كما أن وجود الكثير من المكتبات سيئة التصميم قد لا يكون مفيدًا جدًا.من المؤكد أن Haskell لديها مكتبات أقل من .NET، ولكنها تحتوي على مجموعة معقولة، كما أن جودة تصميم واجهة برمجة التطبيقات (API) في العديد منها عالية جدًا جدًا.

لا أعرف كيف تبدو واجهة F# في مكتبات التعليمات البرمجية الأصلية، لكن GHC رائعة لهذا الغرض، نظرًا لـ FFI الرائعة.لقد كتبت خادم Windows DDE بالكامل بلغة Haskell (نعم، ليس سطرًا من لغة C، ولا حتى للتعامل مع عمليات الاسترجاعات من مكتبات Windows C) واستغرق الأمر وقتًا أقل بكثير وكان أبسط بكثير من القيام بنفس الشيء في لغة C أو C++.إذا كنت بحاجة إلى واجهات تعليمات برمجية أصلية، فمن المؤكد أن Haskell هو الخيار الأفضل.

تعد "عدم القدرة على التنبؤ" باستخدام الذاكرة والأداء نقطة جيدة.يبدو لي أن هاسكل يمكن التنبؤ به بشكل معقول إذا كنت تعرف ما تفعله، ولكنك لن تعرف ما تفعله عندما تبدأ، وسيكون لديك الكثير لتتعلمه.تشبه F# لغات .NET الأخرى إلى حد كبير.

بشكل عام، ربما يتعلق هذا السؤال بالمنصة أكثر من اللغة:إن الاختلاف الكبير بين "عالم Unixy" الخاص بـ GHC الذي يقوم بإنشاء تعليمات برمجية أصلية و"عالم Windowsy" الخاص بـ F# الذي يعمل على .NET ليس مشكلة لغوية.

أود أن أقول F#، حيث يمكنك الوصول إلى إطار عمل .Net بأكمله.ومع ذلك، هذا أكثر من شيء يتعلق بالمكتبة.

ذلك يعتمد على ما تريد القيام به:

هاسكل هي اللغة الوظيفية الأكثر بحتة بين الاثنين.

تعد F# أكثر من لغة هجينة، وليست وظيفية بحتة، ولكنها تحتوي على مجموعة رائعة من مكتبات الفئات الأساسية التي يمكنك استخدامها للقيام بأشياء حديثة بسهولة على Windows أو Mono.

أعتقد أن جون هاروب لديه موقف خطير من هاسكل لسبب ما.إنه ببساطة ليس صحيحًا أنه لا يتم استخدامه خارج الأوساط الأكاديمية، بل إنه يستخدم على نطاق واسع في الخدمات المصرفية الاستثمارية وأكثر بكثير من F# وOCaml ولسبب وجيه.إذا كنت ترغب في الحصول على وظيفة برمجة وظيفية، فتعلم لغة Haskell حيث أن هناك منشورات معلن عنها لمبرمجي Haskell أكثر بكثير من F# أو OCaml.أنا متأكد من أن F# ستكتسب شعبية حيث أن Microsoft تقف وراءها وهي تبدأ من الصفر ولكن في الوقت الحالي تتمتع Haskell بتقدم واضح.

ربما منذ عامين أو ثلاثة أعوام، كانت OCaml رائدة في مجال اللغات الوظيفية العملية، ولكن منذ ذلك الحين تجاوزتها Haskell بمكتبات أكثر، ومزيد من الميزات، وأداء أفضل، واستخدام تجاري أوسع.

قد تجد مشاركة المدونة هذه التي كتبها نيل ميتشل مفيدة:

F# من منظور هاسكل

التعليقات مضيئة أيضا.

أود أن أقول أن ذلك يعتمد على سبب تعلمك له.إذا كنت تفعل ذلك من أجل تجربة لغة وظيفية خالصة، فانتقل إلى Haskell.ولكن إذا كنت ستستخدم اللغة بالتأكيد لأكثر من ذلك، فقد تكون F# هي الخيار الأفضل.

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