يجب أن تعلم هاسكل أو F# لو كنت تعرف بالفعل OCaml?[مغلقة]

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

سؤال

وأنا أتساءل عما إذا كان ينبغي الاستمرار في التعلم OCaml أو التبديل إلى F# أو هاسكل.

هنا هي المعايير التي أنا مهتم أكثر في:

  • طول العمر

    • اللغة التي سوف تستمر لفترة أطول ؟ لا تريد أن تتعلم شيئا التي قد تكون مهجورة في بضع سنوات من قبل المستخدمين والمطورين.
    • سوف Inria, مايكروسوفت, جامعة غلاسكو مواصلة دعم كل منهما القائمون على المدى الطويل ؟
  • التطبيق العملي

    • المواد مثل هذا تجعلني أخشى أن استخدام هاسكل.جدول تجزئة هو أفضل بنية استرجاع سريع.هاسكل أنصار هناك اقتراح باستخدام البيانات.الخريطة وهي شجرة ثنائية.
    • أنا لا أحب أن تكون مرتبطة ضخمة .NET framework ما لم فوائد كبيرة.
    • أريد أن تكون قادرة على تطوير أكثر من مجرد موزعي و الرياضيات البرامج.
  • مصممة بشكل جيد

    • أنا أحب اللغات أن تكون متسقة.

يرجى دعم رأيك مع الحجج المنطقية و الاستشهادات من المواد.شكرا لك.

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

المحلول

طول العمر

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

  • يتم التحكم في Caml من قبل مجموعة صغيرة في INRIA، المختبر الوطني الفرنسي.لديهم أيضًا استثمارات كبيرة، والبعض الآخر يستثمر أيضًا في Caml، والكود مفتوح المصدر، والمترجم ليس معقدًا للغاية، لذلك سيتم الحفاظ عليه أيضًا لفترة طويلة.أتوقع أن يكون Caml أكثر استقرارًا من Haskell، حيث يبدو أن فريق INRIA لم يعد يستخدمه كوسيلة لاستكشاف أفكار لغوية جديدة (أو على الأقل يفعلون ذلك بمعدل أقل مما كان عليه في الماضي).

  • من يعرف ماذا ستفعل الشركة؟إذا نجح F#، فيمكن أن تدعمه Microsoft لمدة 20 عامًا.وإذا لم ينجح الأمر، فيمكنهم سحب القابس في عام 2012.لا أستطيع التخمين ولن أحاول.

التطبيق العملي

يعد جدول التجزئة أفضل هيكل للاسترجاع السريع.يقترح أنصار هاسكل هناك استخدام Data.Map وهي شجرة ثنائية.

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

أعتقد أنه سيكون هناك دائمًا عقوبة أداء للتقييم البطيء.لكن "العملي" ليس مثل "في أسرع وقت ممكن".ما يلي صحيح فيما يتعلق بالأداء:

  • من الأسهل التنبؤ بسلوك الزمان والمكان لبرنامج Caml.

  • F# في المنتصف (من يعرف حقًا ما الذي سيفعله .NET وJIT؟).

  • من الصعب التنبؤ بالسلوك الزماني والمكاني لبرامج هاسكل.

  • تمتلك هاسكل أفضل أدوات تحليل البيانات، وهذا ما يؤدي إلى أفضل أداء على المدى الطويل.

أريد أن أكون قادرًا على تطوير أكثر من مجرد برامج المحللين والرياضيات.

للحصول على فكرة عن نطاق ما هو ممكن في هاسكل، قم بمراجعة com.xmonad مدير النوافذ و مجموعة واسعة من الحزم في hackage.haskell.org.

لا أحب أن أكون مقيدًا بإطار عمل .NET ضخم إلا إذا كانت الفوائد كبيرة.

لا أستطيع التعليق:

مصممة بشكل جيد

أحب أن تكون لغاتي متسقة.

