فصل دوم
ادبیات و پیشینه تحقیق
۲-۱ مقدمه
در حالت ایده آل، برنامهنویس بودن به این معنی است که بتوان با آزادی و کنترل کامل هر کاری را بر روی یک رایانه انجام داد؛ اما در واقع، برنامهنویسان آزادی محدودی دارند و هنوز برای انجام این کار هیچ راه خوبی وجود ندارد. در حالت ایده آل، میتوان از زبانهای مختلف برای هر بخش تخصصی از برنامه استفاده کرد و همه باهم به طور منسجم کار کنند و محیط نیز، به طور کامل از این زبان با فاکتوردهی مجدد، تکمیل کد، هدایت و تمام ابزارهای مفید دیگر که برای زبانهای اصلی در دسترس هستند، حمایت می کند. برای رسیدن به این استقلال، نیاز است تا در ایجاد، استفاده مجدد، تغییر زبان و محیط آزادی وجود داشته باشد. اگر مشکل توسعه آسان زبان و محیط حل شود، یک جهش بزرگ رو به جلو برای برنامهنویسان خواهد شد. این همان جایی است که زبان برنامهنویسی گرا پا به میدان می گذارد [۲]. به صورت خلاصه، در برنامهنویسی شی گرا، سعی میشود مسئله توسط اشیا مدل شود و بعد از آن با اتصال اشیا و توصیف روابط و وظایف آنها، مسئله اصلی حل شود؛ اما در برنامهنویسی زبان گرا[۵]، به جای استفاده از مدل کردن شیءگرا یا استفاده از مدل تابعی، برنامهنویس سعی در ایجاد یک یا چند زبان خاص دامنه (احتمالاً بر پایهی تمامی مباحث برنامهنویسی تا اینجا) در راستای حل مسئله دارد. برای ایجاد زبان خاص دامنه داخلی تنها کافی است با بهره گرفتن از امکانات زبان میزبان، شروع به ایجاد کتابخانههای مورد نظر برای ایجاد زبان سطح بالاتر و نزدیکتر به دامنه مسئله کرد و با ایجاد یک یا چند زبان خاص دامنه سعی در حل مسئله داشت.
زبانهای خاص دامنه زبانهایی هستند که حیطه خاصی از محاسبات را هدف میگیرند. این زبانها اگر به درستی انتخاب و به کار برده شوند، میتوانند در حوزه کاربردی خود، کدهای پیچیده زبانهای دیگر را به کدهای ساده و خوانا تبدیل کرده، ارتباط مؤثرتر با مشتریان را فراهم کرده، بهرهوری را بالاتر برده و گلوگاههای فرایند کد نویسی را از بین ببرند. به طور معمول با این زبانها نمیتوان یک برنامه کامل نوشت، بلکه معمولاً در یک سیستم نرمافزاری که خودش با یک زبان همه منظوره نوشته شده است، از چندین زبان خاص دامنه استفاده میشود (همان تفکر برنامهنویسی زبان گرا). زبان گرووی یکی از بهترین زبانهایی است که میتوان از آن به عنوان زبان میزبان استفاده کرده و یک زبان خاص دامنه تولید کرد.
۲-۲ روند تحول زبانها
در گذشته اینگونه بیان میشد که فقط دو نوع زبان برنامهنویسی وجود دارد: زبان ماشین و زبانهای سطح بالا. هر دوی این زبانها همه منظوره هستند که در آنها امکان ساخت هر نوع نرمافزاری وجود دارد؛ اما هر زبان نقاط قوت و ضعف خاص خود را دارد و باید مفهوم زبان خاص دامنه به عنوان بخشی از برنامه آموزشی در نظر گرفته شود.
۲-۲-۱ زبانهای همه منظوره
در زبان برنامهنویسی سطح بالایی که یک فرد استفاده مینماید، بیان می کند او برنامهنویس چه نوع برنامهای است. کوبول برای برنامهنویسی کسبوکار میباشد، فرترن برای برنامهنویسان علمی وC برای هکرها که نرمافزارهای یونیکس و رایانههای شخصی را میسازند. اگرچه کوبول و فرترن برای استفاده در یک دامنه خاصی از کسبوکار طراحی شده اند، اما باز هم به عنوان زبان همه منظوره در نظر گرفته میشوند. اگر کسی بخواهد می تواند یک برنامه علمی را در کوبول یا یک برنامه کسبوکار را در فرترن بنویسید. با این حال، انجام هر گونه توسعه درایور سطح پایین دستگاه در کوبول امری بعید است. [۴]
اگر چه ساخت تمام برنامه های کاربردی در زبان اسمبلی[۶] ممکن است (و بسیاری از مردم این کار را انجام دادهاند.)، زبانهای سطح بالا مانند C، بیسیک[۷] و کوبول، برای این کار مناسبتر میباشند. اولین نسخه از صفحه گسترده ضرب جهانی، لوتوس ۱-۲-۳، به طور کامل در زبان اسمبلی ۸۰۸۶ نوشته شده و از قضا، بازنویسی آن در زبان به فرض سطح بالایC است که تقریباً شرکت را در اواخر ۱۹۸۰ ورشکست کرد [۳].
۲-۲-۲ صفحه گستردهها و زبانهای نسل چهارم
برنامههایی مانند لوتوس ۱-۲-۳ و پیش ساز آن VisiCalc دیدگاه افرادی که میخواهند برنامه بنویسند را تغییر اساسی می دهند. یک نسل کامل از حسابداران، تحلیلگران مالی، دانشمندان و مهندسان به این درک رسیدند که آنها میتوانند موارد آماده به استفاده و همچنین راه حل ها را که تنها با یک صفحه گسترده و دانش کمی از ماکروها مسلح شده اند برای خود توسعه دهند. ماکروهای صفحه گسترده احتمالاً یکی از اولین زبانهای خاص دامنه برای پیدا کردن راه خود در خارج از صومعه جامعه فناوری اطلاعات و در دست کاربرند [۳].
زبانهای نسل چهارم[۸]، نسبت به زبانهای سطح بالای سنتی که به عنوان نسل سوم زبانها شناخته میشوند به عنوان زبانهای کارآمدتری برای توسعه برنامه های کاربردی تبلیغ شدهاند و به همین دلیل افراد از فکر کردن به این نکته که سن برنامهنویسهای حرفهای به یک پایان میرسد و اینکه یک کاربر عادی کسبوکار می تواند از یک زبان نسل چهارم برای توسعه برنامهی کاربردی خود استفاده کند، عفو میشوند.
پیچیدگی اکثر برنامههای کاربردی به این است که ساخت آنها با چند ساختار واضح ممکن باشد. زبانهای نسل چهارم تمایل دارند که یک محیطی کلیدی، به همراه ابزارهای یکپارچه نرمافزار و محیط زمان اجرا باشند. محیطی که زبان نسل چهارم ارائه می کند برنامهنویس را محدود می کند، اما برنامه های کاربردی با یک زبان نسل چهارم میتوانند با سرعت بالا و با حداقل مقدار برنامهنویسی ساخته شوند.
زبانهای نسل چهارم با درک مدرن از یک زبان خاص دامنه فرق دارد. به طور کلی به زبان خاص دامنه به گونه ای نگریسته می شود که یک زبان کوچک با یک هدف خاص باشد و یک زمان اجرا و یا یک مجموعه ابزار کامل را در هنگام استفاده تحمیل نکند. بهترین زبانهای خاص دامنه میتوانند باهم آمیخته و تطبیق داده شوند و در ترکیب با یک زبان برنامهنویسی همه منظوره مانند C++ یا جاوا استفاده شوند تا برنامه های کاربردی را بسازند.
۲-۲-۳ برنامهنویسی زبان گرا
وقت آن است که انقلاب فنآوری جدیدی در توسعه نرمافزار آغاز شود و شکل این انقلاب در حال روشن و روشنتر شدن است. مدل فکری برنامهنویسی بعدی تقریباً در راه است که هنوز به طور کامل شکل نگرفته است و بخشهای مختلف نامهای مختلفی همانند برنامهنویسی عمدی، برنامهنویسی مولد و غیره روی آن میگذارند. یک پیشنهاد خوب اتحاد تمام این رهیافتهای جدید تحت نام «برنامه نویسی زبان گرا» است.
نگرش امروزی به برنامهنویسی، پیشفرضهای حیاتی در خود دارد که برنامهنویس را محدود کرده است و باید اعتقادات سنتی کنار گذاشته شود. زبانهای برنامهنویسی سنتی از جمله زبان برنامهنویسی شیءگرا با اینکه عملکرد خوبی دارند اما زمانی که در برابر مشکلات بزرگ استفاده میشوند، شکاف ایجاد می کنند. اینجا صحبت در مورد محدودیتهای برنامهنویسی است که برنامهنویس را مجبور می کند مانند رایانه فکر کند به جای اینکه رایانه را مجبور کند که بیشتر شبیه برنامهنویس فکر کند. اینها به طور جدی، محدودیتهایی است با ریشه های عمیق که برای غلبه بر آنها تلاش های بسیاری لازم است و باید به طور کامل راه نوشتن برنامه دوباره تعریف شود [۲].
ساخت برنامه های کاربردی از تعداد زیادی از زبانهای خاص دامنه کوچک که مختص فضای مسئله خاصی هستند، در یک سبک توسعه، برنامهنویسی زبان گرا نامیده می شود. این سبک از برنامهنویسی، هنگامی که برنامهنویس HTML، CSS، SQL و جاوا را برای ساخت برنامههای کاربردی باهم ترکیب کرده و تطابق میدهد، تا اندازهای برای اکثر توسعهدهندگان تبدیل به یک هنجار می شود. محور برنامهنویسی زبان گرا این است که همه ما باید به ورای بهره برداری از این زبانهای عمومی که در دسترس هستند برویم و زبانهای خاص دامنه خودمان را پیادهسازی کنیم که فضای مسئلهی خاصی را نشان می دهند که ما در حال کار کردن روی آن هستیم [۵].
در حالت ایده آل، برنامهنویس بودن به این معنی است که بتوان هر کاری را با آزادی و کنترل کامل بر روی یک رایانه انجام داد؛ اما در واقعیت، برنامهنویسان امروزه آزادی محدودی دارند. مطمئناً آنها میتوانند هر کاری را بر روی یک رایانه انجام دهند، اما برای برخی از کارها باید سالها تلاش کنند درحالیکه برای انجام آن کار ممکن است به زمان خیلی کمتری نیاز باشد. برنامهنویسان خود را محدود کرده اند زیرا به شدت به زیرساختهای برنامهنویسی یعنی زبان و محیطی که از آن استفاده می کنند وابسته هستند که به راحتی نمی توانند تغییرشان دهند.
اگر برنامهنویس میخواهد در یک زبان توسعههایی ایجاد کند، باید در انتظار طراح زبان بماند تا آن را بهروزرسانی کند. اگر نیاز به قدرت بیشتری از محیط توسعه یکپارچه[۹] دارد، باید منتظر بماند تا فروشنده آن محیط، ویژگیهای جدیدی به آن اضافه کند. این وابستگی است که آزادی کامل را محدود می کند. مطمئناً، برنامهنویس می تواند برای خود مترجم و یا محیط توسعه یکپارچه بنویسد. به همین دلیل کار بر روی ویرایشگرهایی مانند IntelliJ IDEA شروع شد، چرا که اکثر برنامهنویسان از وابسته بودن به مترجمهای جاوای موجود که ضعیفاند خسته شده بودند؛ اما این کار نیازمند زمان زیاد و تلاش فراوان است و به سادگی برای همه برنامهنویسان عملی نیست. تفاوت بزرگی میان آزادی نظری و آزادی عملی وجود دارد. هنگامی که در مورد آزادی در اینجا صحبت می شود، منظور آزادی عملی است. راه دستیابی به این آزادی عملی، کاهش سطح وابستگی است. به عنوان مثال، یکی از اهداف اصلی جاوا کاهش وابستگی به سیستمعامل است که به توسعهدهندگان آزادی میدهد بر روی سیستمعاملهای مختلف توسعه خود را انجام دهند؛ بنابراین، برای به دست آوردن آزادی در زبان و محیط، باید وابستگی برنامه به آنها کاهش یابد.
تمام زبانهای همه منظوره، مانند جاوا یا C++، به برنامهنویس توانایی انجام هر کاری را با یک رایانه می دهند. این حداقل به صورت نظری درست است، اما همان طور که بعداً نشان داده خواهد شد، زبانهای همه منظوره تمایل به بیفایده بودن دارند. متناوباً، میتوان از زبانهای خاص دامنه استفاده کرد چرا که در یک دامنه مسئلهی خاص بهرهوری بیشتری دارند. مانند SQL برای نوشتن کوئریهای پایگاه داده که در حوزه خود بهرهوری بالایی دارند. قدرت زبانهای خاص دامنه، مختص دامنه بودن است که مادامی که هر برنامه در دنیای واقعی شامل حوزه های مختلف باشد همچنین ضعف آنها نیز به شمار میرود [۲].
این یک استفهام برای اهداف عمومی در مقابل دامنه خاص نیست. برنامهنویس تمام آزادیها را میخواهد تا قادر به انجام هر کاری باشد و در همان زمان نیز بالاترین بهرهوری را داشته باشد. هنوز برای انجام این کار هیچ راه خوبی وجود ندارد. در حالت ایده آل، میتوان از زبانهای مختلف برای هر بخش تخصصی از برنامه استفاده کرد و همه باهم به طور منسجم کار کنند و محیط نیز، به طور کامل از این زبان با فاکتوردهی مجدد، تکمیل کد، هدایت و تمام ابزارهای مفید دیگر که برای زبانهای اصلی در دسترس هستند، حمایت می کند. برای رسیدن به این استقلال نیاز است تا در ایجاد، استفاده مجدد، تغییر زبان و محیط آزادی وجود داشته باشد. اگر مشکل توسعه آسان زبان و محیط حل شود، یک جهش بزرگ رو به جلو برای برنامهنویسان خواهد شد. این همان جایی است که زبان برنامهنویسی گرا پا به میدان می گذارد.
برای درک اینکه زبان برنامهنویسی گرا چیست، ابتدا برنامهنویسیهای اصلی امروزی بررسی خواهند شد. میتوان گفت این زبانها به طور تقریبی مراحل زیر را طی می کنند:
فکر: یک برنامه باید نوشته شود، بنابراین باید یک مدل مفهومی در ذهن برنامهنویس در مورد چگونگی حل مشکل تشکیل شود.
انتخاب کردن: برنامهنویس تعدادی از زبانهای همه منظوره را برای نوشتن راه حل انتخاب می کند (مانند جاوا یا C + +).
نوشتن: برنامهنویس راه حل را با انجام یک نگاشت دشوار از مدل مفهومی خود به زبان برنامهنویسی مینویسد.
گام برنامهنویسی گلوگاه است زیرا در بسیاری از موارد نگاشت کاری آسان یا طبیعی نیست (شکل ).
شکل ۲-۱: برنامهنویسی جریان اصلی با یک زبان همهمنظوره [۲]
روش ذکرشده برای برنامهنویسان در بیان برنامه های پیچیده، روشی کارا نیست و این امر ثابت شده است. در مقابل، برنامهنویسی زبان گرا به اینگونه کار می کند:
فکر: یک برنامه باید نوشته شود، بنابراین برنامهنویس باید یک مدل مفهومی در ذهن خود در مورد چگونگی حل مشکل شکل دهد.
انتخاب کردن: برنامهنویس تعدادی از زبانهای خاص دامنه را برای نوشتن راه حل انتخاب می کند.
ایجاد: اگر هیچ زبان خاص دامنه مناسبی برای مسئلهی وجود نداشت، برنامهنویس زبانی ایجاد می کند که مناسب باشد.
برنامهنویسی: با انجام یک نگاشت نسبتاً مستقیم از مدل مفهومی خود به زبانهای خاص دامنه، راه حل را مینویسد.
در حال حاضر، گام برنامهنویسی بسیار کمتر از این است که یک تنگنا باشد چرا که زبانهای خاص دامنه، ترجمهی مسئله به چیزی که برای رایانه قابلدرک باشد را بسیار سادهتر می کنند (شکل ). ممکن است اینگونه به نظر برسد که مشکل فقط به «مرحله ایجاد» منتقل شده است، اما ترکیبی از ابزارهای پشتیبانی و استفاده از برنامهنویسی زبان گرا این مرحله را بسیار آسانتر می کنند.
شکل ۲-۲: برنامهنویسی زبان گرا با زبان خاص دامنه [۲]
هدف برنامهنویسی زبان گرا این است که باید بتوان بر حسب مفاهیم و تصاویر ذهنی، روی مسئله کارکرد به جای اجبار در ترجمه ایده ها و مفاهیمی که یک زبان همه منظوره قادر به فهم آنها باشد; به عنوان مثال کلاسها، روشها، حلقهها، شرطی و غیره. برای رسیدن به این هدف، به استفاده از زبانهای خاص دامنه نیاز است و آنها باید ایجاد شوند.
۲-۴ برنامه در برنامهنویسی زبان گرا
امروزه، اکثر برنامهنویسان فکر می کنند برنامهنویسی یعنی نوشتن مجموعه ای از دستورالعملها برای رایانه دنبال شوند. اینگونه آموزش داده شده است که رایانهها بعد از ماشین تورینگ مدلسازی شدند و بنابراین آنها بر حسب مجموعه ای از دستورالعملها فکر می کنند؛ اما این دیدگاه برنامهنویسی ناقص است. این معنی برنامهنویسی هدفدار را دچار سردرگمی می کند.
زمانی که یک مسئله باید حل شود، برنامهنویس در سر خود در مورد راه حل فکر می کند. این راه حل در واژه ها، تصورات، مفاهیم، افکار و یا هر چیز دیگری نشان داده شده است. این یک مدل است در سر برنامهنویس که چگونه این مسئله باید حل شود. او تقریباً هرگز در مورد آن به عنوان یک مجموعه ای از دستورالعملها فکر نمیکند، بلکه به آنها به چشم مجموعه ای از مفاهیم وابسته به هم نگاه می کند که مخصوص دامنهای هستند که در آن کار می کند. برای مثال، اگر در دامنه رابط کاربری گرافیکی فکر می کند، به اینگونه میاندیشد که «من میخواهم این دکمه به اینجا برود، این فیلد به اینجا برود و این جعبهی صفحه خالی[۱۰] باید یک لیست از برخی از داده ها را در خود داشته باشد.» حتی ممکن است آن را در ذهن خود بدون هیچگونه کلمهای به تصویر بکشد.
این مدل ذهنی یک راه حل است زیرا می تواند این مدل را برای یک برنامهنویس دیگر با جزئیات کافی توضیح دهد به طوری که برنامهنویس دیگر می تواند با آن یک برنامه بنویسد (به عنوان مثال در جاوا) که این برنامه مسئله را حل خواهد کرد و نیازی ندارد که راه حل را بر حسب یک زبان برنامهنویسی توضیح دهد، برنامه می تواند تقریباً در هر شکلی توضیح داده شود. برای اینکه توضیح دهد که چگونه یک فرم گرافیکی را ذخیره کند، فقط فرم را ترسیم می کند. به عنوان مثال، اگر این طراحی به اندازه کافی جزئیات را گفته باشد، بنابراین طراحی به خودی خود نشاندهنده راه حل است. برنامه باید چنین بازنماییهای خاص دامنهای باشد؛ به عبارت دیگر، باید یک روش باشد که به برنامهنویس اجازه دهد تا از این بازنمایی به عنوان یک برنامهی واقعی استفاده کند، نه فقط به عنوان یک راه برقراری ارتباط با دیگر برنامهنویسان؛ بنابراین این منجر به تعریف غیررسمی از برنامه می شود: برنامه هر گونه راه حل بدون ابهام یک مشکل است. یا به بیان دقیق تر: برنامه هر مدل تعریفشدهی دقیق از یک راه حل برای بعضی از مسائل در برخی از دامنههاست که با بهره گرفتن از مفاهیم دامنه بیان شده است.
این است دلیل اصلی که برنامهنویسان باید این آزادی را داشته باشند تا زبان خود را به گونه ای ایجاد کنند که بتوانند راه حل ها را در اشکال طبیعی بیشتری بیان کنند. زبانهای همه منظوره بدون ابهام هستند، اما بیش از حد طولانیاند و گزافهگویی دارند و همچنین مستعد خطا هستند. زبان طبیعی (به عنوان مثال انگلیسی) بسیار غنی است، اما در حال حاضر بیش از حد دشوار است چرا که بسیار غیررسمی و مبهم است.
باید به راحتی بتوان اقدام به ایجاد زبانهای خاص دامنه رسمی و با تعریف دقیق کرد؛ بنابراین زبان برنامهنویسی گرا نه فقط برای نوشتن برنامههاست، بلکه زبانی را نیز ایجاد می کند که با آن بتوان برنامه ها را نوشت؛ بنابراین برنامه ها نزدیکتر به دامنه مسئله نوشته خواهد شد به جای دامنه مجموعه ای از دستورالعملهای رایانه و به گونه ای که نوشتن آنها بسیار سادهتر باشد.
همه این ایده را دارند که یک برنامه به عنوان یک متن ذخیره شده است، یعنی یک جریان از کاراکترها. پس از همه اینها، ابزارهای بیشماری برای ویرایش، نمایش و دستکاری متن وجود دارد. امروزه بخشهای مرکزی زبانهای برنامهنویسی دستور زبان، تجزیه کنندهها، مترجمها و اشکالزداهای[۱۱] خط گرا هستند؛ اما متن برنامه فقط یک نماینده از این برنامه است. برنامه ها متن نیستند. اگر برنامه ها وادار شوند که متن باشند، مشکلات بسیاری به وجود خواهد آمد که همگان ممکن است حتی از آن آگاه نباشند چرا که به راههای مختلف برای ذخیره و کار با برنامه ها نیازاست.
هنگامی که یک مترجم کد منبع را ترجمه می کند، متن را به یک ساختار درخت مانند گراف تجزیه می کند که «درخت نحوی انتزاعی» نامیده می شود. برنامهنویسان در هنگام خواندن کد منبع، اساساً همان عملیات ذهنی را انجام می دهند. هنوز باید در مورد ساختار درخت گونهی برنامه فکر کنند. به همین دلیل است که کروشه و پرانتز و مانند آنها وجود دارند. همچنین به همین دلیل است که نیاز به قالب و تو رفتگی کد و دنبال کردن قراردادهای برنامهنویسی دارند، چرا که این کار خواندن کد منبع را آسان تر می کند. آنها متوسل به ذخیرهسازی متن میشوند به این دلیل که در حال حاضر، راه جهانی و راحت برای خواندن و ویرایش برنامه ها با یک ویرایشگر متن است؛ اما باز هم هزینهای پرداخت می شود چرا که نمایشدهندههای متن برنامه ها دارای اشکالات بزرگاند، مهمترین آنها این است که گسترش زبانهای برنامهنویسی مبتنی بر متن بسیار دشوار است. اگر برنامه ها به صورت متن ذخیره شوند، برنامهنویس نیاز به یک دستور زبان بدون ابهام دارد تا بتواند این برنامه را تجزیه کند. از آنجا که ویژگیها به زبان اضافهشدهاند، ایجاد گسترشهای جدید در برنامه به گونه ای که زبان مبهم نشود، کار بسیار دشواری است. نیاز است انواع بیشتری از کروشهها، عملگرها، کلمات کلیدی، قواعد سفارش، تودرتو و غیره اختراع شود. طراحان زبان مقادیر زیادی از زمان خود را صرف تفکر در مورد نحو متن کرده و تلاش می کنند راههای جدیدی برای گسترش آن پیدا کنند.
اگر میخواهیم ایجاد زبان را ساده سازیم، باید نمایش و ذخیرهی برنامه، از خود برنامه جدا شود. باید برنامه به طور مستقیم به عنوان یک گراف ساختار ذخیره شود، این کار اجازه میدهد هرگونه گسترشی که نیاز است در برنامه ایجاد شود. گاهی اوقات، حتی به کل نیازی به در نظر گرفتن ذخیرهسازی متن وجود ندارد. امروزه یک مثال خوب، یک صفحه گسترده اکسل است. اکثر مردم به طور کلی نیاز ندارد با قالب ذخیرهشده سروکار داشته باشند، در آنجا همیشه زمانی که یک فرضیه مطرح می شود ویژگیهای ورودی و خروجی وجود دارد. تنها دلیل واقعی که امروزه از متن استفاده می شود این است که هیچ ویرایشگری که بهتر از ویرایشگرهای متنی باشد وجود ندارد؛ اما میتوان این را تغییر داد.
مشکل این است که ویرایشگرهای متنی هوشمند نیستند و نمیدانند که چگونه با ساختار اساسی گراف برنامه کار کنند؛ اما با ابزار مناسب، ویرایشگر می تواند به طور مستقیم با ساختار گراف کار کند و به برنامهنویس آزادی استفاده از هر گونه نمایش مجازی که میخواهد را بدهد. میتوان برنامه را به عنوان متن، جداول، نمودارها، درختان، یا هر چیز دیگری ارائه داد. حتی میتوان از نمایشهای مختلف برای مقاصد مختلف استفاده کرد، به عنوان مثال یک نمایش گرافیکی برای مشاهده و یک نمایش متنی برای ویرایش. میتوان از نمایشهای خاص دامنه برای بخشهای مختلف کد استفاده کرد، به عنوان مثال نمادهای ریاضی گرافیکی برای فرمولهای ریاضی، نمودار گرافیکی برای نمودار، ردیفها و ستونها برای صفحات گسترده و غیره. میتوان از مناسبترین نمایش برای دامنه مسئله استفاده کرد که ممکن است متن باشد، اما به متن محدود نمی شود. بهترین نمایش بستگی به این دارد که برنامهنویس چگونه در مورد دامنه مسئله فکر می کند. این انعطافپذیری در نمایشها، این زمینه را فراهم می آورد تا ویرایشگرها قویتر از همیشه شوند، چرا که نمایشهای مختلف میتوانند راههای تخصصی برای ویرایش داشته باشند [۲].
۲-۵ زبانهای خاص دامنه
راهنمای ﻧﮕﺎرش ﻣﻘﺎﻟﻪ ﭘﮋوهشی درباره : طراحی و پیادهسازی یک زبان خاص دامنه برای آزمون نرمافزار- ...