كيف يمكنني استخدام البرمجة الوظيفية في العالم الحقيقي؟[مغلق]

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

سؤال

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

رغم ذلك، كمطور Win32، هل يمكنني استخدام Haskell لبعض ملفات dll الخاصة بتطبيقي؟وإذا قمت بذلك، فهل هناك ميزة حقيقية سيتم الحصول عليها تلقائيًا بالنسبة لي؟إذا كان الأمر كذلك ما الذي يمنحني هذه الميزة، المترجم؟

هل يعمل F# على موازنة الوظائف التي تكتبها عبر مراكز متعددة ووحدات المعالجة المركزية تلقائيًا نيابةً عنك؟هل ترى زيادة في عدد سلاسل المحادثات في مدير المهام؟

سؤالي الأساسي هو، كيف يمكنني البدء في استخدام هاسكل بطريقة عملية، وهل سأرى حقًا بعض الفوائد إذا فعلت ذلك؟

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

المحلول

يبدو أن كتاب Real World Haskell هو ما تبحث عنه تمامًا.يمكنك قراءتها مجانًا عبر الإنترنت:

http://book.realworldhaskell.org/

نصائح أخرى

لا يحتوي F# على أي غبار سحري من شأنه أن ينقل الوظائف إلى وحدات المعالجة المركزية أو الأجهزة المختلفة.ما تفعله F#/Haskell ولغات البرمجة الوظيفية الأخرى هو تسهيل كتابة الوظائف التي يمكن معالجتها بشكل مستقل عن الخيط أو وحدة المعالجة المركزية التي تم إنشاؤها عليها.

لا أشعر أنه من المناسب نشر رابط هنا إلى البودكاست الذي أشارك فيه، يبدو الأمر غير مناسب بعض الشيء، ولكن في حلقة Herding Code حيث تحدثنا مع Matt Podwysocki، طرحنا نفس السؤال وقدم بعض الإجابات المثيرة للاهتمام.هناك أيضًا الكثير من الروابط الجيدة المتعلقة بالبرمجة الوظيفية في تلك الحلقة.لقد وجدت عنوان رابط واحد "لماذا تعتبر البرمجة الوظيفية مهمة؟"قد يوفر لك ذلك بعض الإجابات.

قد يكون هذا مثيرًا للاهتمام أيضًا:"البرمجة الوظيفية في العالم الحقيقي"

الأمثلة موجودة في F# وC#، لكن النظرية عامة إلى حد ما.مما قرأته (الإصدار المسبق) هو بالتأكيد مثير للاهتمام، ولكن حتى الآن أعتقد أنه يجعلني أرغب في الاستمرار أكثر فأكثر في لغة C#، باستخدام مكتبات مثل Parallel Extensions.

لم تذكر، ولكني أفترض أنك تستخدم C++.إحدى الطرق السهلة للوصول إلى الوظيفة هي عبر C++/CLI إلى F#.يحتوي C++ على "غبار الجني السحري" (يسمى IJW:إنه يعمل فقط) للسماح لك بالاتصال بالرمز المُدار والخروج منه.مع هذا، يكون استدعاء رمز F# بسيطًا تقريبًا كما هو الحال مع C#.

لقد استخدمت هذا في برنامج واحد (FreeSWITCH)، وهو مكتوب بالكامل في C/C++.باستخدام C++/CLI مُدار واحد (استخدم المفتاح /clr)، ينتقل بطريقة سحرية إلى تعليمات برمجية مُدارة، ومن هناك، يمكنني تحميل مكونات F# الإضافية وتنفيذها.لتسهيل عملية النشر، يمكن لـ F# ربط جميع تبعياته بشكل ثابت، لذلك لا تحتاج إلى نشر ملفات وقت تشغيل F#.أحد الأشياء الأخرى التي تجعل كود CLR جذابًا هو أنه يمكنك تمرير التعليمات البرمجية المُدارة (المفوضين) إلى كود C، وسيقوم وقت التشغيل تلقائيًا بعمل مفاجأة لك.

إذا قررت أن تسلك طريق هاسكل، فإن الميزة التي ستبحث عنها هي FFI:واجهة الوظائف الأجنبية.ومع ذلك، لا أعتقد أنها ستمنحك نفس مستوى التكامل مثل C++/CLI مع F#.

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

حظ سعيد.

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

هذه النقطة الأخيرة هي إحدى المزايا الرئيسية لهاسكل:نظام الكتابة مذهل.ومع ذلك، فهي مثل أي أداة قوية؛فهو يحتاج إلى الوقت والجهد للاستفادة منه بشكل جيد.

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

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