بعض النقاط التي يمكن تقييم الاتساق عليها:

  • تم تصميم بناء جملة هاسكل بشكل جيد للغاية؛أنا معجب باستمرار بالعمل الجيد الذي تقوم به لجنة هاسكل.بناء جملة OCaml جيد ولكنه يعاني بالمقارنة.بدأ F# من بناء جملة Caml الأساسي وله العديد من أوجه التشابه.

  • يمتلك كل من Haskell وOCaml قصصًا متسقة جدًا حول التحميل الزائد على المشغل.تمتلك هاسكل آلية متسقة وقوية يمكنك توسيعها بنفسك.OCaml ليس لديه التحميل الزائد من أي نوع.

  • يحتوي OCaml على أبسط نظام كتابة، خاصة إذا كنت لا تكتب كائنات ووظائف (وهو ما لا يفعله العديد من مبرمجي Caml، على الرغم من أنه يبدو من الجنون بالنسبة لي عدم كتابة وظائف إذا كنت تكتب ML).نظام كتابة هاسكل طموح وقوي، ولكن يتم تحسينه باستمرار، مما يعني أن هناك بعض عدم الاتساق نتيجة للتاريخ.يستخدم F# بشكل أساسي نظام النوع .NET، بالإضافة إلى تعدد أشكال Hindley-Milner الشبيه بـ ML (راجع السؤال "ما هو هيندلي ميلنر".)

  • OCaml ليس متسقًا تمامًا بشأن ما إذا كان يعتقد أنه يجب كتابة المتغيرات بشكل ثابت أو كتابتها ديناميكيًا، لذلك فهو يوفر كلاً من ("أنواع البيانات الجبرية" و"المتغيرات متعددة الأشكال").تتمتع اللغة الناتجة بقدر كبير من القوة التعبيرية، وهو أمر رائع بالنسبة للخبراء، ولكن البناء الذي يجب استخدامه ليس واضحًا دائمًا للهواة.

  • ترتيب تقييم OCaml غير محدد رسميًا، وهو اختيار تصميم سيئ في لغة ذات آثار جانبية.والأسوأ من ذلك أن التطبيقات غير متناسقة:يستخدم الجهاز الظاهري المشفر بايت ترتيبًا واحدًا ويستخدم مترجم الكود الأصلي الترتيب الآخر.

نصائح أخرى

هل يجب أن تتعلم F# أو Haskell إذا كنت تعرف OCaml؟

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

طول العمر

التزمت Microsoft بدعم F# عندما أطلقته كجزء من Visual Studio 2010 في أبريل.لذلك يضمن F# مستقبلًا ورديًا لبضع سنوات على الأقل.مع مجموعة قوية من الميزات المهمة عمليًا مثل الكود الأصلي REPL عالي الأداء، والبنيات عالية المستوى للتوازي المضمنة في .NET 4 ووضع IDE عالي الجودة، يعد F# بمثابة طويل تتفوق الآن على أي لغة برمجة وظيفية أخرى من حيث قابلية التطبيق في العالم الحقيقي.بصراحة، لا أحد يعمل حتى على أي شيء قد يكون قادرًا على منافسة F# في المستقبل القريب.المصدر المفتوح الخاص بي هلفم المشروع هو محاولة للقيام بذلك ولكنه ليس جاهزًا بعد.

في المقابل، يتم تطوير كل من OCaml وHaskell في اتجاهات غير منتجة على الإطلاق.لقد كان هذا الأمر يقتل OCaml منذ عدة سنوات، وأتوقع أن تحذو هاسكل حذوها خلال السنوات القليلة المقبلة.انتقل معظم مبرمجي OCaml وHaskell المحترفين السابقين بالفعل إلى F# (على سبيل المثال.Credit Suisse، Flying Frog Consultancy) ومما لا شك فيه أن معظم الباقي سوف يهاجر إلى بدائل أكثر عملية مثل Clojure وScala في المستقبل القريب.

على وجه التحديد، يمنع ترخيص QPL الخاص بشركة OCaml أي شخص آخر من إصلاح العدد المتزايد من عيوب التصميم الأساسية (سلسلة 16 ميجابايت وحدود المصفوفة على أجهزة 32 بت، وعدم وجود توازي في الذاكرة المشتركة، وعدم وجود أنواع قيم، وتعدد الأشكال البارامترية عبر محو النوع، وتفسير REPL، وFFI المرهقة) إلخ) لأنه يجب عليهم توزيع الأعمال المشتقة فقط على شكل تصحيحات للنسخة الأصلية ويرفض مشرفو حزمة دبيان الاعتراف بوجود بديل بديل.الميزات الجديدة التي تتم إضافتها إلى اللغة، مثل الوحدات النمطية من الدرجة الأولى في OCaml 3.12، ليست قريبة من قيمة القدرة متعددة النواة.

