إذا كنت تعرف LISP بالفعل، فلماذا تريد أيضًا تعلم F#؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

ما هي القيمة المضافة لتعلم F# عندما تكون معتادًا على LISP؟

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

المحلول

الكثير من هذه التطورات حديثة نسبيًا في عالم لغات البرمجة.هذا شيء ستراه في F# ولن تراه في Lisp، وخاصة Common Lisp، لأن معيار F# لا يزال قيد التطوير.ونتيجة لذلك، ستجد أن هناك الكثير لتتعلمه.بالطبع يمكن إنشاء أشياء مثل ADTs، ومطابقة الأنماط، وmonads، وcurrying كمكتبة في Lisp، ولكن من الأفضل أن تتعلم كيفية استخدامها في لغة تكون مدمجة فيها بشكل ملائم.

أكبر ميزة لتعلم F# للاستخدام الفعلي هي تكاملها مع .NET.

نصائح أخرى

إن مقارنة Lisp مباشرة بـ F# ليست عادلة حقًا، لأنه في نهاية اليوم، مع توفر الوقت الكافي، يمكنك كتابة نفس التطبيق بأي من اللغتين.

لكن، يجب أن تتعلم F# لنفس الأسباب التي تجعل مطور C# أو Java يتعلمها - لأنها تسمح بالبرمجة الوظيفية على منصة .NET.لست على دراية بـ Lisp بنسبة 100%، لكنني أفترض أن لديها بعض المشكلات نفسها التي تواجهها OCaml حيث لا يوجد دعم ممتاز للمكتبة.كيف يمكنك الوصول إلى قاعدة البيانات في Lisp؟ماذا عن الرسومات عالية الأداء؟

إذا كنت تريد معرفة المزيد حول "لماذا .NET"، راجع هذا هذا سؤال.

إذا كنت تعرف F# وLisp، فستجد أن طرح هذا السؤال غريب نوعًا ما.

كما أشار آخرون، ليسب هو مكتوبة بشكل حيوي.والأهم من ذلك، أن الميزة الفريدة لـ Lisp هي أنها متجانسة: كود Lisp هو نوع بيانات Lisp أساسي (قائمة).يستفيد نظام الماكرو من ذلك من خلال السماح لك بالكتابة التعليمات البرمجية التي يتم تنفيذها في وقت الترجمة وتعديل التعليمات البرمجية الأخرى.

ليس لدى F# شيء من هذا القبيل - إنها لغة مكتوبة بشكل ثابت تستعير الكثير من الأفكار من ML وHaskell، وتقوم بتشغيلها على .NET

ما تسأله يشبه "لماذا أحتاج إلى تعلم استخدام الملعقة إذا كنت أعرف كيفية استخدام الشوكة؟"

نظرًا لأن LISP تتم كتابته ديناميكيًا وأن F# تتم كتابته بشكل ثابت، فإنني أجد مثل هذه المقارنات غريبة.

إذا كنت أقوم بالتبديل من Lisp إلى F#، فسيكون ذلك فقط بسبب وجود مهمة بين يدي والتي استفادت بشكل كبير من بعض مكتبات .NET فقط.

لكنني لا أفعل ذلك، لذلك أنا لست كذلك.

مال.يعد كود F# بالفعل أكثر قيمة من كود Lisp وسوف تتسع هذه الفجوة بسرعة كبيرة حيث يشهد F# اعتمادًا واسع النطاق.

بمعنى آخر، لديك فرصة أفضل بكثير لكسب دخل ثابت باستخدام F# مقارنة باستخدام Lisp.

هتاف ، جون هاروب.

F# هي لغة مختلفة جدًا مقارنة بمعظم لهجات Lisp.لذا فإن F# يمنحك زاوية مختلفة جدًا للبرمجة - زاوية لن تتعلمها من Lisp.من الأفضل استخدام معظم لهجات Lisp للتطوير المتزايد والتفاعلي للبرامج الرمزية.في الوقت نفسه، معظم لهجات ليسب ليست لغات برمجة وظيفية، ولكنها أشبه باللغات متعددة النماذج - مع لهجات مختلفة تضع وزنًا مختلفًا على دعم ميزات FPL (خالية من الآثار الجانبية، وهياكل البيانات غير القابلة للتغيير، وأنواع البيانات الجبرية، ...).وبالتالي فإن معظم لهجات Lisp إما تفتقر إلى الكتابة الثابتة أو لا تركز عليها كثيرًا.

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

