سؤال

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

يبدو أن هناك استثمارات كبيرة في الوقت لخلق والحفاظ على DSL, حتى في تطبيق ما في الفضاء من شأنه أن أحصل على الإنتاجية العائد على الاستثمار ؟

تحرير: يبدو الأكثر شيوعا استخدام DSL لتنسيقات الملفات من أجل استمرار البيانات الدولة ، ماذا عن استخدام DSL البرنامج المنطق هيكل(ربما رمز جيل)?عندما يكون هذا ممكنا ؟

تحرير #2 أنا أساسا يسأل عن متى هو خلق معين DSL جديرة بالاهتمام.بالطبع يجب علينا استخدام القائمة DSLs قدر الإمكان لتوفير الوقت.

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

المحلول

هناك عدد قليل جدا من الأسباب الجيدة من أجل خلق آخر DSL.العالم الدهون مع الأغراض الخاصة لغات.

أعتقد جنبا إلى جنب مع هذه الخطوط.

  1. حل المشكلة مع الأغراض العامة اللغة مثل Python, Java, C++..أيا كان.

  2. تحسين هذا الحل إلى عامل السمات المشتركة وبناء لطيفة حقا, أنيقة حقا ، حقا الموسعة مكتبة الفئة.

  3. تحسين تلك الفئة مكتبة التأكيد على "التعامد".تأكد من أن جميع الميزات تعمل بشكل جيد معا ، من دون أي مشاكل.

  4. إذا كنت بحاجة إلى تبسيط الجملة فقط ، إنشاء البرمجة التفاف حول لطيفة مكتبة الفئة.هذا هو الخاص بك DSL.لبيثون, هذا سهل ... إنه بالفعل لغة ديناميكية.جافا, هناك أشياء يمكنك الاستفادة من.C++ يمكن أن يكون قليلا من العمل لبناء هذا مرونة بيئة البرمجة.

  5. إذا كنت لا تزال بحاجة إلى مزيد من التحسين ، النظر في كتابة المترجم الخاص بك DSL.

نصائح أخرى

ACM الحوسبة المسوحات المادة عندما وكيفية تطوير المجال-لغات معينة يوفر المشورة على هذا الموضوع, كما يفعل مارتن فاولر 2010 كتاب المجال-لغات معينة.

أولا, أود أن استخدام DSL عندما تكون المشكلة المجال الخاص بك النامية ضد على نطاق واسع معروفة المجال, و بعض الأعمال من خبراء هذا المجال قد ذهب بالفعل من خلال أطوال كبيرة لبناء مثل هذه DSL بحيث أنك لن تضطر إلى الذهاب من خلال أطوال نفسك على حل جميع المشاكل التي برزت بالفعل.

إذا كنت تفكر في خلق DSL, وأود أن تنظر في القيام بذلك إذا كان عملك في مجال معين, و كنت تنفق معظم الوقت الخاص بك التركيز في مشكلة معينة المجال.إذا كنت ترتد حول القيام طلبات متعددة المشكلة المجالات, ثم أنا لا أنصح أخذ هذا النهج.

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

بالطبع عليك أن الوزن التكاليف/الفوائد بناء DSL vs إطار على رأس القائمة بالفعل اللغة.

أحد الوضع الذي يتبادر إلى الذهن عندما متطلبات يتطلب عالية جدا أو واردا مستوى التخصيص/التكوين.حيث يمكنك أن توفر نوع من البرمجة نموذج ضد DSL بدلا من ذلك.

يأخذ سيارة الجمعية "الذراع" على سبيل المثال ، توفير تكوين نموذج لدعم مختلف مصنع تكوينات سيكون من المستحيل.(كشف هذا لا كشف أنه عندما يحدث هذا هل هذا ....... الخ)

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

واحد الأمثلة في العالم الحقيقي الذي يتبادر إلى الذهن هو ياهو الأنابيب (يمكنك التفكير في الأمر على النحو DSL) أو robots.txt التوجيه الآلي الزاحف على شبكة الإنترنت على سبيل المثال.فإنها قد لا تكون كاملة DSL عندهم ولكن أين DSL قد تكون مفيدة.

حسنا, شخص ما يجب أن أقول ذلك, حتى هنا يذهب:

اللثغة هو يعتبر المجال لغة محددة أي المجال.مدعوم جيدا جدا الموسعة DSL في ذلك.

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

الأكثر وضوحا هو بالتأكيد يجب استخدامها عندما تكون اللغة موجود مدعومة بشكل جيد.الأمثلة على ذلك هي UIL عن عزر واجهة المستخدم الرسومية المستندة إلى تطوير وتقديم برامج يبني.

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

أجد UIL لا سيما مكاسب ضخمة من أجل تطوير واجهة المستخدم الرسومية لأن UIL مترجم يمكن أن تجد أخطاء في واجهة المستخدم الرسومية المواصفات التي تبدو وكأنها طبيعية جميلة compilable البرمجية C++ compilter.حقيقة أنها مدعومة جيدا يعني أن رمز من السهل أن منفذ بين المنصات ، وحتى واجهة المستخدم الرسومية بناه.

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