بدأت بعض المشاريع في محاولة لإنقاذ OCaml لكنها أثبتت أنها قليلة جدًا ومتأخرة جدًا.ال جي سي الموازي غير مجدية عمليا واستقال ديفيد تيلر البطاريات وشملت المشروع (على الرغم من أنه تم التقاطه وإصداره في شكل مختصر).ونتيجة لذلك، فقد ذهب OCaml من الوجود اللغة الوظيفية الأكثر شعبية في عام 2007 إلى انخفاض حاد اليوم، مع انخفضت حركة مرور قائمة Caml بنسبة تزيد عن 50٪ منذ عام 2007.

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

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

التطبيق العملي

لقد كتبت المقال الذي ذكرته حول جداول التجزئة.إنها بنية بيانات جيدة.أشار أشخاص آخرون إلى بدائل وظيفية بحتة مثل الأشجار الثلاثية وأشجار باتريشيا ولكنها عادة ما تكون أبطأ بحوالي 10 × من جداول التجزئة في الممارسة العملية.والسبب ببساطة هو أن أخطاء ذاكرة التخزين المؤقت تهيمن على مخاوف الأداء اليوم وتتحمل الأشجار اتجاهات غير مباشرة إضافية لمؤشر O(log n).

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

لقد قلت "لا أحب الارتباط بإطار عمل .NET ضخم إلا إذا كانت الفوائد كبيرة".الفوائد ضخمة.يمكنك الحصول على بيئة تطوير متكاملة (IDE) بجودة الإنتاج، ومترجم JIT عالي الجودة الذي يقوم بإجراء تحسينات فعالة للغاية مثل الأدوية العامة المتخصصة في النوع، ومكتبات جودة الإنتاج لكل شيء بدءًا من برمجة واجهة المستخدم الرسومية (راجع لعبة الحياة في 32 سطرًا من F #) لتحطيم الأرقام.لكن الفائدة الحقيقية لـ .NET، على الأقل بالنسبة لي، هي أنه يمكنك بيع المكتبات التي تكتبها بلغة F# وكسب الكثير من المال.لم ينجح أحد على الإطلاق في بيع مكتبات لمبرمجي OCaml وHaskell (وأنا واحد من الأشخاص القلائل الذين حاولوا ذلك) ولكن مكتبات F# تبيع بالفعل بكميات كبيرة.لذا فإن إطار عمل .NET الضخم يستحق كل هذا العناء إذا كنت تريد كسب لقمة العيش عن طريق كتابة البرامج.

مصممة بشكل جيد

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

لم يكن هذا أحد معاييرك ولكن هل فكرت فيه؟ توفر الوظيفة؟تدرج هاسكل حاليا 144 وظيفة في الواقع، وقائمة Ocaml 12 وقائمة C# 26000.هذه الأرقام ليست مثالية ولكن أراهنك أنه بمجرد شحن F#، فلن يمر وقت طويل قبل أن تتفوق على Haskell وOcaml في عدد قوائم الوظائف.

حتى الآن، تحتوي كل لغة برمجة مضمنة في Visual Studios على الآلاف من قوائم الوظائف الخاصة بها.يبدو لي أنك إذا كنت تريد أفضل فرصة لاستخدام لغة برمجة وظيفية كوظيفتك اليومية، فستكون F# هي تلك المناسبة لك قريبًا.

طول العمر

لا أحد يستطيع التنبؤ بالمستقبل، ولكن

  • لقد ظل OCaml وHaskell على قيد الحياة بشكل جيد لعدد من السنوات، وهو ما يبشر بالخير لمستقبلهما
  • عندما يتم شحن F# مع VS2010، سيكون لدى MS التزامات قانونية لدعمه لمدة 5 سنوات على الأقل

التطبيق العملي

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

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

الأدوات:ليس لدي ما يكفي من الخبرة الشخصية للمقارنة، ولكن أعتقد أن تكامل VS مع F# أفضل من أي شيء ستجده لـ OCaml/Haskell اليوم (وسيستمر F# في التحسن قليلاً هنا خلال العام المقبل).

يتغير:لا يزال F# يتغير مع اقترابه من أول إصدار مدعوم له في VS2010، لذلك هناك بعض التغييرات العاجلة على اللغة/المكتبة التي قد تضطر إلى تحملها في المستقبل القريب.

مصممة بشكل جيد

هاسكل بالتأكيد جميلة ومتسقة.لا أعرف ما يكفي عن OCaml ولكن حدسي هو أنه جذاب بالمثل.أعتقد أن F# "أكبر" من أي منهما، وهو ما يعني المزيد من الزوايا المتربة والتناقضات (إلى حد كبير نتيجة للتوسط في عدم تطابق المعاوقة بين FP و .Net)، ولكن بشكل عام F# لا يزال يبدو "نظيفًا" بالنسبة لي، و التناقضات الموجودة هي على الأقل مسببة/حسنة النية.

إجمالي

في رأيي، ستكون في "حالة جيدة" إذا عرفت أيًا من هذه اللغات الثلاث جيدًا.إذا كنت تعرف مشروعًا كبيرًا طويل المدى وترغب في استخدامه من أجله، فقد يبرز أحد هذه المشاريع، لكنني أعتقد أن العديد من المهارات ستكون قابلة للتحويل (بشكل أسهل بين F# وOCaml من/إلى Haskell، ولكن أيضًا بسهولة أكبر بين أي مشروع آخر). من هؤلاء الثلاثة مع، على سبيل المثال، جافا).

ليس هناك إجابة بسيطة على هذا السؤال، ولكن إليك بعض الأمور التي يجب أخذها بعين الاعتبار:

تعد كل من Haskell وOCaml لغتين ناضجتين مع تطبيقات قوية.في الواقع، هناك العديد من التطبيقات الجيدة لهاسكل، لكنني لا أعتقد أن هذه نقطة رئيسية لصالحها لغرضك.

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

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

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

يتم استخدام كل من OCaml وHaskell لكتابة الكثير من أنواع البرامج المختلفة، وليس فقط المترجمين والذكاء الاصطناعي أو أي شيء آخر.جوجل هو صديقك.

ملاحظة أخيرة:يمنحك OCaml قابلية التجزئة، ولكن ليس من المعقول استخدامه في التعليمات البرمجية إذا كنت تريد حقًا احتضان البرمجة الوظيفية.تعتبر الأشجار الدائمة (مثل Data.Map) هي الحل الصحيح لـ Haskell، ولديها الكثير من الخصائص الرائعة، وهي واحدة من الأشياء الرائعة التي يجب أن تتعلمها عند اختيار Haskell.

F# وOCaml متشابهان جدًا في بناء الجملة، على الرغم من أنه من الواضح أن F# أفضل مع .NET.

أي واحد تتعلمه أو تستخدمه يجب أن يعتمد على النظام الأساسي الذي تستهدفه.

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

هناك لغات وظيفية أخرى، مثل Erlang التي يمكنك الاطلاع عليها، ولكن، في الأساس، إذا كنت قويًا في إحدى لغات FP، فيجب أن تكون قادرًا على اختيار لغة أخرى بسرعة كبيرة، لذا، ما عليك سوى اختيار اللغة التي تفضلها ومحاولة تطوير تطبيقات مثيرة للاهتمام وصعبة فيه.

في نهاية المطاف، سيجد مؤلفو اللغة طريقة لجعل لغات OO تعمل بشكل جيد مع النوى المتعددة وقد يقع FP على جانب الطريق مرة أخرى، ولكن لا يبدو أن هذا سيحدث في أي وقت قريب.

لا يرتبط هذا بشكل مباشر بسؤال OP حول ما إذا كان يجب تعلم F# أم لا، بل هو مثال لاستخدام OCaml في العالم الحقيقي في القطاع المالي:http://ocaml.janestreet.com/?q=node/61

حديث مثير جدا للاهتمام.

من حيث طول العمر ، من الصعب جدا أن نحكم شعبية من اللغات ، ولكن فقط تقوم بعمل فحص سريع على هذه الأرقام من الأسئلة ذات الكلمات الدلالية مع المناسبة (وظيفية) في اللغة :-

2672 سكالا ، 1936 هاسكل ، 1674 F# ، 1126 Clojure, 709 المخطط ، 332 OCaml

أقول هذا كان مؤشرا جيدا والتي اللغات الناس بنشاط التعلم في هذه اللحظة وبالتالي قد يكون مؤشرا جيدا من تلك التي قد تكون شعبية في السنوات القليلة المقبلة.

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