سؤال

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

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

المحلول

الاختلافات الرئيسية هي أن F# لا يدعم:

  • وظائف
  • كائنات ذات نمط OCaml
  • المتغيرات متعددة الأشكال
  • المعالج المسبق camlp4/5 أو نقاط الامتداد (ppx)

بالإضافة إلى ذلك، يحتوي F# على صيغة مختلفة للمعلمات المسماة والاختيارية.

من الناحية النظرية، يمكن تجميع برامج OCaml التي لا تستخدم هذه الميزات باستخدام F#.يعد تعلم OCaml مقدمة معقولة تمامًا لـ F# (والعكس صحيح، كما أتخيل).

القائمة الكاملة للاختلافات هي هنا (ملحوظة:archive.org استبدال الرابط الميت).

نصائح أخرى

تمت الإجابة على هذا السؤال منذ بعض الوقت، لكنني فوجئت تمامًا بأن معظم الإجابات توضح ما هي ميزات OCaml المفقودة في F# - من الجيد بالتأكيد معرفة ما إذا كنت تريد نقل برامج OCaml الموجودة إلى F# (والذي من المحتمل أن يكون الدافع لمعظم المقالات المشار إليها).ومع ذلك، هناك العديد من الميزات التي تجعل من F# لغة مختلفة (ليست مجرد نسخة محدودة من OCaml لـ .NET!) إليك بعض الأشياء التي تمت إضافتها في F#:

  • وحدات القياس التي تسمح لك بفحص الكود الذي يتعامل مع الحسابات الرقمية
  • البرمجة الفوقية استخدام عروض الأسعار (مما يجعل من الممكن استخدام LINQ في F# وهو ضروري أيضًا للمشاريع الواعدة مثل منصة WebSharper)
  • الأنماط النشطة لإنشاء تجريدات لأنواع البيانات الوظيفية (وميزة مفيدة جدًا بشكل عام لتطبيقات مطابقة الأنماط الأكثر تعقيدًا)
  • التعبيرات الحسابية وهي ميزة اللغة وراء سير العمل غير المتزامن (مكتبة للإدخال/الإخراج/خدمة الويب/برمجة واجهة المستخدم الرسومية غير المتزامنة)
  • نظام كائن متوافق مع .NET مما يجعل من الممكن التفاعل بشكل كامل مع النظام الأساسي .NET (يتمتع OCaml أيضًا بدعم للكائنات ولكنه مختلف - هناك بالطبع بعض الفوائد في كلا النظامين).
  • مشغلي مثقلة - على حد علمي، لا يوجد لدى OCaml عوامل تشغيل مثقلة - في F# يمكنك استخدامها + لجميع الأنواع الرقمية وكذلك الأنواع التي تدعمها.

وبصراحة، أعتقد أنه من الجدير بالذكر أيضًا Visual Studio IDE.هذا ليس جزءًا من اللغة، ولكنه يعمل بالفعل على تحسين تجربة المستخدم (دعم IntelliSense في Visual Studio جيد حقًا!)

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

وأنا دائما تصف F # باعتباره ابن عم لغة كامل الموضوعية للغة كامل الموضوعية لديها العديد من الميزات التي لايوجد F #، ومن المرجح أن يحصل أبدا. يرتبط F # أكثر ارتباطا وثيقا باللغة CAML السابقة. على وجه الخصوص، F # ديها دعم محدود جدا لالتجريد وأي دعم لكتابة الهيكلية (مثل <أ href للغة كامل الموضوعية و= "http://ocamlnews.blogspot.com/2008/11/object-oriented-programming-in-ocaml.html" يختلط = "noreferrer"> التحف و <لأ href = "http://ocamlnews.blogspot.com/2008/03/getting-most-out-of-static-typing.html" يختلط = "noreferrer" > متغيرات متعددة الأشكال ) على الإطلاق.

وعلى عكس ما كتبه بعض المجيبين، لديه F # (محدودة) دعم المسمى ( "المسمى") وسيطات اختيارية.

ولكن هذه كلها ميزات متقدمة ويمكنك البدء بالتأكيد الحصول على السيطرة على الأفكار الأساسية وراء البرمجة الوظيفية الصغيرة على غرار لغة كامل الموضوعية باستخدام الموارد عن لغة كامل الموضوعية. الفرق الرئيسي الأول سوف تكتشف هو مشاكل واسعة النطاق مثل التغليف والتجريد التي يتم حلها بطرق مختلفة تماما في لغة كامل الموضوعية وفي F #. إذا كنت تريد معرفة كيفية القيام بذلك في F #، والأدب الوحيد المتاح هو <وأ href = "http://fsharpnews.blogspot.com/2009/05/purely-functional-data-structures.html" يختلط = "noreferrer "> هذه المادة على هياكل البيانات الوظيفية البحتة .

ولقد اكتشفت أيضا أن نظام وحدة رائعة لغة كامل الموضوعية يجعل من السهل على بالحدود التعليمات البرمجية عبر أنواع (مثل هياكل البيانات)، ولكن البدائل OOP ليسوا البشعة فحسب، بل تقريبا غير مستخدمة كليا على .NET. وعلاوة على ذلك، عند محاولة إرسال هياكل البيانات بأناقة ذات معلمات أنا ضربت العشرات من الخلل في # مترجم F لأن أحدا لم حتى حاول أن تفعل هذا من قبل. وF # stdlib لا تحتوي على بعض لطيفة تطبيقات هيكل البيانات ولكن عمليا أي إعادة استخدامها، أي أنها هي وظيفة cut'n'paste.

وF # ولغة كامل الموضوعية هي فئات taxonimically في الأسرة ML لغات، والذي يتضمن passle كاملة من الحيوانات الغريبة الأخرى أيضا. F # أحدث من لغة كامل الموضوعية، وأنه ليس لديه أي [فونكتورس] [وظائف وحدة -> وحدة] أو أنواع التوالي [فئات الكائنات والمتغيرات متعددة الأشكال] بعد. بينهما، تلك التبسيط اثنين ربما جعل منحنى التعلم السهل على أي شخص وضع على منصة دوت نت. للأسف، هذه الميزات اللغة هما قوة هائلة في لغة كامل الموضوعية، لذلك قراءة الأدب لغة كامل الموضوعية لاكتساب نظرة ثاقبة كيفية رمز لF # سيؤدي على الأرجح إلى الإحباط من السابق لأوانه مع هذا الأخير عندما يكون على الأرجح بديلا ممتازا لC # حال وجودهما.

وF # يدعم تركيب لغة كامل الموضوعية مباشرة. قد لا تكون متوافقة 100٪، ولكن اعتقد انها قريبة جدا.

http://plus.kaist.ac.kr/ ~ shoh / fsharp / أتش تي أم أل / index.html و

وهنا لائحة من الخلافات (غير متأكد من كيفية ما يصل إلى تاريخ هو)

HTTP: //plus.kaist. ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html

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