تتميز F# بميزة أن تطوير .NET (بشكل عام) يتم اعتماده على نطاق واسع جدًا، ومتاح بسهولة، وسوق أكثر جماهيرية.

إذا كنت تريد ترميز F#، فيمكنك الحصول على Visual Studio، والذي سيكون لدى العديد من المطورين بالفعل... بدلاً من تشغيل بيئة LISP.

بالإضافة إلى ذلك، من المرجح أن ينظر مطورو .NET الحاليون إلى F# أكثر من LISP، إذا كان ذلك يعني أي شيء بالنسبة لك.

(هذا قادم من مطور .NET الذي قام بترميز LISP وأحبه أثناء وجوده في الكلية).

لست متأكدا إذا كنت ستفعل ذلك؟إذا وجدت F# مثيرًا للاهتمام فسيكون هذا سببًا.فإذا كان عملك يتطلب ذلك، كان ذلك سببا.إذا كنت تعتقد أن ذلك سيجعلك أكثر إنتاجية أو سيجلب لك قيمة مضافة مقارنة بمعرفتك الحالية، فسيكون هذا سببًا.

ولكن إذا لم تجد F# مثيرًا للاهتمام، فإن عملك لا يتطلب ذلك ولا تعتقد أنه سيجعلك أكثر إنتاجية أو سيجلب لك قيمة مضافة، فلماذا تفعل ذلك؟

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

أعلم أن هذا الموضوع قديم ولكن منذ أن عثرت على هذا الموضوع أردت فقط التعليق على أسبابي.إنني أتعلم F# لمجرد الحصول على فرص مهنية نظرًا لأن .NET يحمل وزنًا كبيرًا في فئة الشركات التي تهيمن على مجال عملي.لقد تزايد استخدام النموذج الوظيفي بين الشركات الأكثر توجهاً نحو البيانات والكمية، وأود أن أكون من أوائل الوافدين إلى هذا الاتجاه.لا توجد حاليًا لغة وظيفية قوية تتكامل بشكل كامل وآمن مع مكتبة .NET.لقد حاولت بالفعل نقل بعض ملفات .NET من كود Lisp وهو أمر مؤلم حقًا، حيث يدعم FFI فقط أساسيات C وتتطلب قابلية التشغيل البيني .NET إنشاء "واجهة" وعلى الرغم من أنني أعرف كيفية القيام بذلك في لغة C، إلا أنها عملية ضخمة حقًا ألم.سيكون من الجيد حقًا أن تبذل Lisp جهدًا إضافيًا في معيارها التالي وتتطلب فئة c++ (بما في ذلك الوظائف الافتراضية مع جداول vtables) ونوع واجهة نمط C# في FFI الخاص بها.ربما حتى تستخدم نوع نمط واجهة Java أيضًا.وهذا من شأنه أن يسمح بقابلية التشغيل البيني الكاملة مع مكتبة .NET ويجعل Lisp منافسًا قويًا كلغة واسعة النطاق.ولكن مع ذلك، فإن القدوم من خلفية Lisp جعل تعلم F# أمرًا سهلاً إلى حد ما.وأنا أحب الطريقة التي بذلت بها F# جهدًا إضافيًا لتوفير الأنواع التي تراها عادةً تعمل من النوع الكمي.أعتقد أن F# تم إنشاؤه مع وضع العمل الرياضي في الاعتبار، وهذا في حد ذاته له قيمة أعلى من Lisp.

إحدى الطرق للنظر إلى هذا (السؤال الأصلي) هي مطابقة اللغة (والأدوات والمنصات المرتبطة بها) مع المهمة المباشرة.إذا كانت المهمة تتطلب نسبة كبيرة من كود .NET، وستتطلب جهدًا أقل في لغة واحدة مقارنة بأخرى لإنجاز المهمة بشكل مباشر، فاتبع المسار الأقل مقاومة (F#).إذا لم تكن بحاجة إلى إمكانات .NET، وكنت مرتاحًا للعمل مع LISP وليس هناك ما يدعوك إلى الابتعاد عنه، فاستمر في استخدامه.

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

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