لغة خاصة بالمجال
لغة المجال المتخصصة ( DSL ) هي لغة برمجة مصممة خصيصًا لتطبيقات محددة . وهذا يختلف عن لغة الأغراض العامة (GPL) التي تُستخدم على نطاق واسع في مختلف المجالات. تتنوع لغات المجال المتخصصة بشكل كبير، بدءًا من اللغات الشائعة الاستخدام في المجالات العامة، مثل HTML لصفحات الويب، وصولًا إلى اللغات التي يستخدمها برنامج واحد أو عدد قليل من البرامج، مثل MUSH . يمكن تصنيف لغات المجال المتخصصة حسب نوع اللغة، وتشمل لغات الترميز المتخصصة، ولغات النمذجة المتخصصة (أو لغات المواصفات بشكل عام )، ولغات البرمجة المتخصصة . لطالما وُجدت لغات البرمجة المتخصصة في عصر الحوسبة، ولكن مصطلح "لغة المجال المتخصصة" أصبح أكثر شيوعًا مع ازدياد استخدام النمذجة المتخصصة . تُسمى لغات المجال المتخصصة الأبسط، وتحديدًا تلك المستخدمة في تطبيق واحد، أحيانًا بشكل غير رسمي باللغات المصغرة .
لا يكون الخط الفاصل بين لغات البرمجة العامة ولغات البرمجة المتخصصة واضحًا دائمًا، فقد تمتلك لغة ما خصائص متخصصة لمجال معين، ولكنها قابلة للتطبيق على نطاق أوسع، أو على العكس، قد تكون قادرة من حيث المبدأ على استخدامات واسعة، ولكنها تُستخدم عمليًا بشكل أساسي لمجال محدد. على سبيل المثال، طُوّرت لغة بيرل في الأصل كلغة لمعالجة النصوص وربطها، لنفس مجال لغة AWK ونصوص البرامج النصية ، ولكنها استُخدمت لاحقًا في الغالب كلغة برمجة عامة. في المقابل، تُعد لغة بوست سكريبت لغة كاملة تورينج ، ويمكن استخدامها من حيث المبدأ لأي مهمة، ولكنها تُستخدم عمليًا بشكل محدود كلغة لوصف الصفحات .
يستخدم
يُعدّ تصميم واستخدام لغات المجال المحددة (DSL) المناسبة جزءًا أساسيًا من هندسة المجال ، وذلك باستخدام لغة ملائمة للمجال قيد الدراسة. قد يشمل ذلك استخدام لغة مجال محددة أو رخصة عامة مرخصة (GPL) موجودة، أو تطوير لغة مجال محددة جديدة. تعتبر البرمجة الموجهة باللغة إنشاء لغات خاصة للتعبير عن المشكلات جزءًا أساسيًا من عملية حل المشكلات. قد يكون إنشاء لغة مجال محددة (مع برمجيات داعمة لها)، بدلًا من إعادة استخدام لغة موجودة، أمرًا مجديًا إذا سمحت اللغة بالتعبير عن نوع معين من المشكلات أو الحلول بشكل أوضح مما تسمح به لغة موجودة، وكان هذا النوع من المشكلات يتكرر ظهوره بشكل كافٍ. عمليًا، يمكن تخصيص لغة المجال المحددة لمجال مشكلة محدد، أو تقنية تمثيل مشكلة محددة، أو تقنية حل محددة، أو جوانب أخرى من المجال.
ملخص
تُصمم لغات البرمجة المتخصصة لحل المشكلات في مجال محدد، ولا يُفترض بها حل مشكلات خارج هذا المجال (مع أن ذلك ممكن تقنيًا). في المقابل، تُصمم لغات البرمجة العامة لحل المشكلات في مجالات متعددة، وقد يكون المجال أحد قطاعات الأعمال. ومن أمثلة قطاعات الأعمال:
- وثائق التأمين على الحياة (التي طورتها داخلياً شركة تأمين كبيرة)
- محاكاة قتالية
- حساب الراتب
- الفواتير
تقع لغة البرمجة المتخصصة في مجال معين بين لغة برمجة صغيرة ولغة برمجة نصية ، وغالبًا ما تُستخدم بطريقة مشابهة لمكتبة البرمجة . الحدود بين هذين المفهومين غير واضحة تمامًا، تمامًا مثل الحدود بين لغات البرمجة النصية ولغات البرمجة العامة.
في التصميم والتنفيذ
اللغات المتخصصة هي لغات (أو غالبًا، قواعد نحوية أو صيغ مُعلنة) ذات أهداف محددة للغاية في التصميم والتنفيذ. يمكن أن تكون اللغة المتخصصة لغة رسم تخطيطي مرئي، مثل تلك التي أنشأها نظام نمذجة Eclipse العام ، أو تجريدات برمجية، مثل إطار عمل نمذجة Eclipse ، أو لغات نصية. على سبيل المثال، تحتوي أداة سطر الأوامر grep على صيغة تعبير نمطي تُطابق الأنماط في أسطر النص. تُعرّف أداة sed صيغة لمطابقة واستبدال التعبيرات النمطية. غالبًا ما يمكن استخدام هذه اللغات الصغيرة معًا داخل بيئة سطر الأوامر لتنفيذ مهام برمجية أكثر تعقيدًا.
الخط الفاصل بين لغات البرمجة المتخصصة ولغات البرمجة النصية غير واضح تمامًا، لكن لغات البرمجة المتخصصة غالبًا ما تفتقر إلى وظائف المستوى الأدنى للوصول إلى نظام الملفات ، والتحكم بين العمليات، وغيرها من الوظائف التي تميز لغات البرمجة كاملة الميزات، سواء كانت لغات برمجة نصية أو غيرها. لا تُترجم العديد من لغات البرمجة المتخصصة إلى رمز بايت أو رمز تنفيذي، بل إلى أنواع مختلفة من الوسائط: يُصدّر برنامج GraphViz إلى PostScript ، و GIF ، و JPEG ، وما إلى ذلك، بينما يُترجم برنامج Csound إلى ملفات صوتية، وتُترجم لغة برمجة متخصصة في تتبع الأشعة مثل Persistence of Vision Ray Tracer ( POV-Ray ) إلى ملفات رسومية.
لغات تعريف البيانات
تُقدم لغة تعريف البيانات مثل SQL حالة مثيرة للاهتمام: يمكن اعتبارها لغة خاصة بمجال معين لأنها خاصة بمجال معين (في حالة SQL، الوصول إلى قواعد البيانات العلائقية وإدارتها)، وغالبًا ما يتم استدعاؤها من تطبيق آخر، ولكن SQL تحتوي على كلمات رئيسية ووظائف أكثر من العديد من لغات البرمجة النصية، وغالبًا ما يُنظر إليها على أنها لغة كاملة، ويرجع ذلك جزئيًا إلى انتشار معالجة قواعد البيانات في البرمجة ومقدار الإتقان المطلوب لتكون خبيرًا في اللغة.
مما يزيد من ضبابية هذا الخط، أن العديد من اللغات الخاصة بالمجال قد كشفت عن واجهات برمجة التطبيقات (APIs)، ويمكن الوصول إليها من لغات برمجة أخرى دون قطع تدفق التنفيذ أو استدعاء عملية منفصلة، وبالتالي يمكنها العمل كمكتبات برمجة.
أدوات البرمجة
تتوسع بعض لغات البرمجة المتخصصة بمرور الوقت لتشمل أدوات برمجة متكاملة، مما يزيد من تعقيد مسألة تحديد ما إذا كانت اللغة متخصصة في مجال معين أم لا. ومن الأمثلة الجيدة على ذلك لغة البرمجة الوظيفية XSLT (Extensible Stylesheet Language Transformation )، المصممة خصيصًا لتحويل مخطط XML إلى آخر، والتي تم توسيعها منذ نشأتها لتتيح (وتحديدًا في إصدارها 2.0) أشكالًا متنوعة من التفاعل مع نظام الملفات، ومعالجة النصوص والتواريخ، وتحديد أنواع البيانات.
في هندسة النماذج ، نجد العديد من الأمثلة على لغات خاصة بمجالات محددة، مثل لغة قيود الكائنات (OCL)، وهي لغة لتزيين النماذج بالعبارات الشرطية، أو لغة الاستعلام/العرض/التحويل ( QVT )، وهي لغة تحويل خاصة بمجالات محددة. مع ذلك، فإن لغات مثل لغة النمذجة الموحدة (UML) هي عادةً لغات نمذجة عامة الأغراض.
باختصار، يُمكن تشبيه ذلك بمثال: لغة برمجة صغيرة جدًا تُشبه السكين، التي يُمكن استخدامها بآلاف الطرق المختلفة، من تقطيع الطعام إلى الدفاع عن النفس. أما لغة البرمجة المتخصصة في مجال معين ، فتُشبه المثقاب الكهربائي: أداة قوية ذات استخدامات متعددة، ولكنها مُخصصة لسياق مُحدد، ألا وهو إحداث الثقوب في الأشياء. بينما تُشبه لغة البرمجة العامة بيئة عمل متكاملة، تضم مجموعة متنوعة من الأدوات المُصممة لأداء مهام مُختلفة. ينبغي على المبرمجين الذين يُدركون، عند النظر إلى بيئة عملهم الحالية، حاجتهم إلى أداة أفضل، ويجدون أن لغة برمجة مُتخصصة في مجال مُعين تُوفر لهم ذلك تمامًا، استخدام لغات البرمجة المتخصصة في مجال مُعين.
مواضيع اللغة الخاصة بالمجال
لغات خاصة بالمجال الخارجية والمضمنة
تُسمى لغات المجال المحددة (DSLs) المُنفذة عبر مُفسر أو مُترجم مُستقل بلغات المجال الخارجية . ومن الأمثلة المعروفة TeX وAWK. أما لغات المجال المحددة المُضمنة (أو الداخلية)، فتُنفذ عادةً ضمن لغة مُضيفة كمكتبة، وتقتصر عادةً على قواعد اللغة المُضيفة، مع العلم أن هذا يعتمد على إمكانيات اللغة المُضيفة. [ 1 ]
أنماط الاستخدام
توجد عدة أنماط استخدام للغات الخاصة بمجال معين: [ 2 ] [ 3 ]
- المعالجة باستخدام أدوات مستقلة، يتم استدعاؤها عبر عملية المستخدم المباشرة، غالبًا على سطر الأوامر أو من ملف Makefile (على سبيل المثال، grep لمطابقة التعبيرات العادية، sed، lex، yacc ، مجموعة أدوات GraphViz ، إلخ).
- اللغات الخاصة بالمجال والتي يتم تنفيذها باستخدام أنظمة الماكرو للغة البرمجة، والتي يتم تحويلها أو توسيعها إلى لغة عامة للأغراض المضيفة في وقت الترجمة أو في الوقت الحقيقي
- مثللغة المجال المضمنة ( eDSL ) [ 4 ]، والمعروفة أيضًا باسم لغة المجال الداخلية، هي لغة مجال خاصة (DSL) تُنفذ كمكتبة في لغة برمجة "مضيفة". تستفيد لغة المجال المضمنة من بناء الجملة والدلالات وبيئة نظام التشغيل (التسلسل، والشروط، والتكرار، والدوال، وما إلى ذلك)، وتضيف عناصر أساسية خاصة بالمجال تُمكّن المبرمجين من استخدام لغة البرمجة "المضيفة" لإنشاء برامج تُولّد شيفرة بلغة البرمجة "الهدف". يمكن دمج عدة لغات مجال مضمنة بسهولة في برنامج واحد، كما يمكن استخدام إمكانيات اللغة المضيفة لتوسيع لغة مجال مضمنة موجودة. من المزايا الأخرى المحتملة لاستخدام لغة مجال مضمنة تحسين سلامة الأنواع وتوفير أدوات بيئة تطوير متكاملة (IDE) أفضل . أمثلة على لغات البرمجة الخاصة بالمجال (eDSL): SQLAlchemy "Core" وهي لغة برمجة خاصة بالمجال (eDSL) للغة SQL مكتوبة بلغة بايثون، و JOOQ (الاستعلام الموجه للكائنات) وهي لغة برمجة خاصة بالمجال (eDSL ) للغة SQL مكتوبة بلغة جافا ، و LINQ (صيغة طريقة الاستعلام المتكاملة ) وهي لغة برمجة خاصة بالمجال (eDSL) للغة SQL مكتوبة بلغة C# ، وkotlinx.html وهي لغة برمجة خاصة بالمجال (eDSL) للغة HTML مكتوبة بلغة كوتلن . [ 5 ]
- اللغات الخاصة بالمجال والتي يتم استدعاؤها (أثناء وقت التشغيل ) من البرامج المكتوبة بلغات عامة مثل C أو Perl ، لأداء وظيفة محددة، وغالبًا ما تعيد نتائج العملية إلى لغة البرمجة "المضيفة" لمزيد من المعالجة؛ بشكل عام، يتم تضمين مترجم أو آلة افتراضية للغة الخاصة بالمجال في التطبيق المضيف (على سبيل المثال، سلاسل التنسيق ، محرك التعبيرات النمطية ).
- اللغات الخاصة بالمجال المضمنة في تطبيقات المستخدم (مثل لغات الماكرو داخل جداول البيانات) [ 6 ] والتي (1) تستخدم لتنفيذ التعليمات البرمجية التي يكتبها مستخدمو التطبيق، (2) يتم إنشاؤها ديناميكيًا بواسطة التطبيق، أو (3) كليهما.
أهداف التصميم
إن اعتماد منهجية لغة برمجة متخصصة في مجال معين في هندسة البرمجيات ينطوي على مخاطر وفرص. وتنجح لغة البرمجة المتخصصة المصممة جيداً في إيجاد التوازن الأمثل بين هذه المخاطر والفرص.
تتميز اللغات المتخصصة في مجال معين بأهداف تصميمية مهمة تتناقض مع تلك الخاصة باللغات ذات الأغراض العامة:
- اللغات المتخصصة في مجال معين أقل شمولية.
- تتميز اللغات المتخصصة في مجال معين بقدرة تعبيرية أكبر بكثير في مجالها.
- ينبغي أن تُظهر اللغات الخاصة بالمجال الحد الأدنى من التكرار .
المصطلحات
في البرمجة، تُعدّ المصطلحات أساليب يفرضها المبرمجون للتعامل مع مهام التطوير الشائعة، على سبيل المثال:
- تأكد من حفظ البيانات قبل إغلاق النافذة.
- قم بتعديل الكود كلما تغيرت معلمات سطر الأوامر لأنها تؤثر على سلوك البرنامج.
نادراً ما تدعم لغات البرمجة ذات الأغراض العامة مثل هذه المصطلحات، ولكن يمكن للغات الخاصة بمجال معين وصفها، على سبيل المثال:
- يمكن للبرنامج النصي حفظ البيانات تلقائيًا.
- يمكن للغة خاصة بمجال معين أن تحدد معلمات إدخال سطر الأوامر.
أمثلة
تشمل أمثلة لغات البرمجة الخاصة بالمجال HTML ، وLogo للرسم الشبيه بالقلم الرصاص، ولغات وصف الأجهزة Verilog و VHDL ، و MATLAB و GNU Octave لبرمجة المصفوفات، و Mathematica و Maple و Maxima للرياضيات الرمزية ، ولغة المواصفات والوصف للأنظمة التفاعلية والموزعة، وصيغ ووحدات الماكرو في جداول البيانات ، و SQL لاستعلامات قواعد البيانات العلائقية ، وقواعد Yacc لإنشاء المحللات النحوية ، والتعبيرات النمطية لتحديد المحللات المعجمية ، ونظام نمذجة Eclipse العام لإنشاء لغات الرسم التخطيطي، و Csound لتوليف الصوت والموسيقى، ولغات الإدخال الخاصة بـ GraphViz و GrGen ، وهما حزمتان برمجيتان تستخدمان لتخطيط الرسوم البيانية وإعادة كتابتها ، ولغة تكوين HashiCorp المستخدمة في Terraform وأدوات HashiCorp الأخرى، كما أن Puppet لديه لغة تكوين خاصة به .
لغة GameMaker
لغة GML هي لغة برمجة متخصصة يستخدمها برنامج GameMaker Studio ، مصممة لمساعدة المبرمجين المبتدئين على تعلم أساسيات البرمجة بسهولة أكبر. وهي تعمل كمزيج من عدة لغات، منها دلفي ، وسي++ ، وبيسيك . تستدعي معظم دوال GML، بعد تجميعها، دوال وقت التشغيل المكتوبة بلغة البرمجة الخاصة بالمنصة المستهدفة؛ وبالتالي، يبقى تنفيذها النهائي مخفيًا عن المستخدم. الهدف الأساسي من هذه اللغة هو تبسيط عملية تطوير الألعاب. يُمكّن وقت تشغيل GameMaker، الذي يدير حلقة اللعبة الرئيسية ويتولى تنفيذ الدوال، اللعبة البسيطة من استخدام بضعة أسطر من التعليمات البرمجية فقط بدلًا من آلاف الأسطر.
لغة ترميز ColdFusion
تُعد لغة البرمجة النصية المرتبطة بـ ColdFusion مثالًا آخر على لغة برمجة متخصصة في مجال معين، تُستخدم في مواقع الويب التي تعتمد على البيانات. تُستخدم هذه اللغة لدمج لغات وخدمات مثل Java و. NET وC++ وخدمات الرسائل النصية القصيرة والبريد الإلكتروني وخوادم البريد الإلكتروني وبروتوكولات HTTP وFTP وExchange وخدمات الدليل وأنظمة الملفات ، وذلك لاستخدامها في مواقع الويب.
تتضمن لغة ترميز ColdFusion (CFML) مجموعة من الوسوم التي يمكن استخدامها في صفحات ColdFusion للتفاعل مع مصادر البيانات، ومعالجة البيانات، وعرض المخرجات. يتشابه بناء جملة وسوم CFML مع بناء جملة عناصر HTML.
فلتر ميستر
FilterMeister هي بيئة برمجة، بلغة برمجة مبنية على لغة C، مصممة خصيصًا لإنشاء إضافات معالجة الصور المتوافقة مع برنامج Photoshop . تعمل FilterMeister كإضافة لبرنامج Photoshop، ويمكنها تحميل وتنفيذ البرامج النصية أو تجميعها وتصديرها كإضافات مستقلة. على الرغم من أن لغة FilterMeister تحاكي جزءًا كبيرًا من لغة C ومكتبة وظائفها، إلا أنها لا تحتوي إلا على الميزات التي يمكن استخدامها ضمن سياق إضافات Photoshop، وتضيف عددًا من الميزات الخاصة المفيدة فقط في هذا المجال.
قوالب ميدياويكي
ميزة القالب في MediaWiki هي لغة مدمجة خاصة بالمجال هدفها الأساسي هو دعم إنشاء قوالب الصفحات ودمج ( التضمين حسب المرجع) صفحات MediaWiki في صفحات MediaWiki الأخرى.
يستخدم هندسة البرمجيات
ازداد الاهتمام مؤخرًا باللغات المتخصصة في مجالات محددة لتحسين إنتاجية وجودة هندسة البرمجيات . إذ يُمكن لهذه اللغات أن تُوفر مجموعة أدوات قوية لهندسة برمجيات فعّالة، وقد بدأت هذه الأدوات تشق طريقها نحو تطوير أنظمة برمجية بالغة الأهمية.
تُعد مجموعة أدوات خفض تكلفة البرمجيات [ 7 ] مثالاً على ذلك. تتكون هذه المجموعة من مجموعة من الأدوات المساعدة، بما في ذلك محرر مواصفات لإنشاء مواصفات المتطلبات ، ومتصفح رسم بياني للتبعيات لعرض تبعيات المتغيرات، ومدقق اتساق لاكتشاف الحالات المفقودة في الصيغ السليمة في المواصفات، ومدقق نماذج ومثبت نظريات للتحقق من خصائص البرنامج مقابل المواصفات، ومولد ثوابت يقوم بإنشاء الثوابت تلقائيًا بناءً على المتطلبات.
ومن التطورات الحديثة البرمجة الموجهة للغة ، وهي منهجية هندسة برمجيات متكاملة تعتمد بشكل أساسي على إنشاء لغات خاصة بالمجال وتحسينها واستخدامها.
المترجمات الفوقية
تُكمّل البرمجة الموجهة للغة ، وجميع أشكال اللغات الخاصة بالمجالات الأخرى، فئة أدوات كتابة المترجمات التي تُسمى المترجمات الفوقية . تُفيد هذه المترجمات في توليد المحللات النحوية ومولدات الشفرة للغات الخاصة بالمجالات، كما تُترجم المترجمات الفوقية لغةً وصفيةً خاصة بالمجال مصممة خصيصًا لمجال البرمجة الفوقية .
إلى جانب تحليل لغات البرمجة المتخصصة، تُعدّ المترجمات الفوقية مفيدةً في توليد مجموعة واسعة من أدوات هندسة البرمجيات وتحليلها. وغالبًا ما تُستخدم منهجية المترجمات الفوقية في أنظمة تحويل البرامج .
تشمل المترجمات الفائقة التي لعبت دورًا مهمًا في كل من علوم الحاسوب وصناعة الحاسوب META II ، [ 8 ] وسلفه TreeMeta . [ 9 ]
محرك Unreal Engine قبل الإصدار 4 وألعاب أخرى
كشفت لعبتا Unreal و Unreal Tournament عن لغة برمجة تُسمى UnrealScript . وقد أتاح ذلك تطوير تعديلات سريعة مقارنةً بلعبة Quake المنافسة (التي تستخدم محرك Id Tech 2 ). كان محرك Id Tech يستخدم لغة C القياسية ، مما يعني ضرورة تعلم لغة C وتطبيقها بشكل صحيح، بينما صُممت UnrealScript لتكون سهلة الاستخدام وفعّالة. وبالمثل، قدمت ألعاب أحدث لغات برمجة خاصة بها. ومن الأمثلة الشائعة الأخرى لغة Lua لكتابة البرامج النصية.
محركات قواعد لأتمتة السياسات
طُوِّرت العديد من محركات قواعد الأعمال لأتمتة السياسات وقواعد الأعمال المستخدمة في القطاعين الحكومي والخاص. توفر منصات مثل ILOG و Oracle Policy Automation وDTRules و Drools وغيرها دعمًا للغات البرمجة الخاصة بالمجال (DSLs) المصممة لمعالجة مختلف المشكلات. بل إن DTRules تُعرّف واجهةً لاستخدام لغات برمجة خاصة بالمجال متعددة ضمن مجموعة قواعد واحدة.
تهدف محركات قواعد الأعمال إلى تعريف تمثيل منطق الأعمال بطريقة سهلة القراءة قدر الإمكان. وهذا يُمكّن كلاً من خبراء المجال والمطورين من العمل مع نفس تمثيل منطق الأعمال وفهمه. توفر معظم محركات القواعد نهجًا لتبسيط هياكل التحكم في منطق الأعمال (على سبيل المثال، باستخدام القواعد التصريحية أو جداول القرار ) إلى جانب بدائل لبنية البرمجة لصالح لغات المجال المحددة (DSL).
لغات النمذجة الإحصائية
قام خبراء النمذجة الإحصائية بتطوير لغات خاصة بمجالات محددة مثل R (وهي تطبيق للغة S )، و Bugs ، وJags ، و Stan . توفر هذه اللغات صيغة لوصف نموذج بايزي وتولد طريقة لحله باستخدام المحاكاة.
إنشاء نماذج وخدمات للغات برمجة متعددة
إنشاء معالجة الكائنات والخدمات بناءً على لغة وصف الواجهة للغة خاصة بالمجال مثل JavaScript لتطبيقات الويب، وHTML للتوثيق، وC++ للتعليمات البرمجية عالية الأداء، وما إلى ذلك. يتم ذلك بواسطة أطر عمل متعددة اللغات مثل Apache Thrift أو Google Protocol Buffers .
غيركين
لغة غيركين مصممة لتحديد حالات الاختبار للتحقق من سلوك البرمجيات، دون تحديد كيفية تنفيذ هذا السلوك. وهي مصممة لتكون سهلة القراءة والاستخدام من قبل المستخدمين غير التقنيين، وذلك بفضل تركيبها اللغوي الطبيعي وتصميمها الموجه نحو الأسطر . يجب بعد ذلك تنفيذ الاختبارات المُعرّفة بلغة غيركين بلغة برمجة عامة. ثم، تعمل خطوات برنامج غيركين كتركيب لاستدعاء الدوال، بحيث تكون متاحة لغير المطورين.
أمثلة أخرى
ومن الأمثلة البارزة الأخرى للغات الخاصة بمجالات محددة ما يلي:
المزايا والعيوب
- تتيح لغات البرمجة المتخصصة في مجال معين التعبير عن الحلول بلغة المجال وبمستوى تجريده. والفكرة هي أن خبراء المجال أنفسهم قد يفهمون برامج لغات البرمجة المتخصصة في مجالهم، ويتحققون من صحتها، ويعدلونها، بل ويطورونها في كثير من الأحيان. ومع ذلك، نادراً ما يحدث هذا. [ 10 ]
- تتيح اللغات الخاصة بمجال معين التحقق من صحة البيانات على مستوى المجال. وطالما أن بنى اللغة آمنة، يمكن اعتبار أي جملة مكتوبة بها آمنة.
- يمكن للغات الخاصة بالمجال أن تساعد في نقل تطوير نظم معلومات الأعمال من مطوري البرامج التقليديين إلى مجموعة أكبر عادةً من خبراء المجال الذين (على الرغم من امتلاكهم خبرة تقنية أقل) لديهم معرفة أعمق بالمجال. [ 11 ]
- تُعد اللغات الخاصة بمجال معين أسهل في التعلم، نظراً لنطاقها المحدود.
بعض العيوب:
- تكلفة تعلم لغة جديدة
- نطاق التطبيق المحدود
- تكلفة تصميم اللغة وتنفيذها وصيانتها والأدوات اللازمة للتطوير باستخدامها: بيئة التطوير المتكاملة (IDE)
- إيجاد النطاق المناسب وتحديده والحفاظ عليه.
- صعوبة تحقيق التوازن بين المفاضلات بين خصوصية المجال وبنيات لغات البرمجة العامة
- انخفاض محتمل في كفاءة المعالج مقارنةً بالبرامج المكتوبة يدويًا
- انتشار لغات برمجة خاصة بمجالات غير قياسية متشابهة، على سبيل المثال، لغة برمجة خاصة بمجال معين مستخدمة في شركة تأمين مقابل لغة برمجة خاصة بمجال معين مستخدمة في شركة تأمين أخرى. [ 12 ]
- قد يجد الخبراء غير التقنيين في المجال صعوبة في كتابة أو تعديل برامج DSL بأنفسهم [ 10 ]
- ازدياد صعوبة دمج لغة المجال المحددة (DSL) مع مكونات أخرى من نظام تكنولوجيا المعلومات؛ مقارنةً بالدمج مع لغة عامة الأغراض.
- يؤدي انخفاض عدد الخبراء في لغة برمجة محددة إلى زيادة تكاليف العمالة
- يصعب العثور على أمثلة برمجية
أدوات لتصميم لغات خاصة بمجالات محددة
- JetBrains MPS هي أداة لتصميم لغات برمجة خاصة بمجالات محددة. تستخدم هذه الأداة التحرير الإسقاطي الذي يسمح بتجاوز قيود محللات اللغة وإنشاء محررات لغات برمجة خاصة بمجالات محددة، مثل تلك التي تحتوي على جداول ومخططات. وهي تُطبّق البرمجة الموجهة نحو اللغة. تجمع MPS بين بيئة لتعريف اللغة، ومنصة عمل للغة ، وبيئة تطوير متكاملة (IDE) لهذه اللغات. [ 13 ]
- MontiCore هي بيئة عمل لغوية لتطوير لغات خاصة بمجالات محددة بكفاءة. تعالج هذه البيئة تنسيق قواعد نحوية موسع يحدد لغة المجال المحددة، وتولد مكونات جافا لمعالجة مستندات لغة المجال المحددة. [ 14 ]
- Xtext هو إطار عمل برمجي مفتوح المصدر لتطوير لغات البرمجة ولغات المجال المتخصصة (DSLs). على عكس مولدات المحللات القياسية، لا يُولّد Xtext محللاً فحسب، بل يُولّد أيضًا نموذجًا فئويًا لشجرة بناء الجملة المجردة. إضافةً إلى ذلك، يوفر بيئة تطوير متكاملة (IDE) كاملة الميزات وقابلة للتخصيص، مبنية على Eclipse. [ 15 ] أُرشف المشروع في أبريل 2023.
- Racket عبارة عن مجموعة أدوات لغوية متعددة المنصات تتضمن كودًا أصليًا، ومترجمًا فوريًا (JIT)، ومترجم جافا سكريبت، وبيئة تطوير متكاملة (IDE) (بالإضافة إلى دعم Emacs وVim وVSCode وغيرها)، وأدوات سطر أوامر مصممة لتسهيل إنشاء لغات خاصة بمجالات محددة ولغات عامة الأغراض. [ 16 ] [ 17 ]
انظر أيضاً
مراجع
- ↑ فاولر، مارتن؛ بارسونز، ريبيكا. "لغات خاصة بالمجال" . تم الاسترجاع في 6 يوليو 2019 .
- 1 2 مارجان ميرنيك، يان هيرينغ، وأنتوني إم. سلون. متى وكيف يتم تطوير لغات خاصة بالمجال. مجلة ACM Computing Surveys ، 37(4):316–344، 2005. doi : 10.1145/1118890.1118892
- 1 2 ديوميديس سبينليس. أنماط تصميم بارزة للغات خاصة بالمجال . مجلة الأنظمة والبرمجيات ، 56(1):91-99، فبراير 2001. doi : 10.1016/S0164-1212(00)00089-3
- ^ فيليسن، ماتياس. فيندلر، روبرت بروس. فلات، ماثيو. كريشنامورثي، شريرام؛ بارزيلاي، إيلي؛ مكارثي، جاي. توبين-هوششتات، سام (مارس 2018). "لغة برمجة قابلة للبرمجة" . اتصالات ACM . 61 (3): 62-71 . دوى : 10.1145/3127323 . S2CID 3887010 . تم الاسترجاع في 15 مايو 2019 .
- ↑ "kotlinx.html" . GitHub .
- ↑ ستينسون، كريج (16 أبريل 1991). "بناء جدول بيانات مثالي" . PC . الصفحات 101-164 . تاريخ الاسترجاع: 14 مارس 2025 .
- ↑ هيتماير، سي. (1999). "استخدام مجموعة أدوات SCR* لتحديد متطلبات البرمجيات" (ملف PDF) . وقائع ورشة عمل IEEE الثانية حول تقنيات المواصفات الرسمية الصناعية . IEEE. الصفحات 12-13 . doi : 10.1109/WIFT.1998.766290 . ISBN 0-7695-0081-1. S2CID 16079058 . مؤرشف من الأصل (PDF) بتاريخ 19-07-2004.
- ↑ شور، د. ف. (1964). "META II : لغة كتابة مترجمات موجهة نحو بناء الجملة". وقائع المؤتمر الوطني التاسع عشر لجمعية آلات الحوسبة لعام 1964. الصفحات 41.301-41.3011 . doi : 10.1145/800257.808896 . S2CID 43144779 .
- ↑ كار، سي. ستيفن؛ لوثر، ديفيد أ.؛ إردمان، شيريان (1969). "نظام المترجم TREE-META: نظام مترجم شامل لجهاز Univac 1108 و General Electric 645" . تقرير فني من جامعة يوتا RADC-TR-69-83 . مؤرشف من الأصل في 1 فبراير 2020.
- 1 2 فرويدنثال، مارغوس (1 يناير 2009). "لغات خاصة بالمجال في نظام معلومات جمركية". IEEE Software : 1. doi : 10.1109/MS.2009.152 .
- ↑ آرام، مايكل؛ نيومان، غوستاف (2015-07-01). "تحليل متعدد الطبقات للتطوير المشترك لنظم معلومات الأعمال" (ملف PDF) . مجلة خدمات وتطبيقات الإنترنت . 6 (1). doi : 10.1186/s13174-015-0030-8 . S2CID 16502371 .
- ↑ ميوتو، إريك. "حول دمج المعارف المتخصصة والعلمية في هندسة النماذج" (ملف PDF) . مؤرشف من النسخة الأصلية (PDF) بتاريخ 24 يوليو 2011. تاريخ الاطلاع: 22 نوفمبر 2010 .
- ↑ "JetBrains MPS: منشئ لغة خاصة بالمجال" .
- ↑ "مونتيكور" .
- ↑ "Xtext" .
- ↑ توبين-هوششتات، س.؛ سانت-أمور، ف.؛ كولبيبر، ر.؛ فلات، م.؛ فيليسين، م. (2011). "اللغات كمكتبات" (ملف PDF) . تصميم وتنفيذ لغات البرمجة .
- ↑ فلات، ماثيو (2012). "ابتكار لغات في راكيت" . اتصالات رابطة آلات الحوسبة . تم الاسترجاع في 8 أبريل 2012 .
للمزيد من القراءة
- ميرنيك، مارجان؛ هيرينغ، جان؛ وسلون، أنتوني م. (2005). "متى وكيف يتم تطوير لغات خاصة بمجال معين؟" . مجلة ACM Computing Surveys . 37 (4): 316-344 . doi : 10.1145/1118890.1118892 . S2CID 207158373 .
- سبينليس، ديوميديس (2001). "أنماط تصميم بارزة للغات خاصة بالمجال". مجلة الأنظمة والبرمجيات . 56 (1): 91-99 . doi : 10.1016/S0164-1212(00)00089-3 .
- بار، تيرينس (2007). المرجع الشامل للغة ANTLR: بناء لغات خاصة بالمجال . دار براغماتيك بوكشيلف للنشر. رقم ISBN 978-0-9787392-5-6.
- لاروس، جيمس (2009). "إنفاق عائدات مور". اتصالات رابطة آلات الحوسبة . 52 (5): 62-69 . doi : 10.1145/1506409.1506425 . ISSN 0001-0782 . S2CID 2803479 .
- فيرنر شوستر (15 يونيو 2007). "ما هي لغة برمجة روبي الخاصة بالمجال وما ليست كذلك؟" . سي فور ميديا . تم الاطلاع عليه بتاريخ 8 سبتمبر 2009 .
- فاولر، مارتن (2011). لغات خاصة بالمجال . أديسون-ويسلي. ISBN 978-0-321-71294-3.
روابط خارجية
- " اللغات المصغرة "، فن برمجة يونكس ، بقلم إريك س. ريموند
- مارتن فاولر يتحدث عن لغات البرمجة المتخصصة وبيئات تطوير اللغات . كما يتوفر عرض فيديو له.
- اللغات الخاصة بالمجال: ببليوغرافيا مشروحة (مؤرشفة بتاريخ 16 مارس 2016 على موقع Wayback Machine)
- "مترجمات اليوم الواحد: بناء لغة برمجة صغيرة خاصة بمجال معين باستخدام OCaml" . www.venge.net . مؤرشف من الأصل بتاريخ 10 يونيو 2025.
- رابطة Usenix: مؤتمر حول لغات المجال المحددة (DSL '97) والمؤتمر الثاني حول لغات المجال المحددة (DSL '99)
- لغات داخلية خاصة بالمجال
- الدليل الكامل للغات الخاصة بالمجالات (الخارجية)
- jEQN مؤرشف بتاريخ 2021-01-31 في Wayback Machine مثال على لغة خاصة بالمجال الداخلي لنمذجة ومحاكاة شبكات الانتظار الموسعة .
- مقالات
- خطوط DSL خارجية بتقنية Eclipse
- "بناء لغات خاصة بالمجال على إطار عمل لغوي". 1997. CiteSeerX 10.1.1.50.4685 .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - استخدام Acceleo مع GMF : إنشاء عروض تقديمية من مُنمذج MindMap DSL ( مؤرشف بتاريخ 30 يوليو 2016 على Wayback Machine)
- لغة النمذجة الموحدة (UML) مقابل لغات المجال المتخصصة
- ساجار سين وآخرون (2009). "تقليم النموذج الفوقي". CiteSeerX 10.1.1.156.6008 .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
- لغات البرمجة الخاصة بالمجال
- تصنيف لغات البرمجة
