كيف تقوم "البرمجة الموجهة للغة" بمقارنة مع OOP / وظيفية في العالم الحقيقي

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

  •  19-09-2019
  •  | 
  •  

سؤال

بدأت مؤخرا لقراءة بعض الأدبيات ذات الصلة F #، والتحدث عن "البرمجة الوظيفية في العالم الحقيقي" و "خبير F #" على سبيل المثال. في البداية، من السهل، لأن لدي بعض الخلفية في Haskell، ومعرفة C #. ولكن عندما يتعلق الأمر "البرمجة الموجهة للغة"أنا فقط لا أحصل عليه. - قرأت بعض التفسيرات، مثل قراءة ورقة أكاديمية تحصل على مزيد من المجرات والغريب مع كل جملة.

هل لدى أي شخص مثال سهل لهذا النوع من الأشياء وكيف يقارن بالنماذج الحالية؟ انها ليست مجرد الخيال الأكاديمي، أليس كذلك؟ ؛)

شكرا، وود

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

المحلول

F # لديه عدد قليل من الآليات للقيام البرمجة في نمط واحد قد يسمي "الموجهة نحو اللغة".

أولا، يمكن ل Niceties Syntax (لا تحتاج مكالمات الدالة إلى أقواس، يمكن تحديد مشغلي INFIX الخاصين، ...) اجعلها حتى تتمتع العديد من المكتبات المعرفة من قبل المستخدم بمظهر DSLs المضمن.

ثانيا، يمكن أن تمكنك آلية "عروض الأسعار" F # "من عرض التعليمات البرمجية ثم قم بتشغيلها باستخدام محرك دلائل / تقييم بديل.

ثالثا، F # تعبيرات الحساب "(Aka Workflows، Monads، ...) أيضا تقديم طريقة لتوفير نوع من دلالات بديلة كتل معينة من التعليمات البرمجية.

كل هذه سقوط كيندا في فئة EDSL.

نصائح أخرى

برنامج موجه في اللغة (LOP) يمكن استخدامه لوصف أي مما يلي.

إنشاء لغة خارجية (DSL)

ربما يكون هذا الاستخدام الأكثر شيوعا ل Lop، وهو المكان الذي يوجد فيه مجال محدد - مثل حزم الشحن UPS عبر أنواع العبور عبر الطرق، إلخ. بدلا من محاولة تشفير جميع كيانات خاصة بالمجال هذه داخل رمز البرنامج، أنت بدلا من إنشاء لغة برمجة منفصلة لمجرد هذا المجال. حتى تتمكن من تشفير مشكلتك بلغة خارجية منفصلة.

خلق لغة داخلية

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

كتبت وظيفة بلوق على Lop لفترة من الوقت الذي يوفر بعض أمثلة التعليمات البرمجية.

في البرمجة الموجهة للكائنات، تحاول نموذج مشكلة باستخدام الكائنات. يمكنك بعد ذلك توصيل هذه الكائنات معا لأداء الوظائف ... وفي النهاية حل المشكلة الأصلية.

في البرمجة الموجهة نحو اللغة، بدلا من استخدام لغة برمجة موجهة أو وظيفية موجهة، تقوم بتصميم لغة خاصة مجال جديدة من الأنسب لحل مشكلتك بكفاءة.

قد يتم تحميل البرامج الموجهة إلى لغة المصطلح في أنه قد يكون له معاني مختلفة لأشخاص مختلفين.

ولكن من حيث كيف استخدمت ذلك، فهذا يعني أنك تنشئ DSL (http://en.wikipedia.org/wiki/domain_specific_language.) قبل أن تبدأ في حل مشكلتك.

بمجرد إنشاء DSL الخاص بك، يمكنك بعد ذلك كتابة برنامجك من حيث DSL.

إن الفكرة هي أن DSL الخاص بك أكثر ملاءمة للتعبير عن المشكلة من لغة الأغراض العامة ستكون.

ستكون بعض الأمثلة هي صنع بناء جملة الملف أو روبي على قضبان activerecord.

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

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

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

مثال سهل للغة خاصة بالمجال، المذكورة هنا, ، هو SQL. أيضا: البرامج النصية UNIX قذيفة.

بالطبع، إذا كنت تقوم بعمل كبير من العمليات الأساسية ولديك الكثير من التداخل باللغة الأساسية، فمن المحتمل أن يتم الترددجين.

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